查漏补缺第一天(比较器,HashSet,Collections)

1.Comparable和Comparator比较器的使用

        Comparator定制排序

        Comparable自然排序

Comparable需要在类上进行实现接口,然后实现ComparaTo方法,本对象大那么返回值为1本对象小返回值为-1.

public class ComparatorTest {
    public static void main(String[] args) {
        Product product = new Product("Al9",6000.00);
        Product product1 = new Product("Al8",6500.00);
        Product product2 = new Product("Al9",7000.00);
        ArrayList<Product> objects = new ArrayList<>();
        objects.add(product1);
        objects.add(product2);
        objects.add(product);
        Comparator<Product> objectComparator=(a,b)->{
            if(a instanceof Product&&b instanceof Product){
                return Double.compare(a.price,b.price);
            }
            throw new RuntimeException("传入的类别不对");
        };
        Collections.sort(objects,objectComparator);
    }
}

Comparator是为了解决没办法修改的类,而有的定制排序,因为Java的API改不了,然后你不用它的排序规则,或者说用别人的类,动了别人的类,其它地方要出问题。

public class ComparatorTest {
    public static void main(String[] args) {
        Product product = new Product("Al9",6000.00);
        Product product1 = new Product("Al8",6500.00);
        Product product2 = new Product("Al9",7000.00);
        ArrayList<Product> objects = new ArrayList<>();
        objects.add(product1);
        objects.add(product2);
        objects.add(product);
        Comparator<Product> objectComparator=(a,b)->{
            if(a instanceof Product&&b instanceof Product){
                return Double.compare(a.price,b.price);
            }
            throw new RuntimeException("传入的类别不对");
        };
        Collections.sort(objects,objectComparator);
    }
}

2.Set接口的一些特点

1.存储一些无序的,不可重复的数据。

对于无序和不可重复的一些理解:首先,遍历时候和插入顺序不一样。无序性不是随机性。它也会有自己的一些顺序,即为在每次遍历时的顺序一样。

2.主要的实现类 就是HashSet,TreeSet,LinkedHashSet

3.Set中的方法就是Collection中常用的方法15个(第三天复习Collection)

4.Set在开发过程中就是过滤重复数据的

5.HashSet底层是HashMap

6.LinkedHashSet遍历比较简单

7.TreeSet底层是使用红黑树的,可以按照指定属性大小顺序进行遍历,其实就是在泛型之中加上Comparable或者排序时候

                                                        HashSet降重原理

先判断hashCode是不是相同,然后再看equals,为什么还要判断一次equals?是因为可能有hash冲撞产生。重写HashCode的方法很简单就是让类中的所有属性都参与hash运算,Objects.hash(id,name...)

8.TreeSet构造器是可以传入Comparator比较器的

3.Collections,List,Set,Map的集合工具类

均为static方法

reverse(List):反转List中元素

shuffle(List):对List集合元素进行随机排序

sort(List):根据元素自然排序

sort(List,Comparator):根据定制化排序

swap(List,int,int ):将List指定位置的元素进行交换

copy(list,list)将第二个复制给第一个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值