面试题答案
一键面试存储结构
- List:有序的集合,它的存储结构通常类似于数组或链表。例如
ArrayList
基于动态数组实现,LinkedList
基于双向链表实现。 - Set:无序的集合,存储结构通常基于哈希表(如
HashSet
)或红黑树(如TreeSet
)。HashSet
使用哈希表存储元素,TreeSet
使用红黑树存储元素以保证元素有序。 - Map:以键值对(key - value)的形式存储数据,存储结构通常为哈希表(如
HashMap
)或红黑树(如TreeMap
)。HashMap
使用哈希表,TreeMap
使用红黑树来保证键的有序性。
元素重复性
- List:允许元素重复,即可以有多个相同的元素存在于List集合中。
- Set:不允许元素重复,当试图添加重复元素时,
add
方法会返回false
,集合的大小不会改变。 - Map:键(key)不允许重复,值(value)可以重复。如果使用相同的键再次
put
值,会覆盖原来的值。
遍历方式
- List:
- 普通for循环:通过索引遍历,如
for (int i = 0; i < list.size(); i++) { list.get(i); }
。 - 增强for循环:
for (Object obj : list) { }
。 - Iterator迭代器:
Iterator it = list.iterator(); while (it.hasNext()) { it.next(); }
。
- 普通for循环:通过索引遍历,如
- Set:
- 增强for循环:
for (Object obj : set) { }
。 - Iterator迭代器:
Iterator it = set.iterator(); while (it.hasNext()) { it.next(); }
。由于Set无序,不能通过索引遍历。
- 增强for循环:
- Map:
- 通过keySet遍历键:
for (Object key : map.keySet()) { map.get(key); }
。 - 通过entrySet遍历键值对:
for (Map.Entry entry : map.entrySet()) { entry.getKey(); entry.getValue(); }
。 - 通过values遍历值:
for (Object value : map.values()) { }
。
- 通过keySet遍历键: