JAVA集合使用总结

转载请注明地址:http://blog.youkuaiyun.com/yincheng886337/article/details/50525174

常用的集合包主要包括Collection和Map两个接口,Collection主要用于多个单对象,Map用于存放Key-Value形式的键值对

现将其总结如下,便于查阅:

Collection:

非线程安全:

ArrayList、LinkedList、Stack、HashSet、TreeSet

线程安全:

Vector、CopyOnWriteSet、CopyOnWriteArrayList、ArrayBlockingQueue、LinkedLockingQueue


Map:

非线程安全:

HashMap、TreeMap(基于红黑树实现)

线程安全:

ConcurrentHashMap


原子操作类:

AtomicInteger、 ActomicLong、 AtomicBoolean、AtomicReference


使用场景:

ArrayList适用于要通过位置来读取元素的场景;

LinkedList适用于头尾操作及插入指定位置的场景;

Vector适用于线性安全的ArrayList场景;

Stack使用线性安全的LIFO场景,如需要支持FIFO,可使用ArrayBlockingQueue;

HashSet适用于对排序没有要求的非重复元素的存放;

TreeSet适用于要排序的非重复元素的存放;

HashMap适用于大部分key-value存取场景;

TreeMap适用于须排序存放的key-value场景;

线程安全集合类:

ConcurrentHashMap和HashMap在单线程场景,前者稍差于后者(ns级别),多线程时前者明显优于后者;

结论:

List的实现随着元素数量的上升,查找和删除元素时性能下降较严重、Set和Map基本不受影响。对查找和删除频繁,且元素较多时建议使用set和Map,多线程操作时强烈建议使用线程安全类集合,而非通过相应的锁机制来保证数据安全 

序列化与反序列化:

对于Java的网络通信而言,将对象转换为流然后进行网络传输是最基本和最常用的方法,而把对象转化成流以及将流转化成对象,最常用方法就是Java自带的序列化

序列化(对象转化成流)

//创建一个字节数组输出流
ByteArrayOutputStream output = new ByteArrayOutputStream();
//将字节数组输出流包装成ObjectOutputStream
ObjectOutputStream objectOut = new ObjectOutputStream(output);
//对对象写入ObjectOutputStream
objectOut.writeObject(object);
objectOut.close();
Output.close();
//返回字节数组输出流中的字节数组
Return output.toByteArray();


反序列化(流转化成对象)

//创建一个字节数组输入流
ByteArrayInputStream input= new ByteArrayInputStream();
//将字节数组输入流包装成ObjectInputStream
ObjectInputStream oin= new ObjectInputStream(input);
//对流写入object
Object object = oin.readObject();
oin.close();
input.close();



集合名称插入对象删除对象获取单个对象遍历对象线程安全
ArrayListadd(E)remove(E)get(int)iterator非线程安全
LinkedListadd(E)remove(E)
get(int)
iterator非线程安全
Vectoradd(E)
remove(E)
get(int)
iterator
线程安全
Stackpushpoppeek | popiterator线程安全
HashSetiteratorremove(E)
只能通过iterator来获取
iterator
非线程安全
TreeSetadd(E)remove(E)只能通过iterator来获取
iterator非线程安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值