1.HashMap的键值允许为空吗?
集合类 | Key | Value | Super | 线程 |
---|---|---|---|---|
Hashtable | 非null | 非null | Dictionary | 安全 |
ConcurrentHashMap | 非null | 非null | AbstractMap | 安全 |
TreeMap | 非null | 可null | AbstractMap | 不安全 |
HashMap | 可null | 可null | AbstractMap | 不安全 |
WeakHashMap | 可null | 可null | AbstractMap | 不安全 |
注:List、Set、Queue继承于Collection接口,
2.HashMap和HashTable的区别?
历史原因
Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现同步性
Hashtable是线程安全的(加锁了),而HashMap是线程序不安全的,不是同步的值
只有HashMap可以让你将空值作为一个表的条目的key或value,而HashTable不允许有null的键和值,HashMap效率高
3.ArrayList和Vector的区别
同步性:
Vector是线程安全的,而ArrayList是非线程安全的数据增长:
ArrayList与Vector都有一个初始的容量大小,需要扩容时Vector默认增长为原来两倍,而ArrayList增长为原来的1.5倍。
4.List、Map、Set三个接口,存取元素时,各有什么特点?
List与Set都继承于Collection接口,它们都是单列元素的集合,
Set里面不允许有重复的元素,List表示有先后顺序的集合,即先来后到的顺序。
Map与List和Set不同,它是双列的集合,Map保存key-value值,value可多值。可以存储重复元素,但重复元素只有一份。
-
Collection接口与Collections类
- Collection是集合类的上级接口,继承与他的接口主要有Set和List.
- Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
5.ArrayList和LinkedList的区别?
ArrayList和LinkedList都实现了List接口,它们的区别如下
ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,查找某个元素的时间复杂度是O(n)。
LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。而ArrayList的随机访问速度更快。
LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
6.Comparable和Comparator接口的区别?
Comparable接口用于定义对象的自然顺序,只包含一个compareTo()方法。可以给两个对象排序。即它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。
Comparator接口用于定义用户定制的顺序,包含compare()和equals()等多个方法。compare()方法用来给两 个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true
7.HashSet和TreeSet的区别?
HashSet底层由HashMap来实现的,因此,它的元素是无序的。add(),remove(),contains()方法的时间复杂度是O(1)。
TreeSet底层由TreeMap的红黑树来实现的,它里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度是O(logn)。
8.poll() 方法和 remove() 方法的区别?
poll() 和 remove() 都是从队列中取出一个元素
poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。
9.LinkedHashMap 和 PriorityQueue 的区别?
PriorityQueue 保证最高或者最低优先级的的元素总是在队列头部
LinkedHashMap 维持的顺序是元素插入的顺序。
WeakHashMap 是以弱键 实现的基于哈希表的 Map,当某个键不再正常使用时,将自动移除其条目。键映射的存在并不阻止垃圾回收器对该键的丢弃
TreeSet继承于AbstractSet,非线程安全,一种有序集,元素必须实现Comparable接口
HashSet继承于AbstractSet,非线程安全,可为空,一种没有重复元素的无序集合,存入HashSet的元素必须定义hashCode()
LinkedHashSet继承于HashSet,维护着一个运行于所有条目的双重链接列表, 一种可以记住元素插入次序的集合,
ArrayDeque : 一种用循环数组实现的双端队列,可以在任何一端添加或移除元素
10.对Iterator的理解
Iterator是迭代器设计模式,它是一个对象,它可以遍历并选择序列中的对象
ListIterator接口 继承了Iterator接口,允许按照任意方向遍历列表,迭代期间修改列表,并获得迭代器在列表中的当前位置
循环效率for>Iterator>foreach,因为foreach底层还是调用了for循环,在集合中调用的是Iterator。
本人才疏学浅,若有错,请指出,谢谢!
如果你有更好的建议,可以留言我们一起讨论,共同进步!
衷心的感谢您能耐心的读完本篇博文!