04-java集合框架之List,Set,Map的区别

本文深入解析了List、Set、Map三种集合类型的异同,探讨了它们的存储方式、遍历方式及保证数据唯一性的机制。同时,对比了各种实现类的特点,如ArrayList、HashSet和HashMap,并分析了它们的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

List,Set,Map的区别

相同点

1.三者都属于集合类型
2.都可以存储和操作数目不固定的一组数据
3.实现类一般都支持自动扩容来保证数据的存储
4.都有自己的最大最小值设置
5.存储的内容都是对象的引用,而非对象本身.

不同点

1. List,Set的区别

1.1 继承方式以及遍历方式

List和Set都继承了Collection接口,Collection是最基本的集合接口,一个Collection代表一组Object,而Collection接口又是继承于Iterable接口,所以List和Set都支持迭代器.但是Map并没有继承与Iterable也可以使用过迭代器遍历,是因为Map及其子类虽然没有实现Interable、Iterator,但是,Map内部会生成Collection,从而间接实现Iterable接口和生成Iterator,所以,Map也可以使用迭代器。

1.2 Set和List的区别

Set接口实例存储的是无序的,不重复的数据,允许包含值为null的元素,但key最多只能有一个null元素。
List接口实例存储的是有序的,可以重复的元素。
Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。

1.3 Set是如何保证数据唯一性的

set保证里面元素的唯一性其实是靠两个方法,一是equals()和hashCode()方法,往set里面添加数据的时候一般会先是判断set集合中是否有与新添加数据的hashcode值一致的数据,如果有,那么将再进行第二步调用equals方法再进行一次判断,假如集合中没有与新添加数据hashcode值一致的数据,那么将不调用eqauls方法。

2. Set,List与Map的区别

下边有一个表格来表达一下:

接口主要特点实现方式详细特点
-Collection单列集合,数组List,Set见上面Set和List的区别
CollectionList有序,可重复ArrayList底层数据结构是数组,查询快,增删慢,线程不安全,效率高
CollectionList有序,可重复Vector底层数据结构是数组,查询快,增删慢,线程安全,效率低
CollectionList有序,可重复LinkedList底层数据结构是链表,查询慢,增删快,线程不安全,效率高
CollectionSet无序,key唯一,值可重复HashSet底层数据结构是哈希表,哈希表依赖两个方法:hashCode()和equals(),执行顺序:首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终:自动生成hashCode()和equals()即可
CollectionSet无序,key唯一,值可重复LinkedHashSet底层数据结构由链表和哈希表组成,由链表保证元素有序,由哈希表保证元素唯一
CollectionSet无序,key唯一,值可重复TreeSet底层数据结构是红黑树。(是一种自平衡的二叉树),根据比较的返回值是否是0来决定元素唯一性,排序方式有两种:1.自然排序(元素具备比较性),让元素所属的类实现Comparable接口;2.比较器排序(集合具备比较性),让集合接收一个Comparator的实现类对象
-Map双列集合,key-value键值对-Map集合的数据结构仅仅针对键有效,与值无关,存储的是键值对形式的元素,键唯一,值可重复.
-Map双列集合,key-value键值对HashMapjdk1.7时底层数据结构是哈希表,jdk1.8优化以后加入了红黑树,线程不安全,效率高,哈希表依赖两个方法:hashCode()和equals(),执行顺序:首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终:自动生成hashCode()和equals()即可
-Map双列集合,key-value键值对LinkedHashMap底层数据结构由链表和哈希表组成,由链表保证元素有序,由哈希表保证元素唯一
-Map双列集合,key-value键值对Hashtable底层数据结构是哈希表。线程安全,效率低,哈希表依赖两个方法:hashCode()和equals()执行顺序:首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终:自动生成hashCode()和equals()即可
-Map双列集合,key-value键值对TreeMap底层数据结构是红黑树。(是一种自平衡的二叉树),根据比较的返回值是否是0来决定元素唯一,有两种排序方式:1.自然排序(元素具备比较性),让元素所属的类实现Comparable接口;2.比较器排序(集合具备比较性),让集合接收一个Comparator的实现类对象

Set,List与Map的使用场景

如下图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值