Java 中 List 和 Set 的区别是什么?

回答·33
最热
最新
  • set集合:无序不可重复,存放在set集合中的元素底层实际上存放在map集合中的key部分了。 list集合:有序可重复,有序指的是存在list集合中的元素有下标,可以通过元素的下标访问元素
  • 区别就是一个可重复一个不重复 接口只起到定义规范的作用,在 set 接口的描述中并没有找到是否有序的需求 比如 linkedhashset 就是有序的,并且也实现了 set 所以我认为 是否有序并不能算是这两个接口的区别
  • List 底层是数组,有序有索引,特点是查询快,增删慢; Set 底层是数组+链表,无序无索引,元素不可重复,特点是查询慢,增删快。 了解有限,勿喷。
  • 从相同的角度来说他们都是存放数据的容器。 不同的角度:                List:以链的形式存放数据数,据插入的方式以节点的方式拼接到链头或者链尾,所以他的查询比较慢                Set:更像数学概念的集合,在 set 中为了确保数据的唯一性,每个插进来的数据都会用 equals 校验
  • Java中的Set集合是继承Collection的接口,是一个不包含重复元素的集合。 List以特定顺序保存一组元素(按插入顺序保存) ArrayList :插入移除元素慢,随机访问快 LinkedList:插入移除元素快,随机访问慢,顺序访问快 Set保存一组元素,不能重复(唯一性) HashSet :无顺序,速度快 LinkedHashSet: 按插入顺序 TreeSet: 按比较结果的升序 3.Set和List对比: Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。 List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
  • List 按对象进入的顺序保存对象,不做排序或编辑操作。 Set 对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于 Set,而不关心它的顺序--否则应该使用 List)。
  • 1、List,Set 都是继承自 Collection 接口,Map 则不是 2、List 特点:元素有放入顺序,元素可重复 ,Set 特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在 set 中的位置是有该元素的 HashCode 决定的,其位置其实是固定的,加入 Set 的 Object 必须定义 equals()方法 ,另外 list 支持 for 循环,也就是通过下标来遍历,也可以用迭代器,但是 set 只能用迭代,因为他无序,无法用下标来取得想要的值。)  3.Set 和 List 对比:  Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。  List:和数组类似,List 可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
  • 看源码 看两者的数据结构实现 list 源码是数组实现 所以读快写慢 set源码是链表实现 所以写快读慢 关于这两者的接口对应的实现类是否 元素排序 关于元素的唯一性 可以看相关其他的源码 直接给结论 没有源码的加持是没有灵魂的 所以 源码还是望各位看官自行细细品读 从而知其中味
  • list 有序,可以有多个 Null,元素可重复,元素有索引 set 无序,只能有一个 Null,元素不可重复,唯一性
  • 简单来讲就是,set是元素不可重复的集合,而list允许。