在 Java 中,Set 和 List 都是 Collection 的子接口,但它们在元素顺序、是否允许重复、使用场景等方面有明显区别。
| 对比点 | List | Set |
|---|---|---|
| 是否允许重复元素 | ✅ 允许 | ❌ 不允许 |
| 是否保证顺序 | ✅ 保证插入顺序(如 ArrayList、LinkedList) | ❌ 不保证(HashSet) ✅ 保证(LinkedHashSet、TreeSet) |
| 是否可通过索引访问 | ✅ 可以(get(i)) | ❌ 不可以 |
| 常见实现类 | ArrayList、LinkedList、Vector | HashSet、LinkedHashSet、TreeSet |
| 典型用途 | 有序数据、可重复数据 | 去重、集合运算 |
List<String> list = new ArrayList<>();
list.add("A");
list.add("A");
list.add("B");
System.out.println(list); // [A, A, B]
System.out.println(list.get(0)); // A
ArrayList:查询快,增删慢LinkedList:增删快,查询慢Set<String> set = new HashSet<>();
set.add("A");
set.add("A");
set.add("B");
System.out.println(set); // [A, B]
HashSet:最快,无序LinkedHashSet:保持插入顺序TreeSet:自动排序(自然顺序或 Comparator)List 关心“顺序和重复”,Set 关心“唯一性”。
如果你愿意,我也可以帮你从 源码层面(如 HashMap 实现 HashSet) 或 面试角度 进一步讲解。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。