A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ︶ㄣ布丁 中级黑马   /  2012-12-21 21:14  /  2134 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

List和Set怎样区分,以及它们的子接口如何的使用呢?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 新手分 。

查看全部评分

5 个回复

倒序浏览

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。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
Set集合类似一个罐子,把一个对象添加到Set集合时,Set集合无法记住添加这个元素的顺序,所以Set里的元素不能重复;List集合像一个数组,它可以记住每次添加元素的顺序,只是List的长度可变。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
强烈建议看毕老师的相关视频,讲的非常清楚,你这是基础视频都没看的吧
回复 使用道具 举报
要对存入的元素排序的话,使用set集合的子类TreeSet,不排序的话一般使用List,ArrayList的特点:查询快,增删慢,LinkedList相反,具体的使用看你操作数据的情况,如果实在不知道选什么,那就ArrayList。

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
强烈建议看老毕的视频
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马