目录
✨探索Java 集合框架 基础 总结✨
一、集合框架概述
二、List 接口
ArrayList
LinkedList
Vector
三、Set 接口
HashSet
LinkedHashSet
TreeSet
四、Map 接口
HashMap
LinkedHashMap
TreeMap
五、常用方法总结
Collection 接口
List 接口
Set 接口
Map 接口
六、总结
✨探索Java 集合框架 基础 总结✨
在 Java 编程中,集合框架是一个非常重要的部分,它提供了一组用于存储、操作和处理数据的类和接口。集合框架可以大大简化我们处理数据集合的工作,提高编程效率和代码质量。本文将对 Java 集合框架的基础内容进行总结,包括常见的集合类型、接口及其特点、常用方法等。
一、集合框架概述
Java 集合框架位于java.util包中,它主要包含了三大类接口:Collection、Map和Iterator。Collection是一个用来存储一组对象的接口,它有几个重要的子接口,如List、Set和Queue。Map则是用于存储键值对的数据结构。Iterator是一个用于遍历集合元素的接口。
集合框架的设计遵循了一些通用的原则,如提供了统一的操作方法、方便的遍历方式以及不同集合类型之间的转换等,使得开发者可以根据具体的需求选择合适的集合类型来处理数据。
二、List 接口
List是一个有序的集合,可以包含重复元素。它的主要实现类有ArrayList、LinkedList和Vector。
ArrayList
特点:基于数组实现,具有快速随机访问的能力。查询操作效率高,时间复杂度为 O(1)。但在插入和删除元素时,尤其是在中间位置进行操作时,可能需要移动大量元素,效率相对较低,时间复杂度为 O(n)。
示例代码:
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List
// 添加元素
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add("Cherry");
// 访问元素
System.out.println(arrayList.get(1));
// 修改元素
arrayList.set(0, "Apricot");
// 删除元素
arrayList.remove(2);
// 遍历列表
for (String fruit : arrayList) {
System.out.println(fruit);
}
}
}
LinkedList
特点:基于双向链表实现,插入和删除操作在首尾两端效率较高,时间复杂度为 O(1)。但随机访问元素的效率较低,需要从头节点或尾节点开始遍历,时间复杂度为 O(n)。
示例代码:
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
List
linkedList.add("Dog");
linkedList.add("Cat");
linkedList.add("Elephant");
// 在头部插入元素
((LinkedList
// 在尾部插入元素
((LinkedList
// 删除头部元素
((LinkedList
// 删除尾部元素
((LinkedList
// 遍历链表
for (String animal : linkedList) {
System.out.println(animal);
}
}
}
Vector
特点:类似于ArrayList,也是基于数组实现,但它是线程安全的。在多线程环境下可以使用,但由于同步机制的存在,性能相对较低。在单线程环境下,一般不建议使用Vector,而优先选择ArrayList。
三、Set 接口
Set是一个不包含重复元素的集合,它的主要实现类有HashSet、LinkedHashSet和TreeSet。
HashSet
特点:基于哈希表实现,添加、删除和查找元素的效率都比较高,时间复杂度接近 O(1)。它不保证元素的顺序,因为元素是根据哈希值存储在哈希表中的。
示例代码:
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set
hashSet.add(5);
hashSet.add(3);
hashSet.add(7);
hashSet.add(5); // 重复元素不会被添加
// 检查元素是否存在
System.out.println(hashSet.contains(3));
// 遍历集合
for (Integer num : hashSet) {
System.out.println(num);
}
}
}
LinkedHashSet
特点:继承自HashSet,在哈希表的基础上维护了一个双向链表,以保证元素的插入顺序。遍历LinkedHashSet时,元素将按照添加的顺序输出。
示例代码:
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
Set
linkedHashSet.add("Red");
linkedHashSet.add("Green");
linkedHashSet.add("Blue");
linkedHashSet.add("Yellow");
// 遍历集合,元素按添加顺序输出
for (String color : linkedHashSet) {
System.out.println(color);
}
}
}
TreeSet
特点:基于红黑树实现,它可以对元素进行自然排序或者根据自定义的比较器进行排序。TreeSet中的元素是有序的,因此在需要对元素进行排序的场景中非常有用。添加、删除和查找元素的时间复杂度为 O(log n)。
示例代码:
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
Set
treeSet.add(8);
treeSet.add(2);
treeSet.add(6);
treeSet.add(4);
// 遍历有序集合
for (Integer num : treeSet) {
System.out.println(num);
}
}
}
四、Map 接口
Map用于存储键值对,每个键在Map中是唯一的。它的主要实现类有HashMap、LinkedHashMap和TreeMap。
HashMap
特点:基于哈希表实现,提供了快速的插入、删除和查找操作,时间复杂度接近 O(1)。它不保证键值对的顺序。
示例代码:
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map
hashMap.put("Apple", 5);
hashMap.put("Banana", 3);
hashMap.put("Cherry", 7);
// 根据键获取值
System.out.println(hashMap.get("Banana"));
// 检查键是否存在
System.out.println(hashMap.containsKey("Apple"));
// 遍历 Map
for (Map.Entry
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
LinkedHashMap
特点:继承自HashMap,在哈希表的基础上维护了一个双向链表,以保证键值对的插入顺序。遍历LinkedHashMap时,键值对将按照添加的顺序输出。
示例代码:
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapExample {
public static void main(String[] args) {
Map
linkedHashMap.put("One", "First");
linkedHashMap.put("Two", "Second");
linkedHashMap.put("Three", "Third");
// 遍历有序的 Map
for (Map.Entry
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
TreeMap
特点:基于红黑树实现,它可以根据键的自然顺序或者自定义的比较器对键值对进行排序。遍历TreeMap时,键值对将按照键的顺序输出。
示例代码:
import java.util.Map;
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
Map
treeMap.put(3, "Three");
treeMap.put(1, "One");
treeMap.put(2, "Two");
// 遍历有序的 TreeMap
for (Map.Entry
System.out.println(entry.getKey() + " => " + entry.getValue());
}
}
}
五、常用方法总结
以下是一些集合框架中常用的方法:
Collection 接口
add(E e):向集合中添加一个元素。
addAll(Collection extends E> c):将指定集合中的所有元素添加到当前集合中。
remove(Object o):从集合中移除指定元素。
removeAll(Collection> c):移除当前集合中与指定集合中相同的所有元素。
contains(Object o):检查集合是否包含指定元素。
size():返回集合中元素的数量。
isEmpty():判断集合是否为空。
iterator():返回一个迭代器,用于遍历集合元素。
List 接口
除了继承自Collection接口的方法外,还有:
get(int index):获取指定索引位置的元素。
set(int index, E element):修改指定索引位置的元素。
add(int index, E element):在指定索引位置插入一个元素。
remove(int index):移除指定索引位置的元素。
Set 接口
主要使用继承自Collection接口的方法,由于Set不允许重复元素,所以添加重复元素时会被忽略。
Map 接口
put(K key, V value):向Map中添加一个键值对,如果键已存在,则覆盖对应的值。
get(Object key):根据键获取对应的值。
containsKey(Object key):检查Map是否包含指定的键。
containsValue(Object value):检查Map是否包含指定的值。
keySet():返回Map中所有键的集合。
values():返回Map中所有值的集合。
entrySet():返回Map中所有键值对的集合,每个键值对是一个Map.Entry对象。
六、总结
Java 集合框架为我们提供了丰富的工具来处理各种数据集合。在实际编程中,我们需要根据具体的需求选择合适的集合类型。
例如:
如果需要有序且可重复的集合,可以选择List;
如果需要无序且不重复的集合,可以选择Set;
如果需要存储键值对,可以选择Map。
同时,我们还需要了解不同集合实现类的特点和性能,以便在不同的场景下做出最优的选择,从而提高程序的效率和可读性。通过熟练掌握 Java 集合框架的基础知识,我们能够更好地处理数据集合相关的编程任务,为开发复杂的应用程序打下坚实的基础。
希望这篇博客能够帮助你对 Java 集合框架的基础内容有一个清晰的理解和认识。在学习和使用过程中,不断实践和探索,你将能够更加深入地掌握集合框架的精髓。
觉得有用的话可以点点赞 (*/ω\*),支持一下。
如果愿意的话关注一下。会对你有更多的帮助。
每天都会不定时更新哦 >人< 。