- 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。
复制代码
|
|