本人目前阶段的所有作品,都是针对在面试的时候需要回答的问题的有些个人见解,肯定有很多地方会有错,请看到的朋友帮忙指出,谢谢~
集合有Collection接口和Map接口两大接口
Collection
- List
- ArrayList
- LinkedList
- Vector(过时)
- Set
- HsahSet
- LinkedHashSet
- TreeSet
- HsahSet
Map
- HashMap
- List item
- TreeMap
- Hashtable(过时)
(1) ArrayList和LinkedList的区别
ArrayList底层实现是通过数组实现的,而LinkedList底层实现是通过双向链表实现的
区别:
- ArrayList 支持以角标位置进行索引出对应的元素,而LinkedList在进行查询的时候需要将整个链表遍历来获取相应的元素,所以在查询方面ArrayList会更快。
- ArrayList由于是数组实现的,在做删除和修改的时候,需要进行复制和移动数组,消耗会比较大,而LinkedList是双向链表实现的,只需要更改相应元素下的指针即可,消耗很小,所以一般来说LinkedList的增删速度要比ArrayList快。
(2) ArrayList和Vector的区别
二者都是通过数组来实现的,都可以按照位置索引号来获取相应的元素,存储的数据都是有序可重复的,也允许为null;
区别在于:
- ArrayList是非同步的,Vector是同步的,但是即便要使用同步时,我们也是通过Collections工具类来构建出同步的ArrayList,而不是用Vector。
- 在扩容时,ArrayList扩容1.5倍,且初始长度为10,而Vector扩容2倍。
(3) HsahMap和Hashtable的区别
二者都是实现Map接口,但是区别在于:
- HashMap是非同步的,而Hsahtable是同步的,但是当我们要使用同步的时候不使用Hashtable,而是使用ConcurentHashMap;
- Contains方法
Hsahtable中有该方法,HashMap中移除了该方法,使用ContainsKey和ContainsValue来代替; - HashMap中允许存在Null,而Hashtable不允许有Null;
- 继承的类不同
HashMap继承自AbstractMap<K,V>
Hashtable继承自Dictionary<K,V>
(4) HashMap和HashSet的区别
HashMap:
HashMap实现Map接口,用来存K-V键值对的,使用put方法存入,Map接口中的实现类TreeMap和HashMap都不允许存入重复的Key;
HashMap允许存入的Value为null;
HashMap是线程不安全的,要想变成安全的,需要调用Collections工具类中的静态方法synchronizeMap()来实现;
Map接口的TreeMap实现类中存储的对象可以按照一定的次序进行排列,而HashMap中对象的存储是无序的。
HashSet:
实现了Set接口,是用来存对象的,存入的对象不允许相同,通过重写HashCode和equals方法来比较对象的值是否相同,如果不重写以上方法,则在调用add()方法添加元素时,如果对象重复了,则返回false,没重复则返回true。
(5)TreeSet和HashSet的比较
HashSet存入的数据是无序的,而TreeSet是有序的,排序方式有两种,分别是自然排序和定制排序;
HashSet是不同步的,且可以存入null。