List、Set、Map有什么区别?

List、Set和Map是Java中的三种基本数据结构,它们在元素重复性、有序性和用途方面存在显著的区别。

元素重复性:

List允许有重复的元素。任何数量的重复元素都可以在不影响现有重复元素的值及其索引的情况下插入到List集合中。

Set集合不允许元素重复。Set以及所有实现了Set接口的类都不允许重复值的插入,若多次插入同一个元素时,在该集合中只显示一个。

Map以键值对的形式对元素进行存储。Map不允许有重复键,但允许有不同键对应的重复的值。

元素的有序性:

List及其所有实现类保持了每个元素的插入顺序。

Set中的元素都是无序的。但是某些Set的实现类以某种殊形式对其中的元素进行排序,如:LinkedHashSet按照元素的插入顺序进行排序。

Map跟Set一样对元素进行无序存储,但其某些实现类对元素进行了排序。

用途:

List 集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。

Map中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复。

Set 集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序。

以下是List、Set和Map的简单例子:

List(列表)例子:

import java.util.ArrayList;

import java.util.List;

public class ListExample {

public static void main(String\[\] args) {

List<String> list = new ArrayList<>();

list.add("苹果");

list.add("香蕉");

list.add("橙子");

System.out.println("List: " + list);

}

}

Set(集合)例子:

import java.util.HashSet;

import java.util.Set;

public class SetExample {

public static void main(String\[\] args) {

Set<String> set = new HashSet<>();

set.add("苹果");

set.add("香蕉");

set.add("橙子");

set.add("苹果"); // 重复元素,Set不允许重复,所以只会保留一个"苹果"

System.out.println("Set: " + set);

}

}

Map(映射)例子:

import java.util.HashMap;

import java.util.Map;

public class MapExample {

public static void main(String\[\] args) {

Map<String, Integer> map = new HashMap<>();

map.put("苹果", 5);

map.put("香蕉", 3);

map.put("橙子", 7);

map.put("苹果", 10); // 键不允许重复,但值可以重复,所以"苹果"对应的值将会是10,之前的值5将会被覆盖。

System.out.println("Map: " + map);

}

}

相关推荐
金銀銅鐵41 分钟前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
福建佰胜张工1 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
catoop1 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
system_error_x2 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
驭渊的小故事2 小时前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
Elastic 中国社区官方博客3 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1883 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn3 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
y1su4 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
我命由我123455 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法