JavaSE_集合

1.集合框架(继承关系)

1.1 Collection接口

  • Collection接口:下面有两大分支,List和Set。
  • List存储的数据,有顺序,允许重复;
  • Set存储的数据,没有顺序,不允许重复。

1.1.1 List接口


1.1.1.1实现类ArrayList集合类
  • 存储方式:
    1、底层数据结构基于"Object 数组"
    transient Object[ ] elementData;
  • 扩容机制:
    1、初始化长度为10;
    按照无参构造方法创建集合,底层数组默认长度为0,第一次添加元素时,默认增长至10。
    按照有参构造方法创建集合,底层数组按照指定长度创建。

    2、最大容量为:Integer.MAX_VALUE 或 Integer.MAX_VALUE - 8
    3、grow() 方法:按原有容量的1.5倍进行扩容
  • 应用特点:
    1、实现RandomAccess接口:支持高效的随机元素访问(可以使用下标高速访问)
    2、插入删除元素效率低
    3、线程不安全
    4、性能高

1.1.1.2实现类Vector集合类
  • 存储方式:
    1、底层数据结构基于"Object 数组"
    protected Object[] elementData;
  • 扩容机制:
    1、初始化长度为10
    2、最大容量为:Integer.MAX_VALUE 或 Integer.MAX_VALUE - 8
    3、grow() 方法:按原有容量的2倍进行扩容
  • 应用特点:
    1、实现RandomAccess接口:支持高效的随机元素访问
    2、插入删除元素效率低
    3、方法中使用synchronized,保证线程安全
    4、性能差

1.1.1.3实现类LinkedList集合类
  • 存储方式:
    1、底层数据结构基于"双向链表"
    JDK1.6之前为循环链表
    JDK1.7取消了循环
  • 扩容机制:
    双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好
  • 应用特点:
    1、不支持高效的随机元素访问(未实现RandomAccess接口)
    2、插入元素效率高
    3、线程不安全

1.1.2 Set接口


1.1.2.1 HashSet集合类
  • 存储方式:底层数据结构基于"HashMap"
    private transient HashMap<E,Object> map;
  • 应用特点:
    1、线程不安全。
    2、存取速度快。

1.1.2.2 LinkedHashSet集合类
  • 存储方式:底层数据结构基于“LinkedHashMap"
    super(16, .75f, true);
    map = new LinkedHashMap<>(initialCapacity, loadFactor);
  • 应用特点:
    1、线程不安全。
    2、存取速度快。
    3、链表维持存入顺序。

1.1.2.3 SortedSet接口——>TreeSet集合类
  • 存储方式:底层数据结构基于"TreeMap"
    public TreeSet() {
    this(new TreeMap<E,Object>());
    }
  • 应用特点:
    1、线程不安全。
    2、存取速度快。
    3、自动排序。(必须实现Comparable接口)

1.1.3 其他常用接口与类(Queue接口和Stack类)


1.1.3.1 Queue接口
  • 存储方式:Queue接口直接实现Collection接口
  • 应用特点:
    1、维护了一个普通队列
    2、只许从一端进,另一端出。
1.1.3.2 Deque接口
  • 存储方式:Deque接口实现Queue接口
  • 应用特点:
    1、维护了一个双端队列
    2、允许执行两端进或者两端出操作。

Queue接口(队列)的子类为Deque接口(双端队列)LinkedList既实现了List接口又实现了Deque接口所以它既可以当做链表的实现类又可以当做队列的实现类。


1.1.3.3 Stack类
  • 存储方式:Stack类继承Vector类;
  • 应用特点:
    1、维护了一个栈
    2、只允许从一个端口进栈和出栈。

因为Stack类实现了Vector类所以它的存储方式,扩容机制,应用特点和Vector一致。


1.2 Map接口

  • KV(key - value)键值对集合

1.2.1 HashMap类

  • 存储方式:
    1、基于哈希表(Hash Table)设计:
    JDK1.7 : 底层数据结构基于“数组”+“链表”
    JDK1.8 : 底层数据结构基于“数组”+“链表”+“红黑树”(当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间)

    2、transient Node<K,V>[ ] table;
  • 扩容机制:
    1、初始容量为16
    2、加载因子为0.75:当 元素个数 超过 容量长度的0.75倍 时,进行扩容
    3、按原有容量的2倍进行扩容
  • 应用特点:
    1、线程不安全
    2、性能高
    3、允许Null key和Null value,Null Key只允许有1个,Null value 可以有多个

1.2.2 LinkedHashMap类

  • 存储方式:
    1、继承自HashMap,链表采用“双向链表”
    2、 Entry<K,V> before, after;
  • 应用特点:
    1、线程不安全
    2、有序

1.2.3 SortedMap接口——>TreeMap类

  • 存储方式:
    1、底层数据结构基于“红黑树”
    2、private transient Entry<K,V> root;
  • 应用特点:
    1、线程不安全
    2、自动排序(必须实现Comparable接口)

1.2.4 Hashtable类

  • 存储方式:底层数据结构基于“数组”+“链表”
  • 扩容机制:
    1、默认为11
    2、每次扩容后,容量变为原来的2n+1
  • 应用特点:
    1、线程安全
    2、性能差
    3、不允许有Null value,会导致NullPointerException

2.集合应用(具体应用)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值