欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Java 集合框架:List、Set、Map 特性、创建方式与遍历方式总结

Java 集合框架:List、Set、Map 特性、创建方式与遍历方式总结

2024/10/26 21:48:47 来源:https://blog.csdn.net/weixin_47121832/article/details/143159134  浏览:    关键词:Java 集合框架:List、Set、Map 特性、创建方式与遍历方式总结

Java 集合框架:List、Set、Map 特性、创建方式与遍历方式总结

Java 中的集合框架提供了 ListSetMap 三种常用的集合类型,它们各自有不同的特性、创建方式和使用场景。下面对每种集合类型的特性、创建方式、遍历方式以及适用需求进行总结,并展示如何使用 Collections 对集合进行排序。


1. List 集合

特点:
  • 有序List 保留元素的插入顺序,能够通过索引访问元素。
  • 允许重复List 可以包含重复的元素。
  • 常见实现类ArrayListLinkedListVector
创建方式:
List<String> arrayList = new ArrayList<>();  // 动态数组实现
List<String> linkedList = new LinkedList<>();  // 链表实现
遍历方式:
  • 1. for 循环
for (int i = 0; i < arrayList.size(); i++) {System.out.println(arrayList.get(i));
}
  • 2. 增强 for 循环
for (String item : arrayList) {System.out.println(item);
}
  • 3. 使用迭代器
Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());
}
  • 4. Lambda 表达式 (JDK 8)
arrayList.forEach(item -> System.out.println(item));
适用场景:
  • 需要按顺序访问元素,并且可能有重复元素的场景(如队列、购物车等)。

2. Set 集合

特点:
  • 无序Set 不保证元素的顺序(LinkedHashSet 除外)。
  • 不允许重复Set 中不能包含重复的元素。
  • 常见实现类HashSetLinkedHashSetTreeSet
创建方式:
Set<String> hashSet = new HashSet<>();  // 无序,基于哈希表
Set<String> linkedHashSet = new LinkedHashSet<>();  // 有序,基于链表
Set<String> treeSet = new TreeSet<>();  // 有序,基于红黑树
遍历方式:
  • 1. 增强 for 循环
for (String item : hashSet) {System.out.println(item);
}
  • 2. 使用迭代器
Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());
}
  • 3. Lambda 表达式 (JDK 8)
hashSet.forEach(item -> System.out.println(item));
适用场景:
  • 需要确保元素唯一性,并且不关心元素顺序的场景(如去重操作、集合运算等)。

3. Map 集合

特点:
  • 键值对存储Map 存储的是键值对 (key-value),每个键唯一。
  • 键不允许重复,但值可以重复。
  • 常见实现类HashMapLinkedHashMapTreeMap
创建方式:
Map<String, Integer> hashMap = new HashMap<>();  // 无序,基于哈希表
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();  // 有序,基于链表
Map<String, Integer> treeMap = new TreeMap<>();  // 按照键排序,基于红黑树
遍历方式:
  • 1. 遍历键集合
for (String key : hashMap.keySet()) {System.out.println(key + " = " + hashMap.get(key));
}
  • 2. 遍历键值对
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {System.out.println(entry.getKey() + " = " + entry.getValue());
}
  • 3. Lambda 表达式 (JDK 8)
hashMap.forEach((key, value) -> System.out.println(key + " = " + value));
适用场景:
  • 需要根据键快速查找对应值的场景(如缓存、字典、配置文件等)。

集合排序:使用 Collections 实现排序

在 Java 中,Collections 工具类提供了对集合进行排序的方法。通常我们可以对 List 集合进行排序,因为 SetMap 本身没有明确的顺序,且 Set 可能需要使用 TreeSet 来实现排序。

List 集合进行排序:

1. 自然排序(元素需要实现 Comparable 接口):

List<String> list = new ArrayList<>(Arrays.asList("Banana", "Apple", "Orange"));
Collections.sort(list);  // 自然顺序(字母序)
System.out.println(list);  // 输出: [Apple, Banana, Orange]

2. 使用 Comparator 进行自定义排序:

List<String> list = new ArrayList<>(Arrays.asList("Banana", "Apple", "Orange"));
Collections.sort(list, (a, b) -> b.compareTo(a));  // 逆序排序
System.out.println(list);  // 输出: [Orange, Banana, Apple]
Set 集合进行排序:

Set 集合通常需要使用 TreeSet 进行排序,TreeSet 自动对元素进行排序。

Set<String> treeSet = new TreeSet<>(Arrays.asList("Banana", "Apple", "Orange"));
System.out.println(treeSet);  // 输出: [Apple, Banana, Orange] (按自然顺序)
Map 集合进行排序:

Map 集合的排序可以通过 TreeMap 按键排序,或者通过 CollectionsentrySet 进行排序。

1. 使用 TreeMap 按键排序:

Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Banana", 2);
treeMap.put("Apple", 3);
treeMap.put("Orange", 1);
System.out.println(treeMap);  // 输出: {Apple=3, Banana=2, Orange=1} (按键排序)

2. 使用 CollectionsHashMap 进行排序:

Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Banana", 2);
hashMap.put("Apple", 3);
hashMap.put("Orange", 1);// 将 entrySet 转换为 List,并排序
List<Map.Entry<String, Integer>> list = new ArrayList<>(hashMap.entrySet());
list.sort(Map.Entry.comparingByKey());  // 按键排序
System.out.println(list);  // 输出: [Apple=3, Banana=2, Orange=1]

总结:

  • List:有序且允许重复,适用于需要按顺序存储和访问的场景。
  • Set:无序且不允许重复,适用于去重的场景。
  • Map:键值对存储,键不允许重复,适用于快速查找键对应值的场景。
  • 排序:使用 Collections.sort()List 进行排序,TreeSetTreeMap 提供自动排序。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com