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);

}

}

相关推荐
better_liang4 小时前
每日Java面试场景题知识点之-消息队列MQ核心场景与实战
java·面试·kafka·消息队列·rabbitmq·rocketmq·mq
小江的记录本4 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
小马爱打代码4 小时前
Spring源码 第四篇:Spring 5 源码深度拆解:AOP 全流程核心原理
java·后端·spring
better_liang4 小时前
每日Java面试场景题知识点之-SpringBoot启动流程
java·面试·springboot·源码解析·启动流程
RyFit4 小时前
Java + AI 实战:Spring AI 从入门到企业级落地
java·人工智能·spring
ZhengEnCi6 小时前
01-如何监听接口调用情况?
java·spring boot·后端
JAVA面经实录9177 小时前
MyBatis学习体系
java·mybatis
java1234_小锋7 小时前
在 Spring AI 中如何实现函数调用(Function Calling)?请说明其基本原理和应用场景。
java·人工智能·spring
小马爱打代码7 小时前
Spring源码 第九篇:Spring 5 源码深度拆解 - Spring 事件驱动模型
java·后端·spring
ForgeAI码匠8 小时前
ForgeAdmin|Spring Boot 3 后台框架的自动配置设计:少写配置,多做组合
java·spring boot·后端