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差别不大,除非元素量真的很大
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差别不大,除非元素量真的很大
相关文章推荐
- Java 集合知识汇总
- Java复习基础知识杂记(持续更新中……)
- 短实习---Java集合(基础知识)
- java集合的核心知识
- (java 必备知识之三) 浅谈java散列原理,为什么java需要散列集合?
- Github优秀java项目集合(中文版) - 涉及java所有的知识体系
- Java基础知识——集合体系回顾整理(List Set Map)
- 黑马程序员——java基础知识篇——>集合
- Github优秀java项目集合(中文版) - 涉及java所有的知识体系 -- good
- Java知识(集合框架和List)
- JAVA集合实用知识整理
- 《黑马程序员》java集合知识梳理
- Java 集合知识总结
- JAVA基础知识之Set集合
- Java基础知识 十(Map集合的概述及案例)
- Java基础知识强化之集合框架笔记33:Arrays工具类中asList()方法的使用
- Java基础知识强化之集合框架笔记34:List练习之集合的嵌套遍历
- java基础知识—java集合总结
- java中集合概念知识以及集合和数组的区别
- Java基础知识强化之集合框架笔记52:Map集合之Map集合的遍历 键找值