java8 集合学习


1.  Collection接口下的类图


接口:

1.       Iterabel     mplementing this interface allows an object to be the targetof the "for-each loop" statement

2.      Collection 定义了一些通用的集合方法,也实现了一些jdk8才有的东西Stream ,Spliterator

3.      List   List接口 实现了spliterator方法以及定义了满足Lis属性的方法

4.      Queue 有确定进出规则属性的列表

5.      Set 不能是重复数据的集合接口

6.      Deque 继承Queue接口的定义并增加自己的方法定义 的 双端队列

 类:

1.      AbstractCollection  实现了Collection接口里的基本方法

2.      AbstractList       实现了List接口里基本的方法

3.      AbstractSequentialList 顺序的AbstractList的抽象类

4.      Vertor  线程安全的实现List接口的类

   1.      底层使用数组实现,若使用不带参数的构造方法,则生成长度为10Object类型数组, 若个数超过10,则生成一个新数组,如果capacityIncrement>0,就加capacityIncrement,如果不是就增加一倍,原数组的内容复制到新数组中

   2.线程安全 很多方法都是synchronized 修饰的

5.      ArrayDeque 实现双端队列接口的可变大小数组

   1. 底层使用数组实现,若使用不带参数的构造方法,则生成长度为16Object类型数组, 若个数超过16,则生成一个个数是原来一倍新数组,原数组的内容复制到新数组中

   2. 非线程安全

   3. 禁止填入为null的元素

6.      AbstractQueue 实现Queue接口的基础抽象类

7.      AbstractSet  实现Set接口的基础抽象类

8.      PriorityQueue 优先队列,有自己排序方案的队列

    1. 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)

    2.不允许放入null元素

    3. 使用数组实现,内部算法是完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值)

    4. 元素之前的关系leftNo = parentNo*2+1; rightNo = parentNo*2+2; parentNo =(nodeNo-1)/2;

    5. peek()和element 常数复杂度  add(), offer(),无参的remove()和poll的时间复杂度为log(N)

    6. 默认元素是11个,queue 的长度小于 64 时,它每次扩容都是比原来大一倍且再多扩充两个存储单位;而当queue 的长度大于等于64 之后,它每次扩容都是比原来多扩50%的空间

9.      EnumSet  继承AbstractSet且元素都是枚举类型

    1. 内部元素为枚举

    2. 内部表示为位向量,使用“位标志”的替换形式。(类似0x1000000,按bit存储,用位运算进行相关操作)

    3. 全部是静态方法static

    4. 根据传入的枚举类型判断组成长度,小于等于64则返回RegularEnumSet,否则JumboEnumSet

10.  HashSet 内部是HashMap的Set集合

11.  TreeSet  内部是NavigableMap的Set集合

12.  LinkedList 双端List即实现了List接口又实现了Deque接口

    1.  底层是Node对象构成的双向链表实现,因此没有固定容量,不需要扩容

  1. 元素时有序的,输出顺序与输入顺序一致
  2. 允许元素为 null, 不是同步容器
  3. 所有指定位置的操作都是从头开始遍历进行的

     5. 需要更多的内存,LinkedList 每个节点中需要多存储前后节点的信息,占用空间更多些

     6. 查找效率低,插入删除效率高

13.  ArrayList 允许为空的可变数组.

     1. 底层采用数组实现,若使用不带参数的构造方法,则生成长度为10Object类型数组, 若个数超过10,则生成一个新数组,长度为原数组的1.5+1,原数组的内容复制到新数组中

     2.  删除时,后续前移,代价高,获取指定位置元素的时间复杂度为O(1)

     3.  加入元素是加入到数组的最后位置,加到固定位置和加入新集合是直接使用数组复制功能

14.  Stack 后进先出的栈

     1. 继承自Vector类,拥有Vector的所有特性

     2. 且还有自己实现的后进先出的方法

15.  LinkedHashSet Hash table andlinked list implementation of the Set interface且有序






2. Map下的类图


接口:

  1.  Map   K,V  样式的数据集合K是Set<K>
  2. ConcurrentMap  线程安全的Map接口
  3. SortedMap  对Key进行排序的Map接口
  4. NavigableMap  对有序的key进行大于 小于的判断操作的Map接口
  5. ConcurrentNavigableMap  线程安全的NavigableMap接口

类:

     1. AbstractMap   Map接口基本方法的实现

     2. Hashtable   线程安全的Map实现 大部分函数被synchronized修饰

             1.  底层实现是一个Entry数组+链表且key和val都不能为null

             2.  Hashtable中数组默认大小11,扩容方式是old*2+1

     3. ConcurrentHashMap  线程安全但非Hashtable实现方式的Map实现

             1. 它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法。它沿用了与它同时期的HashMap版本的思想,底层依然由“数组”+链表+红黑树的方式思想,但是为了做到并发,又增加了很多辅助的类,例如TreeBin,Traverser等对象内部类

     4. IdentityHashMap 别样的识别Key的Map实现接口

                 1. HashMap是key的值相同那就是同一个key不管key的引用的,IdentityHashMap是要看引用的,引用都相同那才是一个key

                  2.数据是存放在transient Object[] table中的

                  3.Hash函数会一直是偶数,用来存key,所有的value都放在奇数位置上

     5. TreeMap   以红黑树为底层的NavigableMap接口的实现

                  1.按照键的自然顺序排序或者自己定义的Comparator进行排序

     6. EnumMap   Key是枚举类型的Map接口

     7. ConcurrentSkipListMap 线程安全的Map接口

     8. WeakHashMap  weak keys的以Hashtable为基础实现的Map类

     9. LinkedHashMap Hashtable和LinkList实现的Map类

   10. HashMap  基础的Map实现类,非线程安全

                    1.底层结构为数组+链表+红黑树

                    2.初始数据个数为16,超过后数据量*2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lswsmj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值