Java的常用集合及其特点

143 阅读4分钟

常见的集合类型可以分为以下几类:

List(列表)、 Set(集合)、 Queue(队列)、 Map(映射)、

除了以上常见的集合类型,还有一些特殊用途的集合类,例如:

Stack(栈)、Deque(双端队列)

又可以细分为如下集合框架,每种集合都有其特点和适用场景:

  1. ArrayList:基于数组实现的动态数组,可以动态调整大小。支持随机访问,但插入和删除元素的效率较低。
  2. LinkedList:基于链表实现的双向链表,插入和删除元素的效率较高,但随机访问的效率较低。
  3. HashSet:基于哈希表实现的集合,不允许重复元素,无序。通过哈希函数快速定位元素,插入和查找的效率较高。
  4. TreeSet:基于红黑树实现的有序集合,不允许重复元素。元素按照自然顺序或自定义比较器进行排序。
  5. HashMap:基于哈希表实现的键值对映射,键和值都可以为null。通过键的哈希值快速定位元素,插入和查找的效率较高。
  6. TreeMap:基于红黑树实现的有序键值对映射,键不允许为null。键按照自然顺序或自定义比较器进行排序。
  7. Queue:队列接口,常用的实现类有LinkedList和ArrayDeque。支持先进先出(FIFO)的操作。
  8. Stack:栈接口,常用的实现类有Stack。支持后进先出(LIFO)的操作。
  9. LinkedHashMap:基于哈希表和双向链表实现的有序键值对映射。保持元素插入顺序或访问顺序。

以上集合框架提供了丰富的方法和功能,可以根据具体的需求选择合适的集合类型。需要根据数据的特点、操作的频率和效率要求等因素进行选择。

  1. 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]
  1. 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]
  1. 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]
  1. 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]
  1. 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}
  1. 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}
  1. 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]
  1. 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]
  1. 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中,最常用的集合包括以下几种:

  1. ArrayList:ArrayList是基于数组实现的动态数组,它具有随机访问元素的能力。由于其底层使用数组存储数据,因此在读取元素方面效率较高。ArrayList还提供了动态调整大小的功能,可以根据需要自动扩展容量。由于其常用的操作效率较高,ArrayList是最常用的集合之一。
  2. HashMap:HashMap是基于哈希表实现的键值对映射,它提供了快速的插入、查找和删除操作。HashMap使用键的哈希值来快速定位元素,因此在大多数情况下,它的性能非常好。HashMap还允许键和值为null,使其具有更好的灵活性。HashMap是在需要使用键值对存储数据时最常用的集合之一。
  3. HashSet:HashSet是基于哈希表实现的集合,它不允许重复元素存在。HashSet通过哈希函数来快速定位元素,因此插入和查找的效率较高。由于其元素无序的特点,HashSet常用于需要快速查找和去重的场景。
  4. LinkedList:LinkedList是基于链表实现的双向链表,它具有高效的插入和删除操作。由于链表中的每个元素都包含指向前一个和后一个元素的引用,因此在插入和删除元素时,只需要修改相邻元素的引用即可,效率较高。LinkedList在需要频繁进行插入和删除操作的场景中常被使用。