目录
12、Queue中poll() 和 remove() 的区别
21、ArrayList,LinkedList,Vector存储性能和特性
23、Set中的元素是不可重复的,是用什么方法来区分的?==还是equals()
29、HashMap和ArrayList是不是都是线程不安全的
二、容器
1、Java容器都有哪些
list:ArrayList,LinkedList,Vector
set:hashSet,treeSet
map:hashMap,TreeMap
2、Collection和Collections有什么区别
Collection是List和Set的实现借口
Collections是集合工具类,里面有很多集合的方法,例如:搜索,排序等
3、List、Set、Map之间的区别分别是什么
List:有序,可重复
Set:无序,不可重复
Map:key-value结构,key不可重复,value可重复
List和Set继承了Collection接口,Map没有继承
4、HashMap和HashTable之间的区别是什么
HashMap是非线程安全的,HashTable是线程安全的
HashMap允许key和value为null,HashTable不允许
5、如何决定使用hashMap还是treeMap
treeMap是基于红黑树实现的,是有序的
hashMap是无序的
对于在map中插入,删除和定位元素这类操作,hashMap是最好的选择,如果你需要对一个有序的key集合进行遍历,TreeMap是更好的选择
6、HashMap的原理
当我们往hashMap中put元素时,首先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链表头,最先加入的放入链尾,如果数组中没有该元素,就直接将该元素放到数组的位置上
7、HashSet的原理
HashSet底层由HashMap实现
HashSet的值存放在HashMap的key上
HashMap的value同意为Present
8、ArrayList和LinkedList的区别
ArrayList的底层数据结构是数组,支持随机访问,查找效率高,增删效率低
LinkedList的底层数据结构是双向链表,不支持随机访问,增删效率高,查找效率低
9、如何实现数组和list之间的转换
数组 -> list :数组里的asList()
list -> 数组 : list里的toArray()
10、ArrayList和Vector之间的区别
ArraysList 是非线程安全的,容量每次增长为原先的1.5倍
Vector是线程安全的,容量每次增长为原先的2倍
11、Array和ArrayList的区别
Array是数组,ArrayList是集合
Array类型的变量声明的同时必须实例化,ArrayList 可以只先声明
Array智能存储单类型的结构,ArrayList可以存储异构的对象
12、Queue中poll() 和 remove() 的区别
Queue 是队列
相同点:都是返回第一个元素,并在队列中删除返回的对象
不同点:如果没有返回元素,poll返回null,remove直接返回NoSuchElementException(无接触异常)
13、哪些集合类是线程安全的
Vector,HashTable,Stack
Java,util.concurrent包下的所有集合类
ArrayBlockingQueue、
ConcurrentHashMap、
ConcurrentLinkedQueue、
ConcurrentLinkedDeque
14、迭代器Iterator是什么
迭代器:Java常用的设计模式之一,用于顺序访问集合对象的元素,无需知道集合对象的底层实现
Iterator可以遍历集合,为各种容器提供了公共的操作接口,隔离对容器的遍历操作的底层实现,从而解耦
缺点是增加新的集合类需要对应的增加新的迭代器,迭代器类和集合类成对增加
15、Iterator怎么使用?有什么特点
在Java的各个容器中,例如:ArraysList,hashSet等,并没有直接实现Iterator这个接口,而是有Iterator() 这个方法
直接调用,然后获取到 Iterator 这个类的对象,用while(对象.hashNext() ) 去遍历