Java中的集合
java.util 包中的集合
Java 集合框架提供了各种集合类,用于存储和管理对象。以下是 Java 集合框架中常见的集合类:
-
List 接口表示一个有序的集合,其中的元素可以重复。List 接口有以下实现类:
- ArrayList:动态数组,可以根据需要自动调整大小。
- LinkedList:由节点组成的链表结构,适用于频繁的插入和删除操作。
- Vector:线程安全的动态数组,可以根据需要自动调整大小。
-
Set 接口表示一个无序的集合,其中的元素不能重复。Set 接口有以下实现类:
- HashSet:基于哈希表实现的集合,不允许重复元素。
- TreeSet:基于红黑树实现的有序集合,按照自然顺序或自定义比较器进行排序。
-
Map 接口表示一个键值对映射,其中的键是唯一的。Map 接口有以下实现类:
- HashMap:基于哈希表实现的键值对映射,使用键来快速查找值。
- TreeMap:基于红黑树实现的有序键值对映射,按照键的自然顺序或自定义比较器进行排序。
- LinkedHashMap:基于哈希表和双向链表实现的有序键值对映射,保持插入顺序。
-
Queue 接口表示一个先进先出(FIFO)的队列。Queue 接口有以下实现类:
- LinkedList:由节点组成的链表结构,可以根据需要自动调整大小。
- PriorityQueue:基于堆实现的队列,元素按照优先级顺序进行排序。
-
Deque 接口表示一个双端队列,可以从两端插入和删除元素。Deque 接口有以下实现类:
- LinkedList:由节点组成的链表结构,可以根据需要自动调整大小。
- ArrayDeque:基于数组实现的双端队列,可以根据需要自动调整大小。
这些集合类都位于 Java 的 java.util
包中。您可以根据具体的需求选择适合的集合类。
Guava 中的集合类和接口
Guava 中的集合类提供了许多实用的功能和扩展,以下是一些常见的 Guava 集合类:
- ImmutableList:不可变的列表,一旦创建就不能被修改。
- ImmutableSet:不可变的集合,不允许重复元素。
- ImmutableMap:不可变的映射,提供了键值对的映射关系。
- ImmutableMultiset:不可变的多重集合,允许元素重复。
- ImmutableSortedSet:不可变的有序集合,按照自然顺序或自定义比较器排序。
- ImmutableTable:不可变的表格,提供了二维的行列映射。
- Multimap:一个键可以映射到多个值的集合。
- BiMap:一个键和值可以互相映射的集合。
- Table:一个二维的键值对映射。
- RangeSet:表示连续范围的集合,可以进行范围操作。
- RangeMap:将连续范围映射到值的集合。
在 Guava 中,除了集合类,还有一些集合接口可供使用。以下是一些常见的 Guava 集合接口:
-
Multimap:一个键可以映射到多个值的集合接口。它扩展了 Java 标准库中的 Map 接口,允许一个键对应多个值。
-
BiMap:一个键和值可以互相映射的集合接口。它提供了双向的映射,既可以通过键查找值,也可以通过值查找键。
-
Table:一个二维的键值对映射接口。它类似于一个行列表格,可以通过行和列的组合来查找和操作值。
-
RangeSet:表示连续范围的集合接口。它可以用来管理和操作连续的数值范围,例如整数范围或日期范围。
-
RangeMap:将连续范围映射到值的集合接口。它可以用来管理和操作连续范围的映射关系。
Apache Commons Collections 中的集合类和接口
Apache Commons Collections 是一个开源的 Java 库,它提供了许多常用的集合类和接口。以下是一些常见的集合类和接口:
集合类:
- Bag:一个可重复元素的集合。
- BidiMap:一个双向映射的集合。
- BitSet:一个位集合。
- CircularFifoBuffer:一个循环缓冲区。
- CursorableLinkedList:一个可以进行游标操作的链表。
- DualHashBidiMap:一个双向映射的哈希表。
- EnumMap:一个基于枚举类型的映射。
- FixedSizeList:一个固定大小的列表。
- FixedSizeMap:一个固定大小的映射。
- FixedSizeSet:一个固定大小的集合。
- HashBag:一个基于哈希表的可重复元素的集合。
- LazyList:一个延迟计算的列表。
- LinkedMap:一个基于链表的映射。
- LinkedSet:一个基于链表的集合。
- LRUMap:一个基于最近最少使用算法的映射。
- MultiHashMap:一个允许多个值映射到同一个键的映射。
- MultiValueMap:一个允许多个值映射到同一个键的映射。
- PredicatedCollection:一个带有谓词验证的集合。
- PredicatedList:一个带有谓词验证的列表。
- PredicatedMap:一个带有谓词验证的映射。
- PredicatedSet:一个带有谓词验证的集合。
- PriorityQueue:一个优先级队列。
- ReferenceMap:一个基于引用类型的映射。
- SequencedHashMap:一个基于链表的有序映射。
- SetUniqueList:一个同时保持列表和集合特性的列表。
- SingletonList:一个只包含一个元素的列表。
- SingletonMap:一个只包含一个键值对的映射。
- SingletonSet:一个只包含一个元素的集合。
- SynchronizedBag:一个线程安全的可重复元素的集合。
- SynchronizedCollection:一个线程安全的集合。
- SynchronizedList:一个线程安全的列表。
- SynchronizedMap:一个线程安全的映射。
- SynchronizedSet:一个线程安全的集合。
- TransformedBag:一个对元素进行转换的集合。
- TransformedList:一个对元素进行转换的列表。
- TransformedMap:一个对键值对进行转换的映射。
- TransformedSet:一个对元素进行转换的集合。
- TreeBag:一个基于红黑树的可重复元素的集合。
- TypedCollection:一个带有类型限制的集合。
- TypedMap:一个带有类型限制的映射。
- TypedSet:一个带有类型限制的集合。
- UnboundedFifoBuffer:一个无界缓冲区。
- UnmodifiableBidiMap:一个不可修改的双向映射。
- UnmodifiableCollection:一个不可修改的集合。
- UnmodifiableList:一个不可修改的列表。
- UnmodifiableMap:一个不可修改的映射。
- UnmodifiableSet:一个不可修改的集合。
集合接口:
- Bag:一个可重复元素的集合。
- BidiMap:一个双向映射的集合。
- Closure:一个执行操作的接口。
- CollectionUtils:一个用于操作集合的工具类。
- ExtendedProperties:一个扩展属性的接口。
- Factory:一个用于创建对象的接口。
- IterableMap:一个可迭代的映射接口。
- KeyValue:一个键值对的接口。
- ListIterator:一个列表迭代器的接口。
- ListUtils:一个用于操作列表的工具类。
- MapIterator:一个映射迭代器的接口。
- OrderedBidiMap:一个有序的双向映射接口。
- OrderedIterator:一个有序迭代器的接口。
- OrderedMap:一个有序的映射接口。
- Predicate:一个谓词接口。
- PriorityQueue:一个优先级队列接口。
- ResettableIterator:一个可重置的迭代器接口。
- SequencedMap:一个有序的映射接口。
- SetUtils:一个用于操作集合的工具类。
- SortedBag:一个有序的可重复元素的集合接口。
- Transformer:一个转换对象的接口。
- UnboundedFifoBuffer:一个无界缓冲区接口。
Java Concurrent 包中的集合类和接口
Java Concurrent 包提供了以下集合类:
- ConcurrentHashMap:线程安全的哈希表实现,用于存储键值对。
- ConcurrentSkipListMap:线程安全的跳表实现的有序映射。
- ConcurrentSkipListSet:线程安全的跳表实现的有序集合。
- CopyOnWriteArrayList:线程安全的动态数组实现,支持并发读取。
- CopyOnWriteArraySet:线程安全的集合实现,支持并发读取。
- LinkedBlockingQueue:线程安全的阻塞队列实现,支持生产者-消费者模式。
- ArrayBlockingQueue:线程安全的有界阻塞队列实现。
- ConcurrentLinkedQueue:线程安全的非阻塞队列实现。
- LinkedTransferQueue:线程安全的链式传输队列实现。
- PriorityBlockingQueue:线程安全的优先级阻塞队列实现。
- DelayQueue:线程安全的延迟队列实现。
- SynchronousQueue:线程安全的同步队列实现。