问答题1032/1053List,Set,Map三者的区别?

难度:
2021-11-02 创建

参考答案:

ListSetMap 是 Java 中常用的三种集合类型,它们分别属于 Collection 框架的不同部分。它们之间的主要区别如下:

1. List(列表)

  • 描述List 是一个有序的集合,允许存储重复的元素。它实现了 Collection 接口,并且是一个可以按索引访问的集合。
  • 特点
    • 有序性List 内的元素是按插入顺序排列的,可以通过索引访问。
    • 允许重复List 允许存储重复的元素。
    • 支持索引操作:可以通过 get(index) 来获取指定位置的元素,并支持通过索引进行修改或删除。
  • 常见实现
    • ArrayList:基于动态数组实现,查找速度快,插入删除速度较慢。
    • LinkedList:基于双向链表实现,插入删除操作快,但查找速度较慢。
  • 适用场景:适用于需要按顺序存储和访问元素、允许重复元素的场景。

示例:

1List<String> list = new ArrayList<>(); 2list.add("Apple"); 3list.add("Banana"); 4list.add("Apple"); 5System.out.println(list); // 输出:[Apple, Banana, Apple]

2. Set(集合)

  • 描述Set 是一个不允许重复元素的集合,通常用于存储唯一的元素。Set 继承自 Collection 接口,但不保证元素的顺序。
  • 特点
    • 无序性Set 内的元素没有特定的顺序(有些实现如 LinkedHashSet 会保留插入顺序,但大多数实现不保证顺序)。
    • 不允许重复Set 不能包含重复的元素。如果向集合中添加重复元素,添加操作会失败。
  • 常见实现
    • HashSet:基于哈希表实现,元素无序,查找和插入操作的时间复杂度是 O(1)。
    • LinkedHashSet:基于哈希表和链表实现,保持插入顺序。
    • TreeSet:基于红黑树实现,元素按自然顺序或自定义比较器排序。
  • 适用场景:适用于需要存储唯一元素的场景,如去重操作。

示例:

1Set<String> set = new HashSet<>(); 2set.add("Apple"); 3set.add("Banana"); 4set.add("Apple"); // 不会添加重复的 "Apple" 5System.out.println(set); // 输出:[Apple, Banana]

3. Map(映射)

  • 描述Map 是一种将键映射到值的集合,包含一组键值对。每个键只能映射到一个值,但不同的键可以映射到相同的值。
  • 特点
    • 键值对Map 存储的元素是以键值对(key-value)形式存在,键是唯一的,值可以重复。
    • 无序性Map 本身不保证元素的顺序,但一些实现类(如 LinkedHashMap)会保留插入顺序,TreeMap 会按键排序。
    • 键唯一Map 中的键是唯一的,不能重复。
  • 常见实现
    • HashMap:基于哈希表实现,不保证顺序,允许 null 键和 null 值。
    • LinkedHashMap:基于哈希表和链表实现,保留插入顺序或访问顺序。
    • TreeMap:基于红黑树实现,按键的自然顺序或自定义比较器排序。
    • Hashtable:类似于 HashMap,但它是同步的,已较少使用。
  • 适用场景:适用于需要根据键查找、插入或删除值的场景,如缓存、存储映射关系等。

示例:

1Map<String, String> map = new HashMap<>(); 2map.put("Apple", "Red"); 3map.put("Banana", "Yellow"); 4map.put("Apple", "Green"); // 键 "Apple" 的值被更新为 "Green" 5System.out.println(map); // 输出:{Apple=Green, Banana=Yellow}

最近更新时间:2024-12-09