在 Java 中,Set 和 List 都是 Collection 的子接口,但它们在是否允许重复、是否有序、是否可随机访问等方面有明显区别。
| 对比点 | List | Set |
|---|---|---|
| 是否允许重复元素 | ✅ 允许 | ❌ 不允许 |
| 是否保证顺序 | ✅ 有序(插入顺序) | ❌ 不保证(部分实现除外) |
| 是否可随机访问 | ✅ 可以(如 get(index)) |
❌ 不可以 |
| 常见实现类 | ArrayList、LinkedList |
HashSet、TreeSet、LinkedHashSet |
| 是否允许 null | ✅ 允许 | 视实现而定 |
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
| 实现类 | 是否有序 | 是否排序 | 是否允许 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 关注“唯一性”。
如果你愿意,我也可以从 底层数据结构(数组 / 链表 / 哈希表 / 红黑树) 的角度再给你讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。