java集合
来源:互联网 发布:微代言 源码 编辑:程序博客网 时间:2024/05/21 03:18
Collection
List
- ArrayList
以Object数组形式存储数据,默认容量10;以size*3/2+1作为扩容容量;remove时,先校验index范围,再将index+1后的数据通过System.arraycopy往前位移,最后将末尾元素置空;访问快,但插入删除慢;循环方式有for/foreach,迭代器;非线程安全 - Vector
以Object数组形式存储数据,默认容量10;是ArrayList的synchronized实现 - LinkedList
是双向循环链表的链式线性表;查找时,如果index小于size >> 1,则从头节点开始找,否则从尾节点找;查找较慢,插入删除较快;非线程安全 - CopyOnWriteArrayList
写时复制的List,是一种读写分离的思想,用于读多写少的并发场景,如商品黑白名单;add操作会加锁,先复制容器,再添加元素,最后修改引用至新容器;get时不加锁;缺点:1、内存占用;2、数据一致性
Set
- HashSet
使用HashMap的key存放元素,所以无法重复
Map
- HashMap
以Entry数组形式存储数据,默认容量16,负载因子0.75;每个Entry中,都可以保存相同hash位置的下一个Entry节点,即HashMap可以保存hash冲突的元素,以Entry链表保存;允许key值为null的元素;put时,根据key的haseCode()进行hash运算,再获取存储索引的位置;如果数组大小不小于临界值(容量*负载因子),则扩容为现在大小的2倍;get时,如果Entry节点的hash相同&&key的值相同,则返回此节点。 - Hashtable
以Entry数组形式存储数据,默认容量11,负载因子0.75;是HashMap的synchronized实现。 - ConcurrentHashMap
采用锁分段技术,每个ConcurrentHashMap包含一个Segment数组,每个Segment包含一个HashEntry数组。get时不加锁,除非读到空值才会对某个Segment加锁重读,get时读取的共享变量如count、value都是volatile变量。put时先定位到Segment,并对其加锁,还需判断是否需扩容,再插入。迭代器、get、clear是弱一致性的,详见(http://ifeve.com/concurrenthashmap-weakly-consistent/) - WeakHashMap
同HashMap类似,只是Entry被定义为WeakReference;成员变量ReferenceQueue保存的是被GC回收的键;在get和size/resize,会调用expungeStaleEntries(),从ReferenceQueue中查询并清理持有弱引用的key对象。 - Queue
先进先出(FIFO)规则,从尾部添加,从头部取出;操作:add、remove和element在队列满或空时会抛异常,offer、poll、peek在队列满或空时会返回null或false,put和take在队列满或空时会阻塞;
阅读全文
0 0
- Java集合:集合框架
- java集合---set集合
- JAVA 集合 的 集合
- 【集合】Java集合对比
- JAVA集合-Map集合
- JAVA集合-Set集合
- JAVA集合-List集合
- java集合------Map集合
- Java集合----List集合
- Java集合----Set集合
- Java集合----Map集合
- JAVA集合
- JAVA集合
- Java集合
- JAVA集合
- Java集合
- Java集合
- java 集合
- 学生成绩(顺序表)
- 文件权限
- 2.1.8同步不能被继承(子类方法要加同步关键字)
- 【LintCode】判断数独合法
- 学习数据链路层和网络层
- java集合
- centos6.5安装expect包步骤
- 腾讯初试(技术面)
- 2.2.1同步方法与同步代码块
- 如何长时间高效学习?
- java io框架
- HTTP 错误 500.21
- Windows下编译同时支持三种位深的x265可执行文件方法,附编译好的结果下载
- 测试之道--网络爬虫系列3(urllib库介绍)