浅谈List,Set,Map的认识和理解

集合的类型主要分为set、list、map3种, 以下为三者之间的关系以及常见的实现类
在这里插入图片描述

是否有序和重复问题

有序可重复
list
set××
map××(键不可重复,值可重复)

Set接口

​ set接口是Collection接口的一个子接口,是无序的,set中不包含重复的元素,也就是说set中不存在两个这样的元素a1.equals(a2)结果为true。又因为Set接口提供的数据结构是数学意义上的集合概念的抽象,因此他支持对象的添加和删除。

常用实现类

HashSet:HashSet这个类实现了Set集合,实际为一个HashMap的实例。对集合的迭代次序没有任何保证; 特别是,它不能保证订单会随着时间的推移保持不变。这个类允许null 元素。

TreeSet:在集中以升序对对象排序的集的实现,这意味着从一个TreeSet对象获得第一个迭代器将按照升序来提供对象,TreeSet类使用了一个TreeMap

LinkedHashSet:具有set集合不重复的特点,同时具有可预测的迭代顺序,也就是我们插入的顺序。并且linkedHashSet是一个非线程安全的集合。如果有多个线程同时访问当前linkedhashset集合容器,并且有一个线程对当前容器中的元素做了修改,那么必须要在外部实现同步保证数据的冥等性。

List接口

​ List最重要的特点就是:它保证维护元素特定的顺序,List为Collection添加了很多方法,使得能够向List中间插入与移除元素。一般有2种List,一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,他并不是为了快速随机访问而设计的,而是具有一套更通用的方法

常见实现类

ArrayList:由数组实现的List,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度较慢。

LinkedList::底层由双向链表实现,对顺序访问进行了优化,向List中间插入与删除的开销并不大,随机访问则相对较慢,(使用ArrayList代替)还有下列方法:addFirst(),addLast(),getFirst(),getLast(),removeFirst(),romoveLast().这些方法使得LinkedList可以当作堆栈,队列和双向队列使用。

set 和List的对比

Colllection是集合接口

    ---Set子接口:无序,不允许存在重复的元素

    ---List子接口:有序,可以存在重复元素

Set 和List的对比:

Set:检查元素效率低下,删除和插入的效率高,插入和删除不会引起元素的位置变化。

List:和数组类似,List可以动态增长,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化。

Set 和 List的具体子类:

Set

 ----HashSet:以哈希表的形式存放元素,插入删除速度很快

List:

 ----ArrayList :动态数组

 ----LinkedList:链表,队列,堆栈

Map接口

​ Map接口不是Collection接口的继承,而是从自己的用于维护键值对关联的接口层次结构入手,按定义,该接口描述了从不重复的键到值的映射。

常见实现类:

hashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值