杂七杂八的集合

杂七杂八的集合,第1张

杂七杂八的集合

目录
  • Comparable和Comparator的区别
    • Comparable
    • Comparator
  • Conllections

Comparable和Comparator的区别 Comparable

Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。
如果开发者有一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象需要实现Comparable接口,即重写了compareTo方法。

//Comparable.compareTo(T o)
public int compareTo(T o);

//Collections.sort()
    public static > void sort(List list) {
        list.sort(null);
    }

compareTo方法的返回值是int,有三种情况:
1、比较者大于被比较者,那么返回正整数
2、比较者等于被比较者,那么返回0
3、比较者小于被比较者,那么返回负整数

Comparator

Comparator可以认为是是一个外比较器,个人认为有两种情况可以使用实现Comparator接口的方式:

1、一个对象不支持自己和自己比较(没有实现Comparable接口),但是又想对两个对象进行比较
2、一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己想要的那种比较方式

//Collections.sort()
    public static  void sort(List list, Comparator c) {
        list.sort(c);
    }

default void sort(Comparator c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }

Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和Comparable接口一样是int,有三种情况:
1、o1大于o2,返回正整数
2、o1等于o2,返回0
3、o1小于o3,返回负整数

employees.sort((o1, o2) -> o1.getName().compareTo(o2.getName()));
Collections.sort(employees, (o1, o2) -> o1.getName().compareTo(o2.getName()));

也可以使用comparing方法

    public static > Comparator comparing(
            Function keyExtractor)
    {
        Objects.requireNonNull(keyExtractor);
        return (Comparator & Serializable)
                (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
    }

Comparator & Serializable
The returned comparator is serializable if the specified function is also serializable.
The cast ensures that the internal class used by Java to implement the lambda will implements Serializable.
如果指定的函数也是可序列化的,则返回的比较器是可序列化的。
强制转换确保 Java 用于实现 lambda 的内部类将实现 Serializable。

 Collections.sort(users, Comparator.comparing(User::getName));
Conllections

在java中专门给某些类加s,这里表示工具类,工具类是专门辅助其他类完成功能的。
*** 作List,Set,Map等集合的工具类

reverse():反转list中元素

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

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

swap():交换元素

max() 最大

min() 最小

frequency() 指定集合中元素出现的次数

copy() 复制

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5574402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存