
Java集合
_isPan
这个作者很懒,什么都没留下…
展开
-
ArrayList
一、ArrayList内部是由一个Object[] 数组实现private transient Object[] elementData;private int size;1、ArrayList里面元素的个数,这里要注意一下,size是按照调用add、remove方法的次数进行自增或者自减的,所以add了一个null进入ArrayList,size也会加1 2、ArrayList不是线程安全的,所...原创 2018-06-28 10:19:17 · 310 阅读 · 0 评论 -
HashMap
HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value。下面就来分析HashMap的存取。一、定义 HashMap实现了Map接口,继承Abstra...转载 2018-06-28 10:20:05 · 165 阅读 · 0 评论 -
ConcurrentHashMap
1. Concurrent相关历史JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器(bins)时,吞吐量严重降低。因此Java5.0开始针对多线程并发访问设计,提供了并发性能较好的并发容器,引入了Java.util.con...转载 2018-06-28 10:20:37 · 330 阅读 · 0 评论 -
Vector
它是ArrayList的线程安全版本,其实现90%和ArrayList都完全一样,区别在于:1、Vector是线程安全的,ArrayList是线程非安全的,代码示例: public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); ele...原创 2018-06-28 10:21:00 · 171 阅读 · 0 评论 -
LinkedList
LinkedList的本质是一个双向链表,这是结构 Node<E> node(int index) { // assert isElementIndex(index); if (index < (size >> 1)) { Node<E> x = first; for (int ...原创 2018-06-28 10:21:30 · 160 阅读 · 0 评论 -
Hashtable
1. 接口分析Hashtable继承于Dictionary抽象类(与Map接口非常类似,官方文档里已经将其标记为obsolete,并建议使用Map接口作为代替)Cloneable,java.io.Serializable接口 2. 实现原理与HashMap基本一致,用链表数组来存储键值对,使用链地址法处理冲突 3. 扩容newCapacity = (oldCapacity << 1) ...原创 2018-06-28 10:21:53 · 286 阅读 · 0 评论 -
HashSet
HashSet是基于HashMap来实现的,操作很简单,更像是对HashMap做了一次“封装” public HashSet() { map = new HashMap<>(); } public boolean add(E e) { return map.put(e, PRESENT)==null; } public boolea...原创 2018-06-28 10:22:10 · 154 阅读 · 0 评论 -
为什么ArrayList的遍历中for比Iterator快,而LinkedList中却是Iterator远快于for?
为什么ArrayList的遍历中for比Iterator快,而LinkedList中却是Iterator远快于for?这得从ArrayList和LinkedList两者的数据结构说起了: ArrayList是基于索引(index)的数组,索引在数组中搜索和读取数据的时间复杂度是O(1),但是要增加和删除数据却是开销很大的,因为这需要重排数组中的所有数据。 LinkedList的底层实现则是一个双向...原创 2018-06-28 10:22:40 · 2190 阅读 · 0 评论 -
Java集合总结
*面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。*数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。*集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。 集合框架图1、Collection (集合的最大接口)继承关系 ——List 可以...转载 2018-06-28 10:23:41 · 136 阅读 · 0 评论