常见的集合类型可以分为以下几类:
List(列表)、 Set(集合)、 Queue(队列)、 Map(映射)、
除了以上常见的集合类型,还有一些特殊用途的集合类,例如:
Stack(栈)、Deque(双端队列)
又可以细分为如下集合框架,每种集合都有其特点和适用场景:
- ArrayList:基于数组实现的动态数组,可以动态调整大小。支持随机访问,但插入和删除元素的效率较低。
- LinkedList:基于链表实现的双向链表,插入和删除元素的效率较高,但随机访问的效率较低。
- HashSet:基于哈希表实现的集合,不允许重复元素,无序。通过哈希函数快速定位元素,插入和查找的效率较高。
- TreeSet:基于红黑树实现的有序集合,不允许重复元素。元素按照自然顺序或自定义比较器进行排序。
- HashMap:基于哈希表实现的键值对映射,键和值都可以为null。通过键的哈希值快速定位元素,插入和查找的效率较高。
- TreeMap:基于红黑树实现的有序键值对映射,键不允许为null。键按照自然顺序或自定义比较器进行排序。
- Queue:队列接口,常用的实现类有LinkedList和ArrayDeque。支持先进先出(FIFO)的操作。
- Stack:栈接口,常用的实现类有Stack。支持后进先出(LIFO)的操作。
- LinkedHashMap:基于哈希表和双向链表实现的有序键值对映射。保持元素插入顺序或访问顺序。
以上集合框架提供了丰富的方法和功能,可以根据具体的需求选择合适的集合类型。需要根据数据的特点、操作的频率和效率要求等因素进行选择。
- ArrayList:
import java.util.ArrayList;
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add("Orange");
System.out.println(arrayList.get(1)); // 输出:Banana
arrayList.remove("Apple");
System.out.println(arrayList); // 输出:[Banana, Orange]
- LinkedList:
import java.util.LinkedList;
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Apple");
linkedList.add("Banana");
linkedList.add("Orange");
System.out.println(linkedList.get(2)); // 输出:Orange
linkedList.remove("Apple");
System.out.println(linkedList); // 输出:[Banana, Orange]
- HashSet:
import java.util.HashSet;
HashSet<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Orange");
System.out.println(hashSet.contains("Banana")); // 输出:true
hashSet.remove("Apple");
System.out.println(hashSet); // 输出:[Banana, Orange]
- TreeSet:
import java.util.TreeSet;
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Orange");
System.out.println(treeSet.first()); // 输出:Apple
treeSet.remove("Apple");
System.out.println(treeSet); // 输出:[Banana, Orange]
- HashMap:
import java.util.HashMap;
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("Apple", 1);
hashMap.put("Banana", 2);
hashMap.put("Orange", 3);
System.out.println(hashMap.get("Banana")); // 输出:2
hashMap.remove("Apple");
System.out.println(hashMap); // 输出:{Banana=2, Orange=3}
- TreeMap:
import java.util.TreeMap;
TreeMap<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Apple", 1);
treeMap.put("Banana", 2);
treeMap.put("Orange", 3);
System.out.println(treeMap.lastEntry()); // 输出:Orange=3
treeMap.remove("Apple");
System.out.println(treeMap); // 输出:{Banana=2, Orange=3}
- Queue(以LinkedList为例):
import java.util.LinkedList;
import java.util.Queue;
Queue<String> queue = new LinkedList<>();
queue.offer("Apple");
queue.offer("Banana");
queue.offer("Orange");
System.out.println(queue.peek()); // 输出:Apple
queue.poll();
System.out.println(queue); // 输出:[Banana, Orange]
- Stack:
import java.util.Stack;
Stack<String> stack = new Stack<>();
stack.push("Apple");
stack.push("Banana");
stack.push("Orange");
System.out.println(stack.pop()); // 输出:Orange
System.out.println(stack); // 输出:[Apple, Banana]
- LinkedHashMap:
import java.util.LinkedHashMap;
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("Apple", 1);
linkedHashMap.put("Banana", 2);
linkedHashMap.put("Orange", 3);
System.out.println(linkedHashMap.get("Banana")); // 输出:2
linkedHashMap.remove("Apple");
System.out.println(linkedHashMap); // 输出:{Banana=2, Orange=3}
在Java中,最常用的集合包括以下几种:
- ArrayList:ArrayList是基于数组实现的动态数组,它具有随机访问元素的能力。由于其底层使用数组存储数据,因此在读取元素方面效率较高。ArrayList还提供了动态调整大小的功能,可以根据需要自动扩展容量。由于其常用的操作效率较高,ArrayList是最常用的集合之一。
- HashMap:HashMap是基于哈希表实现的键值对映射,它提供了快速的插入、查找和删除操作。HashMap使用键的哈希值来快速定位元素,因此在大多数情况下,它的性能非常好。HashMap还允许键和值为null,使其具有更好的灵活性。HashMap是在需要使用键值对存储数据时最常用的集合之一。
- HashSet:HashSet是基于哈希表实现的集合,它不允许重复元素存在。HashSet通过哈希函数来快速定位元素,因此插入和查找的效率较高。由于其元素无序的特点,HashSet常用于需要快速查找和去重的场景。
- LinkedList:LinkedList是基于链表实现的双向链表,它具有高效的插入和删除操作。由于链表中的每个元素都包含指向前一个和后一个元素的引用,因此在插入和删除元素时,只需要修改相邻元素的引用即可,效率较高。LinkedList在需要频繁进行插入和删除操作的场景中常被使用。