Javase集合小总结

Collection接口

Collection接口继承了一个父接口叫 Iterable ,从而继承了一个叫 Iterator() 方法,这个方法可以获取到迭代器对象  Iterater ,这个接口里有三个方法可以对元素进行迭代和删除。

Collection下分为两大类:

(一)List 集合

List集合存储元素特点:有序可重复,元素有下标。

有序指的是存进去和取出来的顺序是相同的。

(二)Set集合

Set集合存储元素特点:无序不可重复,元素没有下标。

无序指的是存进去和取出来的顺序不一定相同。

List 集合下分为三类(挑常用的)

(1)ArrayList集合

特点:

  • 底层采用了数组这样的数据结构
  • ArrayList是非线程安全的
  • 初始化容量是10
  • 底层是Object类型的的数组Object[]
  • 初始扩容是到原容量的1.5倍(源代码是采用位运算符:新容量=原容量+原容量>>1)
  • 预估给定一个初始化容量,减少数组的扩容,也是比较重要的优化策略
  • 元素在空间存储上,内存地址连续,便于检索

优点:

        检索效率高

缺点:

        随机增删元素效率较低(末尾增删元素不影响效率)

(2)LinkedList

特点:

  • 底层采用了双向链表数据结构
  • 链表上的元素在空间存储上,内存地址不连续

优点:

        随机增删元素效率高

缺点:

        检索效率低

(3)Vector

特点:

  • 底层采用了数组这种数据结构
  • Vector初始化容量是10
  • 扩容为原容量的2倍
  • Vector底层是线程安全的

因为底层都是采用了synchronized修饰的方法,所以线程安全,但是效率较低,使用较少。

Set集合下分为两类(挑常用的)

(1)HashSet

特点:

  • 底层是调用了HashMap集合,实际上元素是存储到HashMap的key部分
  • HashMap底层是哈希表数据结构
  • HashSet初始化容量是16
  • 建议自定义初始化容量的时候是2的倍数
  • 自动扩容是原容量的2倍

优点和缺点都是跟HashMap挂钩,所以在后面说。

(2)SortedSet下面的TreeSet

特点:

  • TreeSet底层是TreeMap,TreeMap底层是二叉树结构
  • 因为继承了SortedSet,所以也继承了其父的优点
  • 在SortedSet集合下的元素会自动排序

注意:自动排序前提是实现了comparable接口并重写compareTo方法或者自定义类实现comparator接口并重写compare方法。

Map集合

  1. Map集合和Collection接口没有关系
  2. Map集合里存的是key和value这种键值对
  3. Map里的key和Set里的元素存储特点相同

Map下分为三大类

(1)HashMap

  • 初始化容量16,扩容2倍(旧容量左移一位就是扩大2倍,可以看源代码)
  • 非线程安全
  • key和value可以为null
  • 默认加载因子是0.75(就是在数组里有0.75的填充时就会自动扩容,而且默认初始化容量最好是2的倍数)
  • 数组元素是一条单向链表

优点:

        底层有数组和单向链表,所以随机增删和检索效率都很高。

注意:在链表上的元素达到8以上的时候,单向链表会转成红黑树数据结构
           当红黑树上的节点元素小于6的时候,就会自动转为单向链表(为了提高效率)

(2)HashTable(少用,效率低,线程安全的)

  • 初始化容量11,扩容2倍+1
  • 线程安全
  • key和value都不能是null

在HashTable下有一个子类Properties

  • Properties继承HashTable所以也是线程安全的
  • Properties只能存储String类型的元素
  • Properties也叫属性类

(3)TreeMap

  • 底层是二叉树数据结构
  • 要会TreeMap的遍历方式

自用的小总结复习用,欢迎大佬指点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值