集合的相关知识

线程安全的集合有:Vector、HashTable、Collections、ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentSkipListMap等。

Java集合主要分为Collection和Map两个接口;Collection又分别被List和Set继承;
List接口被ArrayList,LinkList和VectorList实现;
Set接口被HashSet和TreeSet实现;
Map接口被HashMap和TreeMap,hashtable;

list是有下标,可重复,有顺序
set不可重复,无下标,不可重复指equals和hashcode是不同。equals未重写前不同对象是不相同的。
map也不可以重复,无下标

Arraylist 底层使用的是Object数组,适合数据检索;LinkedList 底层使用的是双向循环链表数据结构,适合数据增删;
迭代方式:for循环,高效for循环,Iterator 迭代器,ListIterator迭代(hasNext():是否有下一个元素,next():当前迭代元素)
Vector类的所有方法都是同步的。可以由两个线程安全地访问一个Vector对象、但是一个线程访问Vector的话代码要在同步操作上耗费大量的时间。

 HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过 synchronized 修饰。
(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);
 HashMap 中,null 可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为 null。HashMap是基于哈希表实现的。
HashMap 默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。
迭代方式:map.keySet,map.entrySet转换为set集合,然后用set.Iterator(hasNext():是否有下一个元素,next():当前迭代元素)
 HashMap 存储根据Hash算法解决哈希冲突,无数据则直接添加,有则以链表形式存储,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间,小于6则变会链表。
TreeMap: 红黑树(自平衡的排序二叉树),可以根据key排序,也可以自定义排序。
LinkedHashMap使用双向链表来维护顺序,使迭代顺序与插入顺序一致。

HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树。),确保集合元素处于排序状态(升序)。支持自定义排序,但是对象必须实现Comparable接口
set迭代:set.Iterator(hasNext():是否有下一个元素,next():当前迭代元素)

集合转为线程安全(带synchronized)的:Map m=synchronizedMap(hashMap);





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值