Java中的集合类和常用集合操作
Java中的集合类是一组用于存储和操作一组对象的接口和实现类。Java集合框架提供了多种集合类,包括List、Set、Queue和Map等,每种集合类都有自己独特的特性和用途。本文将依次介绍Java中常用的集合类及其操作。
1. List
List接口是一个有序的集合,其中的元素可以重复。Java提供了多种实现List接口的集合类,包括ArrayList、LinkedList和Vector等。
- ArrayList
ArrayList是一个基于数组实现的List集合类,它允许对元素进行快速随机访问,并且支持动态调整容量。使用ArrayList时,需要预估集合的大小,以便给数组分配合适的空间,避免频繁扩容。
示例代码:
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
System.out.println(list); // [Java, Python, C++]
- LinkedList
LinkedList是一个基于链表实现的List集合类,它对插入和删除操作有很好的支持,但对访问操作的性能比ArrayList差。和ArrayList一样,LinkedList也支持动态调整容量。
示例代码:
List<String> list = new LinkedList<>();
list.add("Java");
list.add("Python");
list.add("C++");
System.out.println(list); // [Java, Python, C++]
- Vector
Vector是一个线程安全的List集合类,和ArrayList类似也是基于数组实现的,但每个方法都使用了synchronized修饰符来保证线程安全。Vector可以自动扩容,但扩容时需要复制整个数组。
示例代码:
List<String> list = new Vector<>();
list.add("Java");
list.add("Python");
list.add("C++");
System.out.println(list); // [Java, Python, C++]
2. Set
Set接口是一个无序的集合,其中的元素不可以重复。Java提供了多种实现Set接口的集合类,包括HashSet、TreeSet和LinkedHashSet等。
- HashSet
HashSet是一个基于哈希表实现的Set集合类,它可以快速地判断元素是否存在,但不能保证元素的顺序。
示例代码:
Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("C++");
System.out.println(set); // [Java, C++, Python]
- TreeSet
TreeSet是一个基于红黑树实现的Set集合类,它保证元素按照自然排序或指定的Comparator接口排序,因此具有有序性。
示例代码:
Set<String> set = new TreeSet<>();
set.add("Java");
set.add("Python");
set.add("C++");
System.out.println(set); // [C++, Java, Python]
- LinkedHashSet
LinkedHashSet是一个基于哈希表和链表实现的Set集合类,它保证元素按照插入顺序排序,因此具有有序性。
示例代码:
Set<String> set = new LinkedHashSet<>();
set.add("Java");
set.add("Python");
set.add("C++");
System.out.println(set); // [Java, Python, C++]
3. Queue
Queue接口是一个队列集合,支持在队头添加和移除元素,在队尾添加元素。Java提供了多种实现Queue接口的集合类,包括ArrayDeque、LinkedList和PriorityQueue等。
- ArrayDeque
ArrayDeque是一个基于数组实现的双端队列集合类,可以在队头和队尾进行添加和移除元素的操作。
示例代码:
Queue<String> queue = new ArrayDeque<>();
queue.add("Java");
queue.add("Python");
queue.add("C++");
System.out.println(queue); // [Java, Python, C++]
System.out.println(queue.poll()); // Java
- LinkedList
LinkedList既可以作为List集合类,也可以作为Queue集合类。作为Queue集合类时,可以在队头和队尾进行添加和移除元素的操作。
示例代码:
Queue<String> queue = new LinkedList<>();
queue.add("Java");
queue.add("Python");
queue.add("C++");
System.out.println(queue); // [Java, Python, C++]
System.out.println(queue.poll()); // Java
- PriorityQueue
PriorityQueue是一个基于堆实现的优先级队列集合类,每次弹出的元素是具有最高优先级的元素。需要注意的是,PriorityQueue并不是线程安全的集合类。
示例代码:
Queue<Integer> queue = new PriorityQueue<>(); queue.add(2); queue.add(3); queue.add(1); System.out.println(queue); // [1, 3, 2] System.out.println(queue.poll()); // 1
4. Map
Map接口是一个键值对集合,其中的键不可以重复,值可以重复。Java提供了多种实现Map接口的集合类,包括HashMap、TreeMap和LinkedHashMap等。
- HashMap
HashMap是一个基于哈希表实现的Map集合类,其中的键值对是无序的。当键值对数量过多时,HashMap可能会出现哈希碰撞,导致性能下降。
示例代码:
Map<String, Integer> map = new HashMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("C++", 3);
System.out.println(map); // {Java=1, C++=3, Python=2}
- TreeMap
TreeMap是一个基于红黑树实现的Map集合类,其中的键值对是有序的。可以按照自然排序或指定的Comparator接口排序。
示例代码:
Map<String, Integer> map = new TreeMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("C++", 3);
System.out.println(map); // {C++=3, Java=1, Python=2}
- LinkedHashMap
LinkedHashMap是一个基于哈希表和链表实现的Map集合类,其中的键值对是有序的,按照插入顺序排序。
示例代码:
Map<String, Integer> map = new LinkedHashMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("C++", 3);
System.out.println(map); // {Java=1, Python=2, C++=3}
以上是Java中常用的集合类及其操作,熟练掌握集合类和操作可以极大地提高代码的编写效率。
