JAVA集合操作注意事项

集合注意事项
一、Arraylist
1、Arraylist基于数组方式实现,无容量的限制,不够时size()*1.5+1;
2、Arraylist在执行插入元素时可能要扩容,在删除元素时并不会减少数组的容量(如希望相应的缩小数组容量,可以调用ArrayList的trimToSize()),在查找元素时要遍历数组,对于非null的元素采取equals的方式寻找;
3、ArrayList是非线程安全的。


二、LinkedList
1、LinkedList基于双向链表机制实现;
2、LinkedList在插入元素时,须创建一个新的Entry对象,并切换相应元素的前后元素的引用;在查找元素时,须遍历链表;在删除元素时,要遍历链表,找到要删除的元素,然后从链表上将此元素删除即可;
3、LinkedList是非线程安全的。


三、Vector
1、Vector基于数组方式实现,无容量的限制。(默认扩容为size()*2)
是基于Synchronzized实现的线程安全的ArrayList,但在插入元素时容易扩充的机制和ArrayList稍有不同,并可通过传入capacityIncrement来控制容量的扩充。


四、Stack
1、Stack基于Vector实现,支持LIFO。


五、HashSet
1、HashSet基于HashMap实现,无容量限制;
2、HashSet是Set接口的实现,Set和List最明显的区别在于Set不允许元素重复,而List允许,Set为了做到不允许元素重复,采用的是基于HashMap来实现,
3、HashSet是无序的,不支持get(int)获取指定位置的元素。
4、HashSet是非线程安全的。


六、TreeSet
1、TreeSet基于TreeMap实现,支持排序;
2、TreeSet是非线程安全的。


七、HashMap
0、HashMap是基于数组和链表来实现对数据的存储。基于哈希表实现。
1、将loadFactor设为默认的0.75,threshold设置为12,并创建一个大小为16的Entry对象数组。
2、HashMap采用数组方式存储key、value构成的Entry对象,无容量限制。
3、HashMap基于key hash寻找Entry对象存放到数组的位置,对于hash冲突采用链表的方式来解决;
4、HashMap在插入元素时可能会要扩大数组的容量,(当Entry数组中已用的大小>=threshold,则将Entry数组扩大为当前大小 的两倍,)在扩大容量时须要重新计算hash,并复制对象到新的数组中;
5、HashMap是非线程安全的。


八、TreeMap
1、TreeMap基于红黑树实现,无容量限制;(TreeMap是一个典型的基于红黑树的实现,因此它要求一定要有key比较的方法,要么传入Comparator实现,要么key对象实现Comparable接口)。
2、TreeMap是非线程安全的。




两种常规Map性能 
HashMap:适用于在Map中插入、删除和定位元素。 
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。 




小结:
在实际的使用中首先根据功能需求来选择是用List、Set还是Map,List适合于允许重复元素的单个对象集合场景,Set适用于不允许重复的单个对象集合场景,Map则适用于key-value结构的集合场景。


在选择好List、Set和Map后,就要选择相应的实现类了,
ArrayList适用于要通过位置来读取元素的场景;
LinkedList适用于要头尾操作及插入指定位置的场景 ;
Vector适用于要线程安全的ArrayList场景;
Stack适用线程安全的 LIFO场景,如需支持FIFO,(例如:ArrayBlockingQueue);
HashSet适用于对排序没有要求的非重复元素的存放;
TreeSet适用于要排序的非重复元素的存放;
HashMap适用于大部分key-value的存取场景;
TreeMap适用于须排序存放的key-value场景,
根据相应的场景选择以上的类,或其他的一些的类,例如:Hashtable,LinkedHashSet等。


最后要根据场景中需要的存储的数量、操作(例如增加元素、删除元素)、并发量来进行相应的性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值