Java集合框架中的List、Map、Set详解
在Java开发中,集合框架是处理数据时不可或缺的工具之一。今天,我们来深入了解一下Java集合框架中的
List
、Map
和Set
,并探讨它们的常见方法操作。
目录
一、List集合
1.1 List集合介绍
1.2 List集合的常见方法
添加元素
获取元素
修改元素
删除元素
元素排序
1.3 List的不同实现类
二、Map集合
2.1 Map集合介绍
2.2 Map集合的常见方法
添加键值对
获取值
检查键或值是否存在
删除键值对
2.3 Map的不同实现类
三、Set集合
3.1 Set集合介绍
3.2 Set集合的常见方法
添加元素
检查元素是否存在
移除元素
3.3 Set的不同实现类
总结
一、List集合
1.1 List集合介绍
List
是Java集合框架中的一个接口,它是一个有序的集合,允许存储重复的元素。List
中的元素可以通过索引进行访问,这使得它在需要频繁访问元素的场景中非常有用。常见的List
实现类有ArrayList
和LinkedList
。
1.2 List集合的常见方法
添加元素
-
add(E e)
:将指定元素添加到列表末尾。 -
add(int index, E element)
:在指定位置插入元素。
import java.util.ArrayList;
import java.util.List;public class ListAddExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple"); // 添加到末尾list.add(0, "Banana"); // 在索引0处插入System.out.println("List: " + list);}
}
获取元素
-
get(int index)
:返回列表中指定位置的元素。 -
indexOf(Object o)
:返回首次出现的指定元素的索引;如果未找到,则返回-1。 -
lastIndexOf(Object o)
:返回最后一次出现的指定元素的索引;如果未找到,则返回-1。
import java.util.ArrayList;
import java.util.List;public class ListGetExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");String fruit = list.get(1); // 获取索引1处的元素System.out.println("Element at index 1: " + fruit);int index = list.indexOf("Orange"); // 查找"Orange"的索引System.out.println("Index of 'Orange': " + index);int lastIndex = list.lastIndexOf("Banana"); // 查找最后一个"Banana"的索引System.out.println("Last index of 'Banana': " + lastIndex);}
}
修改元素
-
set(int index, E element)
:用指定元素替换列表中指定位置的元素,并返回被替换的元素。
import java.util.ArrayList;
import java.util.List;public class ListSetExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");String oldFruit = list.set(1, "Grape"); // 修改索引1处的元素System.out.println("Replaced element: " + oldFruit);System.out.println("Updated list: " + list);}
}
删除元素
-
remove(int index)
:删除指定位置的元素。 -
remove(Object o)
:删除首次出现的指定元素。
import java.util.ArrayList;
import java.util.List;public class ListRemoveExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Orange");list.remove(1); // 删除索引1处的元素list.remove("Orange"); // 删除"Orange"System.out.println("Updated list: " + list);}
}
元素排序
从Java 8开始,List
接口提供了sort()
方法,可以直接对列表进行排序。
import java.util.ArrayList;
import java.util.List;public class ListSortMethodExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(3);list.add(1);list.add(4);list.add(2);list.sort((o1, o2) -> o1.compareTo(o2)); // 升序排序System.out.println("Sorted list: " + list);}
}
1.3 List的不同实现类
实现类 | 特点 |
---|---|
ArrayList | 基于动态数组实现,支持快速随机访问,适合频繁读取操作,但插入和删除效率较低 |
LinkedList | 基于双向链表实现,适合频繁插入和删除操作,但随机访问效率较低 |
二、Map集合
2.1 Map集合介绍
Map
是Java集合框架中的一个接口,用于存储键值对(key-value)形式的数据。在Map
中,键(key)必须是唯一的,而值(value)可以重复。常见的Map
实现类有HashMap
、TreeMap
和HashTable
。
2.2 Map集合的常见方法
添加键值对
-
put(K key, V value)
:向Map
中添加键值对。
import java.util.HashMap;
import java.util.Map;public class MapPutExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);System.out.println("Map: " + map);}
}
获取值
-
get(Object key)
:根据键获取对应的值。
import java.util.HashMap;
import java.util.Map;public class MapGetExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);Integer value = map.get("Apple"); // 获取键为"Apple"的值System.out.println("Value for 'Apple': " + value);}
}
检查键或值是否存在
-
containsKey(Object key)
:判断Map
中是否包含指定的键。 -
containsValue(Object value)
:判断Map
中是否包含指定的值。
import java.util.HashMap;
import java.util.Map;public class MapContainsExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);boolean hasKey = map.containsKey("Apple"); // 检查键"Apple"boolean hasValue = map.containsValue(2); // 检查值2System.out.println("Contains key 'Apple': " + hasKey);System.out.println("Contains value 2: " + hasValue);}
}
删除键值对
-
remove(Object key)
:根据键删除对应的键值对。
import java.util.HashMap;
import java.util.Map;public class MapRemoveExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);map.remove("Apple"); // 删除键为"Apple"的键值对System.out.println("Updated map: " + map);}
}
2.3 Map的不同实现类
实现类 | 特点 |
---|---|
HashMap | 基于哈希表实现,允许null 键和null 值,线程不安全,性能高 |
TreeMap | 基于红黑树实现,按键的自然顺序或自定义顺序排序,不允许null 键 |
LinkedHashMap | 维护插入顺序,性能与HashMap 接近,线程不安全 |
HashTable | 线程安全,不允许null 键或null 值,性能较低 |
三、Set集合
3.1 Set集合介绍
Set
是Java集合框架中的一个接口,它不允许存储重复元素。Set
中的元素通常没有固定的存储顺序,但某些实现类(如TreeSet
)可以保持有序。常见的Set
实现类有HashSet
、LinkedHashSet
和TreeSet
。
3.2 Set集合的常见方法
添加元素
-
add(E e)
:向集合中添加一个元素,如果元素已存在,则返回false
。
import java.util.HashSet;
import java.util.Set;public class SetAddExample {public static void main(String[] args) {Set<String> set = new HashSet<>();boolean added1 = set.add("Apple"); // 添加元素boolean added2 = set.add("Banana");boolean added3 = set.add("Apple"); // 尝试添加重复元素System.out.println("Added 'Apple': " + added1);System.out.println("Added 'Banana': " + added2);System.out.println("Added 'Apple' again: " + added3);System.out.println("Set content: " + set);}
}
检查元素是否存在
-
contains(Object o)
:检查集合中是否包含指定元素。
import java.util.HashSet;
import java.util.Set;public class SetContainsExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Apple");set.add("Banana");boolean containsApple = set.contains("Apple"); // 检查是否包含"Apple"boolean containsOrange = set.contains("Orange"); // 检查是否包含"Orange"System.out.println("Contains 'Apple': " + containsApple);System.out.println("Contains 'Orange': " + containsOrange);}
}
移除元素
-
remove(Object o)
:从集合中移除指定元素。
import java.util.HashSet;
import java.util.Set;public class SetRemoveExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Apple");set.add("Banana");boolean removed = set.remove("Apple"); // 移除"Apple"System.out.println("Removed 'Apple': " + removed);System.out.println("Set content after removal: " + set);}
}
3.3 Set的不同实现类
实现类 | 特点 |
---|---|
HashSet | 基于哈希表实现,无序,允许null 值,线程不安全 |
LinkedHashSet | 维护插入顺序,性能与HashSet 接近,线程不安全 |
TreeSet | 基于红黑树实现,按键的自然顺序或自定义顺序排序,不允许null 值 |
总结
List
是一个有序的集合,允许重复元素,适合需要频繁访问元素的场景。
Map
是一个键值对集合,键唯一,值可以重复,适合需要通过键快速查找值的场景。
Set
是一个不允许重复元素的集合,适合需要存储唯一元素的场景。
通过掌握这些集合的特点和常见方法,我们可以根据具体需求选择合适的集合类型,从而更高效地处理数据。希望这篇文章对你有所帮助!