一 Collections常用功能
java.utils.Collections 是集合工具类,用来对集合进行操作。部分方法如下:
public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。
public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。
public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。
public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照
指定规则排序。
comparable接口实际上是出自java.lang包 它有一个 compareTo(Object obj) 方法用来排序
comparator接口实际上是出自 java.util 包它有一个 compare(Object obj1, Object obj2) 方法用来排序
Comparable接口示例
Collections.sort()调用的是Comparable接口中的 compareTo()方法
public class CollectionsDemo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
//原来写法
//list.add(12);
//list.add(14);
//list.add(15);
//list.add(1000);
//采用工具类 完成 往集合中添加元素
Collections.addAll(list, 5, 222, 1,2);
System.out.println(list);
//排序方法
Collections.sort(list);
System.out.println(list);
}
}
结果: [5, 222, 1, 2]
[1, 2, 5, 222]
二 Comparable接口和Comparator接口
java.lang.Comparable 接口比较死板,java.util.Comparator 接口比较灵活。
一种的示例Collections.sort(list)就是调用的java.lang.Comparable 接口(默认规则),但如果想要自己设置规则,则需要用java.util.Comparator 接口获重写Comparable接口中compareTo方法。
重写Comparable接口中compareTo方法
public class Person implements Comparable<Person> { private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Person o) {
//TODO Auto-generated method stub if (this.age > o.getAge()) {
return 1;
} else if (this.age < o.getAge()) { return -1;
}
return age;
}
}
public static void main(String[] args) {
TreeMap<Person, String> pdata = new TreeMap<Person, String>();
pdata.put(new Person("张三", 30), "zhangsan");
pdata.put(new Person("李四", 20), "lisi");
pdata.put(new Person("王五", 10), "wangwu");
pdata.put(new Person("小红", 5), "xiaohong");
//得到key的值的同时得到key所对应的值
Set<Person> keys = pdata.keySet(); for (Person key : keys) {
System.out.println(key.getAge() + "-" + key.getName());
}
}
ouput
5-小红
10-王五
20-李四
30-张三
Comparator接口示例
public class CollectionsDemo3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("cba");
list.add("aba");
list.add("sba");
list.add("nba");
//排序方法 按照第一个单词的降序
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.charAt(0) ‐ o1.charAt(0);
}
});
System.out.println(list);
}
}
LeetCode 热题56—Comparator接口方法
将二维数组以每个数组左端点升序排列
int[][] intervals=[[1,3],[2,6],[8,10],[15,18]];
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] interval1, int[] interval2) {
return interval1[0] - interval2[0];
}
});