在Java中集合数据结构有:List /Set/Map
实现List接口的子类有:ArrayList/LinkedList/Vector
实现Set接口的子类有:HashSet/TreeSet
实现Map接口的子类有:HashMap/TreeMap
Vector 和Array List 的区别:
1、Vector使线程同步的,所以它也是线程安全的,而array list 是线程异步的,是不安全的,如果不考虑线程安全的因素,一般用arraylist效率要高一些;
2、如果集合中的元素数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而Array List 增长率为目前数组的50%,如果在集合使用数量比较大的数据用vector有一定的优势;
3、如果查找一个指定位置的数据,vector和arraylist使用的时间是相同的,如果频繁的访问数据,这个时候使用vector和arraylist都可以,而如果移动一个指定位置会导致后面的元素都发生移动,这个时候应该考虑道使用linkList ,因为它移动一个指定位置的数据时其他的元素位置不动;
arrayList 和linkedList的区别:
1、arrayList是实现了基于动态数组的数据结构,Linked List 基于链表的数据结构;
2、对于随机访问get和set,arraylist觉得要优于linklist,因为linklist要移动指针。
3、对于新增和删除操作add和remove,Linked List 比较占优势,因为Array List 要移动数据,这一点看来实际的情况;
Hash Map和TreeMap 的区别:
1、hashMap通过hashcode 对其内容进行快速的查找,而TreeMap中所有的元素都保持这某种固定的顺序,如果你需要得到一个有序的结构你就要使用TreeMap(hashmap 中元素的排列顺序是不固定的)
2、在map中插入删除和定位元素,hashmap是最好的选择,但如果您要是按自然顺序或者自定义顺序遍历键,那么TreeMap会更好,使用hashMap一起添加的键类明确定义了hashcode()和equals()的实现
HashTable 和hashmap的区别:
1、同步性:hashtable 是线程安全的,也就是说是同步的,而hanshmap是线程不安全的,不是同步的
2、hashMap允许存在一个为null的key多个为null的value
3、hashtable的key和value都不允许为null