一、概念:
1、集合是接口,Collections是所有集合接口的父接口,它的子接口常用的有:Set、List、Map
2、Collections集合接口:
- 没有约束元素是否重复
- 定义了集合运算等基本行为
- 是集合的根接口
3、Set接口(对应于python中的set集合):
- 继承于Collections
- 元素不允许重复
- 元素无序排列
4、List接口(对应于python中的list列表):
- 继承于Collections
- 元素允许重复
- 元素有序排列,元素有索引号,索引号从0开始
5、Map接口(对应于python中的dict字典):
- 继承于Collections
- 元素允许重复
- key是关键字,value是集合元素
- 当key重复时,value会覆盖原来的
二、应用:
1、对集合里面的值进行排序:
使用Collections.sort();
- 泛型是什么,就按什么类型进行排序。
public class CollectionsDemo { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(23); list.add(24); list.add(-1); list.add(5); Collections.sort(list); //排序 System.out.println(list); //结果: //[-1, 5, 23, 24] List<String> list2 = new ArrayList<>(); list2.add("2"); list2.add("3"); list2.add("13"); list2.add("23"); Collections.sort(list2); System.out.println(list2); //结果: //[13, 2, 23, 3] //泛型是什么,就按什么类型进行排序。当泛型为String时,默认是按第一位的数值大小排序 } }
- 想要使用泛型时按照自己的规则进行排序,就要自己写比较器。
- 重写后,sort()方法中要传入两个变量:要排序的集合、比较器。
2、重写比较器的2种方式:
1)创建对象然后重写并实现接口里的方法:
public class CollectionsDemo { public static void main(String[] args) { List<String> list3 = new ArrayList<>(); list3.add("211"); list3.add("3"); list3.add("1133"); list3.add("23"); MyComarator mycomparator = new MyComarator(); Collections.sort(list3,mycomparator); System.out.println(list3); } } class MyComarator implements Comparator<String>{ //比较器是一个接口,需要实现接口。重写并实现接口里面的方法 @Override public int compare(String o1, String o2) { return o1.length()-o2.length();//根据字符串的长度进行比较; } } //结果: //[3, 23, 211, 1133]
2)使用匿名内部类重写比较器:
-
JAVA规范:一个.java文件中只写一个类,所以使用匿名内部类比较好
public class CollectionsDemo { public static void main(String[] args) { List<String> list3 = new ArrayList<>(); list3.add("211"); list3.add("3"); list3.add("1133"); list3.add("23"); Collections.sort(list3, new Comparator<String>() { //使用匿名内部类 @Override public int compare(String o1, String o2) { return o1.length()-o2.length(); //根据字符串的长度进行比较; } }); System.out.println(list3); //结果: //[3, 23, 211, 1133] } }