JAVA容器

基本容器

map, set, list

Map特征

  • HashMap: 以键值对方式存储,以hash计算存储位置,无序 key与value 都允许为null
  • LinkedHashMap: 哈希表和链接列表实现,继承HashMap,与hashMap不同的是维护着一个运行于所有条目的双重链接列表,是按插入顺序排序
  • TreeMap: 基于红黑树的实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法

线程安全

  • Hashtable : 与HashTable原理一致,但是synchronized是针对整张Hash表的,即每次锁住整张表让线程独占来保证线程安全, 阻塞的,效率低,已被 concurrentHashMap 取代
  • concurrentHashMap: 使用了锁分离技术, 把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中,并使用了多个锁来控制对hash表的不同部分进行的修改, 非阻塞的

Set特征

  • set: 不允许重复值
  • HashSet: 由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
    初始化:
   public HashSet() {
        map = new HashMap<>();
    }

插入:

 public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
  • TreeSet: 基于 TreeMap 的 NavigableSet 实现
    初始化:
public TreeSet() {
        this(new TreeMap<E,Object>());
    }

插入

    public boolean add(E e) {
        return m.put(e, PRESENT)==null;
    }

List特征

  • ArrayList: 动态数组的数据结构,自动扩容,适合随机访问
    • 初始化大小为10
    • 扩容时会copy整个数组,开支大
elementData = Arrays.copyOf(elementData, newCapacity);
  • LinkedList: 基于链表的数据结构,适合删除插入操作
posted @ 2017-06-16 17:29  toroy  阅读(98)  评论(0)    收藏  举报