JAVA之Collections集合

一、概念:

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]
    }
}    

 

posted @ 2019-05-06 17:41  意如柳  阅读(895)  评论(0编辑  收藏  举报