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)将第二个复制给第一个