JAVA集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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集合的主要内容,如果未能解决你的问题,请参考以下文章

java集合是啥?

Java集合源码剖析Java集合框架

Java集合

Java集合

Java集合一 集合框架

Java 集合类