您的位置:首页 > 编程语言 > Java开发

java中的集合知识杂记

2015-05-08 15:20 183 查看
Collection中有三个主要的接口:list,set,map

list是一种知道索引位置的集合,可以有多个元素引用相同的对象

set注重独一无二的性质,不允许有重复的元素。所谓的重复的元素,hashset会对存入得对象进行对比,先比较他们的hashcode是不是相同的,若hashcode是相同的,就会用equals比较这个对象是不是完全相同,只有当hashcode和元素都相同的时候,hashset才会认为这两个对象是相同的。
也就是说hashcode只是用来缩小找寻成本的,最终是不是相等还是要用equals来确定,这就是对象相等的判断方法。
根据需要可以自己重写hashcode和equals方法。

map中的key不能重复,需要用key来取出value,所以key必须唯一。

List的排序
arraylist的排序可以用Collections.sort(Arraylist<String> list);
当arraylist中放的是String类型的时候,可以直接用sort(list)进行排序,根据String中首字母来排序。数字优先,然后是字母依次排序,中文放在最后不做排序
但是arraylist中放的是其他对象的时候,就不能用直接用sort(list)来排序,因为你的对象中有很多元素,collections不知道根据哪个元素来进行排序。
看一下sort方法的定义
public static <T extends Comparable<? super T>> void sort(List<T> list);
sort方法中的参数T,必须是继承自Comparable的。这里的?super T 和? extends T有什么区别
extends表示的是参数必须是fruit的子类,super表示参数必须是fruit的父类
List<? extends Fruit> flist = new ArrayList<Apple>();
下面这个错误,因为apple不是Fruit的父类
List<? super Fruit> flist = new ArrayList<Apple>();
所以上面这个sort方法中的参数A必须是实现接口Comparable<>,而且Comparable中的参数要是A的父类。然后实现compareTo方法


还可以是用Sort( List<T> list,Comparator<? super T> c)来进行排序

几种集合的比较
treeset与hashset
hashset可以防止重复的集合,可快速的寻找相符的元素
treeset不仅可以防止重复,而且是以有序的状态保存数据,treeset是根据对象的compareTo方法参数comparator来进行排序的。
treeset<T>中的类要么是implements comparable<T> ,要么加个参数comparator。 new TreeSet<Book>(bookComparator)
如果你没有想让数据保持有序的状态,treeset花费的成本比你想象的要多,因为你每次插入新项目的时候,都要花费时间找到合适的位置。
arraylist只要把项目放在最后就可以了

linkedlist和arraylist
linkedlist针对经常插入或删除中间元素设计的高效率集合(实际上还是arraylist比较实用),但是对大多数的应用程序来说,用linkedlist与arraylist差别不大,除非元素量真的很大
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: