Java集合

Java集合

在这里插入图片描述

Java集合,主要由两大接口派生出来,Collection(存放单一元素)和Map(存放key-value)键值对。

一、Collection
在这里插入图片描述

在这里插入图片描述

二、List(有序,可重复)
在这里插入图片描述

List的实现方法主要有LinkedList和ArrayList两种。

这两个类的时间复杂度:
在这里插入图片描述

如何选择?
1、改查选择ArrayList;
2、增删在尾部的选择ArrayList;
3、其他情况下,时间复杂度一样,推荐ArrayList;

Vector:
Vector 和 ArrayList 一样,也是继承自 java.util.AbstractList,底层也是用数组来实现的。但是已经被弃用了,因为加了很多synchronized关键字。线程安全的条件下就会造成效率低。

ArrayList和Vector的区别主要是:
1、线程安全问题(前者前程不安全,后者线程安全);
2、扩容(前者扩容为原容量的1.5倍,后者为2倍)。

三、Queue & Deque
Queue 是一端进另一端出的线性数据结构;而 Deque 是两端都可以进出的。
在这里插入图片描述

①Queue(先进先出)
但PriorityQueue(heap)并不按照进去的时间顺序出来,而是按照规定的优先级出去。

两组api:
在这里插入图片描述

选择时:
1、用同组api前后统一;
2、如果需要抛出异常,使用抛出异常的那组。

②Deque
在这里插入图片描述

实现类:

  • LinkedList
  • ArrayDeque
  • PriorityQueue

实现普通队列,推荐使用ArrayDeque,因为效率高,而LinkedList还会有其他额外开销。

总结:

  • ArrayDeque 是一个可扩容的数组,LinkedList是链表结构;
  • ArrayDeque 里不可以存 null 值,但是 LinkedList 可以;
  • ArrayDeque 在操作头尾端的增删操作时更高效,但是 LinkedList 只有在当要移除中间某个元素且已经找到了这个元素后的移除才是 O(1) 的;
  • ArrayDeque 在内存使用方面更高效。

所以在不是必须要存null值时,推荐选择ArrayDeque(注意:ArrayDeque是Java 6之后才有的)。

③Stack
Stack继承Vector
实现stack定义,就用ArrayDeque吧。
Deque stack = new ArrayDeque<>();

四、Set(无序、不重复)
在这里插入图片描述

实现类:

  • HashSet:采用 Hashmap 的 key 来储存元素,主要特点是无序的,基本操作都是 O(1) 的时间复杂度,很快。
  • LinkedHashSet:这个是一个 HashSet + LinkedList 的结构,特点就是既拥有了 O(1) 的时间复杂度,又能够保留插入的顺序。
  • TreeSet:采用红黑树结构,特点是可以有序,可以用自然排序或者自定义比较器来排序;缺点就是查询速度没有 HashSet 快。

每个Set的底层实现其实就是对于的Map
数值放在 map 中的 key 上,value 上放了个 PRESENT,是一个静态的 Object,相当于 place holder,每个 key 都指向这个 object。

参考链接:https://mp.weixin.qq.com/s/bVOSat47L0Hskfx9akAN6Q

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值