「本文已参与「新人创作礼」活动,一起开启掘金创作之路。」
1. List
1.1 ArrayList
内部是数组实现,允许对元素快速随机访问,插入或者删除元素 需要进行复制和移动 代价高 适合查找和遍历,不适合插入和删除
1.2 Vector
同ArrayList 但是多了一个 可以支持线程的同步, 也就是在某一个时刻只有一个线程能够写 避免多线程同时写 引起的不一致 访问速度比ArrayList慢
1.3 LinkedList
内部是链表实现,适合插入和删除,对于随机访问和遍历较慢 还可以专用来操作标有和表尾,当作队列使用
2.Set
用于存储无序元素.值不能重复
PS:对象相等的本质是 hashCode值来出发进行判断 也就是 根据对象的内存地址计算出的序号 如果想要让两个不同的对象视为相等的,就必须覆盖 Object 的 hashCode 方法和 equals 方法。
2.1 hashSet (Hash表)
按照哈希值来存的所以取数据也是按照哈希值取得
2.2 TreeSet (二叉树)
是使用二叉树的原理对新 add()的对象按照指定的顺序排序(升序、降序),每增 加一个对象都会进行排序,将对象插入的二叉树指定的位置。
2.3 LinkedHashSet
使用 linkedHashSet 保存元素 相关操作上 继承 hashset
3. Map
3.1 HashMap
根据键的hashCode来存储数据,大多数情况下可以直接定位到他的值 每次出来的数据都是随机的,不是按照固定顺序输出 最多允许一个key为null 允许多条记录的值为null 非线程安全 也就是任一时刻多个线程写hashMap的时候 会导致数据不一致
3.2 ConcurrentHashMap
是一个segment的数组 通过ReentrantLock进行加锁 操作需要加锁的操作 锁住的是一个segment 这样就可以保证每个segment是线程安全的,从而实现 全局的 线程安全
3.3 HashTable
线程安全,常用功能与 HashMap 类似,并发性不如 ConcurrentHashMap
3.4 TreeMap
把保存的记录 根据 键 进行排序(默认) 也可以指定排序
3.5 LinkedHashMap
Hashmap的子类 保存记录的插入顺序,遍历出来的第一个是先插入的