黑马程序员技术交流社区
标题:
关于集合排序
[打印本页]
作者:
黑马-刘昌文
时间:
2012-4-9 00:47
标题:
关于集合排序
谁能告诉我集合中有哪几种是带排序的,那几种是不带排序的??
作者:
蒙武辉
时间:
2012-4-9 00:55
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集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
作者:
申振华
时间:
2012-4-9 01:04
楼上正解
TreeSet和TreeMap都时安自然顺序排序的。他们在存放时和取出时进行了自然排序。所以在存放到这些集合中的元素都要实现comparable接口。
Intger,String,等应用数据类都实现了comparable接口。所以在存放这些元素就进行了自然排序。
而集合才存放对象时,自定义对象首先实现comparable接口,覆写comparaTo方法定义排序规则。
作者:
胡元
时间:
2012-4-11 12:43
TreeSet()和TreeMap都是带自动排序的,按自然顺序排序其他的都不带排序
但是List()系列和Vector()系列的集合元素带有索引,可以自定义排序方法,调用方法进行排序。
作者:
pray
时间:
2014-4-26 06:58
本来我已经对这个社区失望了,觉得这个社区没有前途了,心里充满了悲哀。但是看了你的这个帖子,又让我对社区产生了希望。是你让我的心里重新燃起希望之火,是你让我的心死灰复燃,是你拯救了我一颗拨凉拨凉的心!本来我决定不会在社区回任何帖子了,但是看了你的帖子,我告诉自己这个帖子是一定要回的!这是百年难得一见的好贴啊!苍天有眼啊,让我在有生之年得以观得如此精彩绝伦的帖子!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2