list、set、map区别

本文详细介绍了Java集合类的主要类型,包括List、Set和Map的特点及应用场景。List保持元素顺序,适用于需要保留顺序的情况;Set用于去除重复元素,适用于只需判断元素是否存在的场景;Map通过键值对形式存储数据,适合快速查找。
摘要由CSDN通过智能技术生成

List 有序 key 和 value 都能重复 

Set 无序(除 treeSet) key 和 value 都不能重复 

Map 无序(除 treeMap) key 必须唯一 value 可以重复 

set --其中的值不允许重复,无序的数据结构 

list --其中的值允许重复,因为其为有序的数据结构

map--成对的数据结构, 健值必须具有唯一性 (键不能同, 否则值替换) 

List 按对象进入的顺序保存对象,不做排序或编辑操作。

Set 对每个对象只接受一次, 并使用自己内部的排序方法 (通常, 你只关心某个元素是否属于 Set,而不关心它的顺序--否则应 该使用 List)。

Map 同样对每个元素保存一份,但这是基于 "键"的, Map 也有内置的排序, 因而不关心元素添加的顺序。 如果添加元素的顺序对你很重要, 应该使用 LinkedHashSet 或者 LinkedHashMap. List 的功能方法

实际上有两种 List: 一种是基本的 ArrayList,其优点在于 随机访问元素,另一种是更强大的 LinkedList,它并不是为快 速随机访问设计的,而是具有一套更通用的方法。 List : 次序是 List 最重要的特点:它保证维护元素特定的顺 序。List 为 Collection 添加了许多方法,使得能够向 List 中 间插入与移除元素(这只推荐 LinkedList 使用。)一个 List 可以生成 ListIterator,使用它可以从两个方向遍历 List,也可 以从 List 中间插入和移除元素。 ArrayList : 由数组实现的 List。允许对元素进行快速随机访
问, 但是向 List 中间插入与移除元素的速度很慢。 ListIterator 只应该用来由后向前遍历 ArrayList,而不是用来插入和移除 元素。因为那比 LinkedList 开销要大很多。 LinkedList : 对顺序访问进行了优化,向 List 中间插入与删 除的开销并不大。随机访问则相对较慢。(使用 ArrayList 代替。)还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没 有在任何接口或基类中定义过)使得 LinkedList 可以当作堆 栈、队列和双向队列使用。 Set 的功能方法
Set 具有与 Collection 完全一样的接口,因此没有任何额 外的功能,不像前面有两个不同的 List。实际上 Set 就是 Collection,只是行为不同。(这是继承与多态思想的典型应 用:表现不同的行为。)Set 不保存重复的元素(至于如何 判断元素相同则较为负责) Set : 存入 Set 的每个元素都必须是唯一的,因为 Set 不保 存重复元素。加入 Set 的元素必须定义 equals()方法以确保 对象的唯一性。Set 与 Collection 有完全一样的接口。Set 接口不保证维护元素的次序。 HashSet : 为快速查找设计的 Set。存入 HashSet 的对象必 须定义 hashCode()。
TreeSet : 保存次序的 Set, 底层为树结构。使用它可以从 Set 中提取有序的序列。 LinkedHashSet : 具有 HashSet 的查询速度,且内部使用链 表维护元素的顺序(插入的次序)。于是在使用迭代器遍历 Set 时,结果会按元素插入的次序显示。 Map 的功能方法 方法 put(Object key, Object value)添加一个“值”(想要得 东西)和与“值”相关联的“键”(key)(使用它来查找)。方法 get(Object key)返回与给定“键”相关联的“值”。可以用 containsKey()和 containsValue()测试 Map 中是否包含某个 “键”或“值”。标准的 Java 类库中包含了几种不同的 Map: HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口 Map,但是行 为、效率、排序策略、保存对象的生命周期和判定“键”等价 的策略等各不相同。 执行效率是 Map 的一个大问题。看看 get()要做哪些事,就 会明白为什么在 ArrayList 中搜索“键”是相当慢的。而这正是 HashMap 提高速度的地方。HashMap 使用了特殊的值,称 为“散列码”(hash code),来取代对键的缓慢搜索。“散列码” 是“相对唯一”用以代表对象的 int 值, 它是通过将该对象的某 些信息进行转换而生成的。所有 Java 对象都能产生散列码, 因为 hashCode()是定义在基类 Object 中的方法。
HashMap 就是使用对象的 hashCode()进行快速查询的。此 方法能够显著提高性能。 Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”
HashMap : Map 基于散列表的实现。 插入和查询“键值对” 的开销是固定的。 可以通过构造器设置容量 capacity 和负载 因子 load factor,以调整容器的性能。 LinkedHashMap : 类似于 HashMap,但是迭代遍历它 时,取得“键值对”的顺序是其插入次序,或者是最近最少使 用(LRU)的次序。 只比 HashMap 慢一点。 而在迭代访问时发 而更快,因为它使用链表维护内部次序。 TreeMap : 基于红黑树数据结构的实现。 查看“键”或“键值 对”时,它们会被排序(次序由 Comparabel 或 Comparator 决定) TreeMap 的特点在于, 。 你得到的结果是经过排序的。 TreeMap 是唯一的带有 回一个子树。 WeakHashMao : 弱键(weak key)Map,Map 中使用的对 象也被允许释放: 这是为解决特殊问题设计的。如果没有 map 之外的引用指向某个“键”,则此“键”可以被垃圾收集器 回收。 IdentifyHashMap : 使用==代替 equals()对“键”作比较的 hash map。专为解决特殊问题而设计 subMap()方法的 Map,它可以返
<!--EndFragment-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值