浅谈java中的集合框架

Java 集合框架的核心接口是 java.util.Collection 和 java.util.Map,每种集合框架又是基于底层数据结构的不同,赋予不同的特性,所以只要弄懂了底层数据结构的特性,就能很好的掌握改集合的特性和运用。下面我们来浅谈不同的集合以及他们的特性

**

Collection 下接口List、Set 和 Queue

**
List 特性: 有序,可重复
实现类:
arraylist
array代表底层用的数组数据结构 按下标存储,所有是有序的,进去什么顺序,出来什么顺序。查询效率为O(1)
有序:例如

List<Integer> list = new ArrayList<>();
list.add(3);
list.add(2);
list.add(1);
System.out.println(list);
输出;[3, 2, 1]

linkedlist linked代表底层是链表 也是有序的,有序链表不连续特性,所有无法通过下标查询,查询效率有O(n)

Set 特性:集合特性为无序,不重复 (hash 和 tree 的数据结构特性都会导致其无序)
实现类:

HashSet hash 代表是hash表数据结构,以对象的hashcode取模为下标存储,因为对象hashcode不定,所有取模也不一定,导致无序
例如:

HashSet<Integer> integers = new HashSet<>();
integers.add(3);
integers.add(2);
integers.add(1);
System.out.println(integers);
输出 :[1, 2, 3]

TreeSet tree代表底层是二叉树( 红黑树 它提供了有序的集合) 可以排序 (正序或者倒叙,默认从小到大)所以也是无序的 存储1,3,2 取出来是1,2,3

TreeSet<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);

System.out.println(set); // 输出: [1, 2, 3]

Queue 特性:队列

实现类:
priorityqueue 优先队列,底层是堆(二叉树一种)(堆分为大顶堆和小顶堆(最大最小总是在第一个)),所以也是无序
deque 双端队列 是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出
常用方法:
新建一个双端队列:Deque deque = new LinkedList();
判断是否为空: deque.isEmpty()
增:deque.offerFirst(), deque.offerLast();//从头添加和尾部添加
删:deque.pollFirst(), deque.pollLast()//从头添加和尾部出队
查:deque.peekFirst(), deque.peekLast()//查看头添加和尾部元素

Map (k,v)键值对
实现类:
hashmap hash 代表是hash表数据结构,以对象的hashcode取模为下标存储在(数组,链表,红黑树),也是属于无序存储
hashtable(对hashmap 加锁)
treeMap tree代表底层是二叉树(二叉搜索树 红黑树 ) map代表映射(k,value) 所以key必然是可以排序的

问题:有了二叉搜索树,为什么还有二叉堆呢,例如treemap有了排序了,为什么还要priorityqueue呢
答:因为treemap排序我们想获得最大值,最小值总要二叉搜索下
如果二叉排序树是平衡的,则n个节点的二叉排序树的高度n其查找效率为logn,近似于折半查找。如果二叉排序树完全不平衡,则其深度可达到n,查找效率为O(n),退化为顺序查找 插入也是一样,要找到插入的地方,堆插入时间复杂度logn, 但是取最大最小的时间复杂为O(1)。

猜你喜欢

转载自blog.csdn.net/weixin_43866043/article/details/130945490