二、容器
18. java 容器都有哪些?
String,数组以及java.util下面的集合类
List:存放有序,列表存储,元素可重复 ArrayList LinkedList Vector
Set:无序,元素不可重复 HashSet TreeSet
Map:无序,元素可重复 HashMap TreeMap LinkedHashMap HashTable
19. Collection 和 Collections 有什么区别?
Collection是集合类的一个顶级接口,它提供了对集合对象进行基本操作的通用接口方法.
Collections是集合类的一个工具类,它提供了一系列的静态方法,用于对集合中元素进行排序,搜索以及线程同步等操作.
20. List、Set、Map 之间的区别是什么?
List:可以允许重复的对象;
可以插入多个null元素;
有序,输入顺序就是输出顺序;
Set: 不允许重复对象;
无序,且只允许一个null对象;
Map: 存储键值对,只能有唯一的key,value可以重复
只能有一个null键
21. HashMap 和 Hashtable 有什么区别?
一. HashMap可以接受null键和值,HashTable不行
二. HashTable是线程安全的,通过synchronized来保证,而HashMap线程不安全
三. HashMap的迭代器是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast.
22. 如何决定使用 HashMap 还是 TreeMap?
HashMap基于散列表实现,适用于查询频繁的情况
TreeMap基于红黑树实现,适用于创建比较多的情况.且TreeMap存储数据是按照字母表的顺序存储的,如果对顺序有要求也可以选用TreeMap.
23. 说一下 HashMap 的实现原理?
数组+链表,初始16,0.75扩容,数据存在内部类Map.Entry中,其中包含key value hashcode和next.
24. 说一下 HashSet 的实现原理?
HashSet基于HashMap实现,默认构造函数是构造一个初始容量为16的HashMap,所有放入HashSet
集合的元素实际上由HashMap的key来保存,而value则保存了一个PRESENT的静态Object对象,因为元素都保存在key中,所以才能不重复.
25. ArrayList 和 LinkedList 的区别是什么?
- ArrayList底层基于动态数组,LinkedList基于链表实现,底层是循环双向链表
- 对于随机访问get和set,ArrayList优于LinkedList.
- 对于新增add和删除remove,LinkedList比较快
26. 如何实现数组和 List 之间的转换?
- List转数组:toArray()方法.在方法参数中指定原集合的长度的数组即可.
- 数组转List:Arrays的asList()方法.
27. ArrayList 和 Vector 的区别是什么?
- Vector的方法都是同步的,是线程安全的,ArrayList则不是.
- 在进行扩容的时候,Vector扩容至原来的一倍,ArrayList增加至原来的0.5倍.
28. Array 和 ArrayList 有何区别?
- Array(数组)可以包含基本数据类型和对象类型,ArrayList只能包含对象类型.
- ArrayList可以自动扩容,Array则不行.
29. 在 Queue 中 poll()和 remove()有什么区别?
Queue中,add方法和offer方法都可以添加元素,而remove和poll都是删除队列的头元素,区别在于:
add方法在队列满的情况下抛异常,而offer方法则返回false.
remove方法在队列为空时抛异常,poll方法将返回null.
30. 哪些集合类是线程安全的?
Vector HashTable ConcurrentHashMap Stack
31. 迭代器 Iterator 是什么?
Iterator是个接口,它提供了很多对元素进行迭代的方法.迭代器可以在迭代过程中删除底层集合的元素,可以直接调用Iterator的remove()方法来删除. 因为在Conllection接口中定义了获取集合迭代器的方法,所以每一个集合都包括了可以返回迭代器实例的方法.
32. Iterator 怎么使用?有什么特点?
每个集合都可以用iterator()方法一个Iterator实例.
使用next()方法获取序列中的下一个元素,使用hasNext()方法检查序列中是否有元素
使用remove()方法将迭代器新返回的方法删除.
特点:Iterator将集合的遍历和其底层的结构分离.
33. Iterator 和 ListIterator 有什么区别?
ListIterator是Iterator的子接口,用于扩展Iterator.
在Iterator中,我们只能向前移动,无法操纵或者修改集合中的元素.ListIterator弥补了这种缺点
区别: 1.范围不同,Iterator适用于所有集合,而ListIterator只适用于List及其子类
2.ListIterator有add方法可以添加元素,Iterator则不行.
3.ListIterator可以实现双向遍历,Iterator则不行.
4.ListIterator可以实现对象的修改,Iterator不行
5.ListIterator可以获取集合中的所有,Iterator不行.
34. 怎么确保一个集合不能被修改?
可以使用Collections或者Guava来快速实现.如Collections.unmodifiableMap(xxxMap);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97010.html