黑马程序员技术交流社区
标题:
List和Set的区别是什么啊?
[打印本页]
作者:
︶ㄣ布丁
时间:
2012-12-21 21:14
标题:
List和Set的区别是什么啊?
List和Set怎样区分,以及它们的子接口如何的使用呢?
作者:
臧盼
时间:
2012-12-21 21:23
Collection 长度可以变化,存储的是对象类型。
功能:(add(),remove(),size(),contains(),iterator())
|--List 元素可以重复,有序。
功能:(get())
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set 元素不可以重复(唯一),无序。
|--HashSet 元素无序,唯一
底层数据结构是哈希表。
如何保证元素的唯一性呢?
它依赖于hashCode方法和equals方法。
首先判断hashCode方法的值是否相同:
相同:在根据equals方法进行判断
如果返回true,不添加进集合
如果返回false,就把元素添加到集合中
不同:那么,就把元素添加进集合
|--LinkedHashSet
底层数据结构是链表和哈希表。
用链表保证元素有序,用哈希表保证元素唯一。
|--TreeSet 元素按照自己的顺序(默认自然顺序),唯一
底层数据结构是二叉树。
如何保证元素的唯一性和排序呢?
第一种:让元素具备比较性
元素对象实现Comparable接口的compareTo方法
第二种:让集合具备比较性
实现Comparator接口的compare方法
如果元素也具备比较性,集合也具备比较性,那么到底谁起作用呢?
集合具备比较性起作用。
2:代码体现
常见的5个对象必须都要能够存储字符串和自定义对象并遍历。
遍历:
List:
Iterator iterator()
get()和size()
Set:
Iterator iterator()
3:什么时候使用哪种集合对象
你存储的元素要保证唯一吗?
要:Set
需要排序吗?
要:TreeSet
不要:HashSet
不知道用哪个,就用HashSet。
不要:List
需要保证线程安全吗?
需要:Vector
不需要:
多数操作时用于查询:用ArrayList
多数操作时用于增删:用LinkedList
不知道用哪个,就用ArrayList。
作者:
陈雪平
时间:
2012-12-21 23:58
Set集合类似一个罐子,把一个对象添加到Set集合时,Set集合无法记住添加这个元素的顺序,所以Set里的元素不能重复;List集合像一个数组,它可以记住每次添加元素的顺序,只是List的长度可变。
作者:
夏晓彤
时间:
2012-12-22 00:25
强烈建议看毕老师的相关视频,讲的非常清楚,你这是基础视频都没看的吧
作者:
彭宾
时间:
2012-12-22 01:20
要对存入的元素排序的话,使用set集合的子类TreeSet,不排序的话一般使用List,ArrayList的特点:查询快,增删慢,LinkedList相反,具体的使用看你操作数据的情况,如果实在不知道选什么,那就ArrayList。
作者:
黄锦成
时间:
2012-12-24 11:59
强烈建议看老毕的视频
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2