MST

星途 面试题库

面试题:Java中List、Set和Map集合类的主要区别是什么

请详细阐述Java中List、Set和Map这三种常用集合类在存储结构、元素重复性以及遍历方式等方面的主要区别。
12.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

存储结构

  • 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(); }
  • Set
    • 增强for循环for (Object obj : set) { }
    • Iterator迭代器Iterator it = set.iterator(); while (it.hasNext()) { it.next(); }。由于Set无序,不能通过索引遍历。
  • 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()) { }