栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java容器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java容器

Java集合概述

Java集合,也叫容器,主要是由两个接口派生来的,

一个Collection接口,主要存放单一元素。他有三个子接口

ListSetQueue 一个Map接口,主要存放键值对 说说List、Set、Queue、Map的区别

List(对付顺序):存储的元素有序、可重复
Set(实现独一无二):存储的元素无序、不可重复
Queue(排队):有序、可重复
Map(key搜索):使用键值对(key-value)存储,key无序、不可重复。value无序、可重复,每个建最多映射一个值

集合框架底层数据结构总结

List

ArrayList:Object[ ] 数组Vector: Object[] 数组linkList:双向链表,jdk1.6之前是循环链表

Set:

HashSet(无序、唯一):基于HashMap实现,底层采用HashMap来保存元素linkedHashSet:linkedHashSet是HashSet的子类,内部是通过linkedHashMap来实现TreeSet(有序、唯一):红黑树(自平衡的排序二叉树) 为什么要使用集合

当我们需要保存一组类型相同的数据的时候,我们应该用数组保存,但是数组存储对象具有一定的弊端,因为平时开发的时候,存储数据的类型是多种的,于是就出现了集合,集合同样是用来存储多个数据的。
数组的缺点是一旦声明之后,长度就不可变了,同时声明数组的数据类型也就决定了这个数组的存储数据的类型。数组存储的数据是有序的,可重复的,特点单一。但是集合提高了数据存储的灵活性,Java集合不仅可以存储不同类型不同数量的对象,还可以保存具有映射关系的数据。

ArrayList和Vector的区别

ArrayList是List的主要实现类,底层使用Object[] 存储,适用于频繁1查找工作,线程不安全
Vector是List的古老实现类,底层采用Object[] 存储,线程安全

ArrayList和linkedList的区别

是否线程安全:都是不同步的,不保证线程安全底层数据结构:ArrayList是Object数组;ListedList是双向链表插入和删除是否手元素位置的影响:

ArrayList采用数组存储,所以时间复杂度受到元素位置的影响。
-linkedList采用链表存储,在头部和尾部插入删除不受元素的影响,但是如果要在指定位置的话,时间复杂度O(n),因为需要先移动到指定的位置再插入。 是否支持快速随机访问:(通过元素的需要快速获取元素对象)

ListedList不支持高效的随机元素访问ArrayList支持 内存空间的占用:ArrayList的空间浪费主要体现在List列表会预留一定的容量空间;linkedList的空间浪费是体现在他的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据) Collection子借口Set comparable 和Comparator的区别

comparable接口实际上是出资java.lang包 他有一个compareTo(Object obj)方法来排序comparator接口实际上是出自java.util包,他有一个compare(Object obj1,Object obj2)方法用来排序
一般我们需要对一个集合使用自定义排序时,我们就要重写compareTo()方法 比较HashSet、linkedHashSet、TreeSet三者的异同

三者都是Set接口的实现类,都能保证元素唯一,并且都不是线程安全。主要区别是底层数据结构不同。

HashSet的底层数据结构是哈希表(基于HashMap实现)linkedHashSet的底层数据结构是链表和哈希表,元素的插入和取出顺序满足FIFOTreeSet底层数据结构是红黑树,元素有序,排序的方式有自然排序和定制排序 应用场景不同:

HashSet:不需要保证元素插入和取出顺序linkedHashSet:保证元素的插入和取出满足FIFOTreeSet:支持对元素自定义排序规则 COllection子接口Queue Queue与Deque的区别

Queue是单端队列,只能从一段插入元素,一段删除元素,先进先出
Deque是双端队列,队列的两端均可以插入和删除元素

ArrayDeque和linkedList的区别

都实现了Deque的接口,两者都有队列的功能

ArrayDeque是基于可变长的数组和双指针来实现,linkedList通过链表来实现ArrayDeque不支持存储Null数据,linkedList支持ArrayDeque插入可能存在扩容过程,不过均摊后插入操作依然为O(1)。linkedList不需要扩容,但是每次插入数据都需要申请新的堆空间,均摊性能相比更慢
性能角度考虑,ArrayDeque来实现队列比linkedList更好 PriorityQueue

元素出队的顺序是与优先级有关的,优先级高的优先出队

利用二叉堆的数据结构实现,底层使用可变长的数组来存储数据通过堆元素的上浮和下沉,实现O(logn)的时间复杂度插入元素和删除堆顶元素非线程安全,不支持粗糙你Null和non-comparable对象默认小顶堆,但可以接受Comparator作为构造函数,自定义元素优先级的先后。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749648.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号