黑马程序员技术交流社区
标题:
集合复习
[打印本页]
作者:
122125241
时间:
2015-7-8 15:09
标题:
集合复习
collection 总集合
1:List 是一个有序的集合.可重复
1.1:arrayList 没有特殊方法,底层是一个数组 查询快 增删慢,线程不安全,效率高
1.2:vector有特殊的增加和删除方法,并且集合在遍历的时候采用的是索引迭代的特殊方法,底层是一个数组,查询快 增删慢,线程安全, 但是效率低 不经常用
1.3:LinkedList底层是一个链表,查询慢 增删快 线程不安全,效率低
2:Set无序 唯一
2.1:HashSet保证唯一的方法:
String类型的可以直接判断,通过首字母的哈希值自动排列
如果是引用数据类型.可以重写对象比较的Equals方法和HashCode方法
2.1.1:LinkedHashSet 底层数据结构是一个哈希表和链表,由链表保证顺序,由哈希表保证数据的不可重复性
打印是按照添加的顺序来打印,没有了
2.2treeSet底层数据结构是一个红黑树
如何保证集合顺序 由自然排序
就是引用数据类型的类中自己写有比较的算法(Comparator接口的重写:先继承接口,然后重写接口中的方法)
set在添加的时候会判断是否相同 相同就不添加,不同就添加
集合自己排序
这个是采用集合自己判断,方法是:采用匿名内部类的方法重写接口Comparator的方法,然后在创建集合对象时放入集合中
如何保证唯一性:
看返回值的大小,如果返回值大于0就是从大到小
如果小于0 也是从大到小,
如果等于0 ,两个集合元素相同,不添加
重写Comparator的方法
先看treeSet的comparator的方法public Comparator<? super E> comparator()
返回值类型是一个Comparator的接口类型,因为直接返回的就是一个0,所以需要重写接口方法,点击进入接口查看abstract的方法只有两个
我们需要重写compare的方法即可
public int compare(T o1,T o2){
int result = o1.getAge() - o2.getAge();
if (result == 0) {
result = o1.getNameString().compareTo(o2.getNameString());
}
return result;
}
判断结果即可
集合自己排序:
new comparator<>(){
public int compare(T o1,T o2){
int result = o1.getAge() - o2.getAge();
if (result == 0) {
result = o1.getNameString().compareTo(o2.getNameString());
}
return result;
}//重写接口的方法
};
3:针对Collection集合我们到底使用谁呢?(掌握)
唯一吗?
是:Set
排序吗?
是:TreeSet
否:HashSet
如果你知道是Set,但是不知道是哪个Set,就用HashSet。
否:List
要安全吗?
是:Vector
否:ArrayList或者LinkedList
查询多:ArrayList
增删多:LinkedList
如果你知道是List,但是不知道是哪个List,就用ArrayList。
如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
如果你知道用集合,就用ArrayList。
复制代码
作者:
linqiwang
时间:
2015-7-8 15:09
还可以 有用法的介绍
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2