参考答案:
在 Java 中,能够提供对集合元素随机访问(即能够高效地访问集合中任何位置的元素)的集合类主要是那些基于数组的数据结构。随机访问的集合类通常提供 get(int index)
方法,可以根据索引直接获取某个位置的元素,而无需遍历整个集合。
以下是提供对元素随机访问的常见集合类:
ArrayList
ArrayList
是基于动态数组实现的 List
接口的实现类。它支持随机访问,因为它使用数组存储元素,可以根据索引直接访问集合中的任意元素。get(int index)
方法,时间复杂度是 O(1),即可以常数时间访问任意位置的元素。1List<String> list = new ArrayList<>(); 2list.add("A"); 3list.add("B"); 4list.add("C"); 5 6System.out.println(list.get(1)); // 输出: B
CopyOnWriteArrayList
CopyOnWriteArrayList
是线程安全的 ArrayList
,它在每次修改时都会创建一个新的底层数组副本。因此,它也支持随机访问,且在多线程环境下保持线程安全。get(int index)
方法,时间复杂度是 O(1),但每次修改时需要复制数组,因此写操作开销较大。1List<String> list = new CopyOnWriteArrayList<>(); 2list.add("A"); 3list.add("B"); 4list.add("C"); 5 6System.out.println(list.get(1)); // 输出: B
Vector
Vector
类是一个动态数组实现的 List
接口的实现类,与 ArrayList
类似,但它是线程安全的,所有的方法都使用同步来保证线程安全。它也支持随机访问。get(int index)
方法,时间复杂度是 O(1)。1List<String> list = new Vector<>(); 2list.add("A"); 3list.add("B"); 4list.add("C"); 5 6System.out.println(list.get(1)); // 输出: B
ArrayDeque
(虽然是双端队列,但提供随机访问)ArrayDeque
是一个基于数组的双端队列,它支持从两端插入和删除元素。虽然它的主要目的是作为队列,但它也支持通过 get(int index)
访问某个位置的元素,尽管它不是主要为随机访问设计的。get(int index)
方法,时间复杂度是 O(n),因为它通常不是为了提供随机访问而优化的。1ArrayDeque<String> deque = new ArrayDeque<>(); 2deque.add("A"); 3deque.add("B"); 4deque.add("C"); 5 6// ArrayDeque 不提供随机访问,除非使用遍历等方式 7for (String s : deque) { 8 System.out.println(s); 9}
LinkedList
:LinkedList
是基于链表实现的 List
接口的实现类,它不支持随机访问。访问元素需要从头或尾开始遍历,因此时间复杂度是 O(n)。HashSet
、TreeSet
、LinkedHashSet
:这些 Set
实现类并不提供基于索引的随机访问。它们主要基于哈希表、红黑树或链表实现,因此不支持通过索引直接访问元素。最近更新时间:2024-12-12