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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-刘昌文 中级黑马   /  2012-4-9 00:47  /  2781 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能告诉我集合中有哪几种是带排序的,那几种是不带排序的??

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

4 个回复

倒序浏览
Collection 是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。它有两个常用的子接口,List:对元素都有定义索引。有序的。可以重复元素。Set:不可以重复元素。无序。        |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
                |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
                |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
                |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。


        |--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
                |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
                        HashSet是如何保证元素唯一性的呢?
                        是通过元素的两个方法,hashCode和equals来完成。
                        如果元素的HashCode值相同,才会判断equals是否为true。
                        如果元素的hashcode值不同,不会调用equals。

                        注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
                        AarryList对元素增,减,判断,删操作依赖元素的equals().
                        HashSet判断元素唯一性原理:判断元素的hashCode值是否相同。
                                                                           如果相同,还会继续判断元素的equals方法,是否为true。


                |--TreeSet:可以对Set集合中的元素进行排序。
                                        底层数据结构是二叉树。
                                        保证元素唯一性的依据:
                                        compareTo方法return 0.

                                        TreeSet排序的第一种方式:让元素自身具备比较性。
                                        元素需要实现Comparable接口,覆盖compareTo方法。

                                        public interface Comparable<T>
                                        也种方式也称为元素的自然顺序,或者叫做默认顺序。
                                        此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,
                                        类的 compareTo 方法被称为它的自然比较方法。

                                        int compareTo(T o)比较此对象与指定对象的顺序。如果该对象小于、等于或大于
                                        指定对象,则分别返回负整数、零或正整数。
Map
        |--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
        |--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
        |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

Collections 表示的是对于Collection 集合的工具类,该类中的方法都是静态的
                提供的方法中有可以对list集合进行排序,二分查找等方法。
                通常常用的集合都是线程不安全的。因为要提高效率。
                如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
楼上正解
TreeSet和TreeMap都时安自然顺序排序的。他们在存放时和取出时进行了自然排序。所以在存放到这些集合中的元素都要实现comparable接口。
Intger,String,等应用数据类都实现了comparable接口。所以在存放这些元素就进行了自然排序。
而集合才存放对象时,自定义对象首先实现comparable接口,覆写comparaTo方法定义排序规则。
回复 使用道具 举报
TreeSet()和TreeMap都是带自动排序的,按自然顺序排序其他的都不带排序
但是List()系列和Vector()系列的集合元素带有索引,可以自定义排序方法,调用方法进行排序。
回复 使用道具 举报
本来我已经对这个社区失望了,觉得这个社区没有前途了,心里充满了悲哀。但是看了你的这个帖子,又让我对社区产生了希望。是你让我的心里重新燃起希望之火,是你让我的心死灰复燃,是你拯救了我一颗拨凉拨凉的心!本来我决定不会在社区回任何帖子了,但是看了你的帖子,我告诉自己这个帖子是一定要回的!这是百年难得一见的好贴啊!苍天有眼啊,让我在有生之年得以观得如此精彩绝伦的帖子!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马