Java之集合

一、相关概念

1.集合框架

 

 

 接口:定义规范

   |

抽象类:实现一部分通用方法

   |

普通类:重写接口/抽象类的所有抽象方法。

Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 适合插入删除, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 适合随机访问, 线程不安全
│—————-└ Vector 接口实现类 数组, 适合线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为红黑树,元素排好序

Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 线程安全
├———HashMap 接口实现类 , 线程不安全-
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap

2.集合接口

   List:元素有序,可重复。类似动态数组。

    1)ArrayList:底层数据结构是数组,查询速度快,增删慢。

    2)LinkedList:底层数据结构是链表,增删速度快,查询慢。

    3)Vertor:底层数据结构是数组,线程安全。

   Set:元素无,不可重复。类似数学中的集合。

    1)HashSet:底层数据结构是哈希表,查询速度快。

    2)LinkedHashSet :底层数据结构是哈希表+链表,元素有序。

    3)TreeSet:底层数据结构是红黑树,元素有序,从小到大。

    Map:具有映射关系key-value键值对的集合。元素不可重复,但可以按照元素大小自动排序。

     1)HashMap:

  1.1 数组+链表+红黑树(JDK1.8)

  HashMap实现原理

  1.2 HashMap如何解决hash冲突:链地址法

  1.3 自动扩容 

    a) hashmap的容量都是2的倍数,比如2,4,8 ...

    b) 每次扩容都是扩一倍,2到4 ,4到8,8到16等等

    c) 扩容因子:默认是0.75,也可以指定一个小数

    d) 扩容时间点:当容器内的元素数量到达:容量*扩容因子 开始扩容

  1.4  HashMap中链表转为红黑树的条件

    条件:数组长度大于64且链表长度到大于8。

    当原有的红黑树内数量 < 6时,则将红黑树转换成链表。

  ConcurrentHashMap:线程安全,JDK1.8放弃了分段锁的方式,而是采用CAS原子操作+synchronized方式来保证线程的安全。

  

  2)TreeMap:底层数据结构是红黑树。

     3)HashTable:底层数据结构是通过"拉链法"实现的哈希表,线程安全。

3.集合遍历 Iterator

 

posted @ 2019-08-31 21:54  遇见神龙  阅读(120)  评论(0)    收藏  举报