首页 > 代码库 > JAVA集合
JAVA集合
Vector和ArrayList:
1.Vector是线程同步的,所以是线程安全的,但是效率稍低, 从源码的角度来看,因为Vector的方法前加了synchronized 关键字
ArrayList是线程异步的,不安全,但是效率稍高。
解释下为什么异步就不安全,假如两个线程A,B同时操作一个arrayList,如果A线程先将元素放到集合的第0位置,此时CPU调度线程A暂停,size还没来得及增加,线程B就将另外的元素也放到第0位置,此时A和B线程继续执行,size变为2,但只有第0位置有元素。
因此如果考虑到线程安全问题,需要用Vector。
2.如果集合中的元素个数超出目前集合数组的长度,Vector的增长率是目前长度的100%,ArrayList是50%
3.分三种情况:
①:查找指定位置的元素,vector和arrayList使用的时间是相同的。
②:频繁的访问数据,这个时候使用vector和arrayList都可以。
③:频繁的插入和删除数据,考虑用linkedList提高性能。
ArrayList和Linkedlist
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList需要移动指针。
3.若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
HashMap和TreeMap
1.TreeMap中的元素保持着某种固定的顺序,HashMap中的元素的顺序是不固定的。
2.在Map中插入,删除和定位某个元素,选择使用HashMap,但如果需要按照自定义顺序或者自定义顺序遍历键,那么选择使用TreeMap
用HashMap要求添加的键类明确定义了hashCode()和 equals()的实现。
两个map中的元素一样,但顺序不一样,导致hashCode()不一样。
同样做测试:
在HashMap中,同样的值的map,顺序不同,equals时,false;
而在treeMap中,同样的值的map,顺序不同,equals时,true,说明,treeMap在equals()时是整理了顺序了的。
HashTable与HashMap
1、同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。
2、HashMap允许存在一个为null的key,多个为null的value 。
3、hashtable的key和value都不允许为null。
JAVA集合