list是有序且允许重复的集合,适用于需要索引访问和顺序存储的场景;set是无序且不允许重复的集合,适用于确保元素唯一性的场景;map是键值对集合,适用于通过唯一键快速查找值的场景。list常用实现有arraylist(随机访问快)和linkedlist(插入删除快);set常用实现有hashset(快速存取)、linkedhashset(保持插入顺序)和treeset(有序);map常用实现有hashmap(高性能)、linkedhashmap(保持插入顺序)和treemap(按键排序)。使用时需注意list的concurrentmodificationexception、set和map需正确重写hashcode与equals方法、map键的不可变性等陷阱。高级应用包括stream api、不可变集合、集合操作、lru缓存、多值map等,能提升代码效率与可读性。

List、Set和Map是编程中非常基础且核心的数据结构,它们各自承担着不同的数据组织和存储任务。简单来说,List是有序的、允许重复元素的集合,你可以通过索引访问其中的元素;Set是无序的、不允许重复元素的集合,它更关注元素的唯一性;而Map则是一种键值对(key-value pair)的集合,每个键都是唯一的,通过键可以快速找到对应的值。理解它们之间的差异,并根据实际需求做出正确的选择,是编写高效、健壮代码的关键一步。

在我看来,掌握List、Set、Map的使用,其实就是掌握了数据组织的基本哲学。它们各有千秋,没有绝对的优劣,只有适不适合。
List(列表)

List最直观的特点就是“有序”和“可重复”。想象一下你写购物清单,每件商品都有它的位置(第一个、第二个),而且你可以买两包薯片。在编程里,这意味着你可以通过索引(比如0、1、2…)来准确获取或修改某个位置的元素。常见的实现有
ArrayList
LinkedList
ArrayList
LinkedList
Set(集合)

Set的精髓在于“唯一性”和“无序性”(通常情况下)。它就像一个会员俱乐部,每个人都必须是独一无二的,不能有重复的会员。你把一堆东西扔进去,它会自动帮你去重。常见的实现有
HashSet
LinkedHashSet
TreeSet
HashSet
LinkedHashSet
HashSet
TreeSet
HashSet
Map(映射)
Map是键值对的集合,它把数据组织成“钥匙”和“锁”的关系。每个“钥匙”(Key)都是唯一的,通过这把唯一的钥匙,你就能找到对应的“锁”(Value)。比如,一个字典,每个词条(Key)都对应一个解释(Value)。常见的实现有
HashMap
LinkedHashMap
TreeMap
HashMap
LinkedHashMap
TreeMap
选择正确的数据结构,对程序性能的影响是实实在在的。这就像你装修房子,不同区域用什么材料,得考虑它的功能和耐用性。
List: 当你需要一个有序的元素序列,并且可能需要通过索引频繁访问元素时,List是首选。
get(index)
ArrayList
LinkedList
ArrayList
ArrayList
Set: 当你关注的是元素的唯一性,并且不关心元素的存储顺序时,Set是最佳选择。
HashSet
hashCode()
equals()
HashSet
TreeSet
HashSet
Map: 当你需要通过一个唯一的键来快速查找对应的值时,Map是无可替代的。
HashMap
HashSet
hashCode()
equals()
TreeMap
HashMap
即便是这些基础数据结构,用不好也可能踩坑。有些问题,初学者可能觉得难以理解,但一旦遇到,就得花时间去排查。
List的陷阱与优化:
ConcurrentModificationException
List
remove()
add()
CopyOnWriteArrayList
Set和Map的陷阱与优化:
hashCode()
equals()
HashSet
HashMap
Set
Map
HashSet
HashMap
Person
id
name
id
equals
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return id == person.id; // 只比较id
}
@Override
public int hashCode() {
return Objects.hash(id); // hashCode也要基于id
}equals
id
hashCode
name
equals()
true
hashCode()
这些基础数据结构远不止我们日常使用的那些简单场景,它们在特定场景下能玩出很多花样,或者有更专业的变种。
List的高级应用:
filter
Map
reduce
collect
List<User> users = ...;
List<String> adultNames = users.stream()
.filter(u -> u.getAge() > 30)
.map(User::getName)
.collect(Collectors.toList());List.of()
ImmutableList
Set的高级应用:
set1.retainAll(set2)
EnumSet
EnumSet
HashSet
Map的高级应用:
LinkedHashMap
LinkedHashMap
removeEldestEntry
TreeMap
TreeMap
firstKey()
lastKey()
subMap()
IdentityHashMap
equals()
==
Map<Key, List<Value>>
Map<Key, Set<Value>>
Multimap
这些深入的用法和变种,往往能在特定问题上提供更优雅、更高效的解决方案。所以,别只停留在“会用”的层面,多想想“如何用得更好”,或者“有没有更适合的工具”。
以上就是List, Set, Map Z#XÆIT4?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号