温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Set和List区别在哪

发布时间:2026-07-24 12:43:19 来源:亿速云 阅读:112 作者:小樊 栏目:编程语言

在 Java 中,Set 和 List 都是 Collection 的子接口,但它们在是否允许重复、是否有序、是否可随机访问等方面有明显区别。


一、核心区别对比

对比点 List Set
是否允许重复元素 ✅ 允许 ❌ 不允许
是否保证顺序 ✅ 有序(插入顺序) ❌ 不保证(部分实现除外)
是否可随机访问 ✅ 可以(如 get(index)) ❌ 不可以
常见实现类 ArrayList、LinkedList HashSet、TreeSet、LinkedHashSet
是否允许 null ✅ 允许 视实现而定

二、List 详解

特点

  • 有序:元素的插入顺序就是遍历顺序
  • 可重复:可以存放多个相同元素
  • 有索引:可以通过下标访问

常见实现

List<String> list1 = new ArrayList<>();  // 底层数组,查询快
List<String> list2 = new LinkedList<>(); // 底层链表,增删快

示例

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("A"); // 允许重复

System.out.println(list.get(1)); // B

三、Set 详解

特点

  • 不允许重复元素
  • 无序(大多数实现)
  • 没有索引

常见实现

实现类 是否有序 是否排序 是否允许 null
HashSet ❌ 无序 ❌ ✅
LinkedHashSet ✅ 插入顺序 ❌ ✅
TreeSet ✅ 自然顺序 / 自定义顺序 ✅ ❌

示例

Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 不会重复添加

System.out.println(set); // [A, B]

四、使用场景对比

用 List 的场景

  • 需要顺序
  • 可以重复
  • 需要按索引访问

✅ 例如:

  • 购物车商品列表
  • 学生成绩列表
  • 列表展示数据

用 Set 的场景

  • 去重
  • 不关心顺序
  • 判断是否包含某个元素

✅ 例如:

  • 用户 ID 去重
  • 标签集合
  • 黑名单 / 白名单

五、一句话总结

List 关注“顺序和重复”,Set 关注“唯一性”。

如果你愿意,我也可以从 底层数据结构(数组 / 链表 / 哈希表 / 红黑树) 的角度再给你讲一遍。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手