Collections类中常用的静态方法总结+代码示例

1、int binarySearch(List<? esxtends Comparable<?supper T>>list,T key)

        使用二叉树搜索算法返回指定对象的索引,前提是列表有序。

public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(17);
        list.add(34);
        list.add(27);
        list.add(15);
        list.add(22);

        Collections.sort(list);
        System.out.println(list);//[15, 17, 22, 27, 34]
        int i = Collections.binarySearch(list, 27);
        System.out.println(i);//3
    }

2、binarySrarch(List<? extends T>list,T key, Comparator<? supper T>c)

       使用二叉树搜索算法对自定义对象的某种属性进行排序。

public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("Anna",17));
        list.add(new Student("Mike",25 ));
        list.add(new Student("Bob",21));
        list.add(new Student("Jane",15));
        list.add(new Student("Ming",19));

        Collections.sort(list, new Comparator<Student>() {//对列表按照年龄升序排序
            @Override
            public int compare(Student o1, Student o2) {
                return o1.age-o2.age;
            }
        });
        System.out.println(list);

        //查找年龄为15的索引
        int i = Collections.binarySearch(list,new Student("",15), new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.age-o2.age;
            }
        });
        
        System.out.println(list);
        System.out.println(i);//0
    }

3、copy(List<? super T>  dest,List <? extends T> src)

        将列表中的元素复制到另一个列表中。

public static void main(String[] args) {
        ArrayList list = new ArrayList();
        ArrayList list1 = new ArrayList();

        //给list1添加元素
        list1.add(5);
        list1.add("字符串类");
        list1.add('a');
        list1.add(true);

        //给list添加元素
        list.add(new Student("Anna",17));
        list.add(new Student("Mike",25 ));
        list.add(new Student("Bob",21));
        list.add(new Student("Jane",15));
        list.add(new Student("Ming",19));
        list.add(new Student("joe",90));

        Collections.copy(list,list1);//将list1中的元素添加到list集合中
        System.out.println(list);//list中的部分元素被覆盖
        System.out.println(list1);//list1保持不变

    }

4、disjoint(Collectiong<?> c1,Collection<?>  c2)

        如果两个集合中没有共同的元素则返回true。

System.out.println(Collections.disjoint(list, list1));//true

5、public static Enumeration enumeration(Collection co);

        本方法将集合上的枚举,返回一个Enumeration的实现类对象。使用Enumration中的方法来输出元素。方法:boolean hasMoreElements()  测试此枚举是否包含更多的元素。E nextElement()方法取出枚举中的下一个元素。

ArrayList list1 = new ArrayList();

        //给list1添加元素
        list1.add('a');
        list1.add('b');
        list1.add('c');
        list1.add('d');
        Enumeration ee = Collections.enumeration(list1);

        while(ee.hasMoreElements())
            System.out.println(ee.nextElement());//a,b,c,d
        

6、list (Enumeration<T>  e)  返回一个数组列表,其中包含由枚举元素组成的一个ArrayList集合。参照上面的例子。

 注这种写法会出现数组越界异常,因为nextElement()方法会将枚举集合中的枚举类型变量取出。最终成为一个空的枚举集合。正确的写法是,不要写nextElement。

Enumeration ee = Collections.enumeration(list1);

//        while (ee.hasMoreElements())
//            System.out.println(ee.nextElement());

        ArrayList list2 = Collections.list(ee);
        System.out.println(list2.get(3));

7、reverseOrder()返回一个比较器,它的效果与自然比较结果相反。

        reverseOrder(Comparator<T> cmp)将比较器的结果反转。下面看例子。

public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList();
        list.add(67);list.add(74);list.add(34);
        list.add(53);list.add(23);list.add(46);
        list.add(93);list.add(55);list.add(17);

        Comparator<Integer> oc = Collections.reverseOrder();
        int f_s = oc.compare(list.get(5),list.get(7));//比较索引位置5,7的大小
        System.out.println(f_s);//1  46<55 实现一个自然相反的排序结果

        //创建一个比较学生年龄的比较器
        Comparator<Student> cs = new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.age-o2.age;
            }
        };
        Student s1 = new Student("aa", 15);
        Student s2 = new Student("bb", 20);
        System.out.println(cs.compare(s1,s2));//5

        //用reverseOrder方法将构造器效果倒置
        Comparator<Student> sc = Collections.reverseOrder(cs);
        //检验倒置效果
        System.out.println(sc.compare(s1, s2));//-5
    }

8、rotate(List<?> list,int distance)  将集合中的元素旋转distance位

public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList();
        list.add(67);list.add(74);list.add(34);
        list.add(53);list.add(23);list.add(46);
        list.add(93);list.add(55);list.add(17);

        System.out.println(list);//[67, 74, 34, 53, 23, 46, 93, 55, 17]

        //将集合中的元素旋转1
        Collections.rotate(list,1);//所有元素后移一位,最后一位移到前面
        System.out.println(list);//[17, 67, 74, 34, 53, 23, 46, 93, 55]

        //将后移1位的元素再移动8位
        Collections.rotate(list,8);//共移动九位(list.size),恢复原样
        System.out.println(list);//[67, 74, 34, 53, 23, 46, 93, 55, 17]
    }

9、singleton(T o) 返回一个指定元素的不可变集。singletonList(T o)返回一个指定元素的不可变列表。singletonMap(K key, V value)  返回一个不可变的map集合。不可添加元素,否则会抛出异常:UnsupportedOperationException。

Set<String> singleton = Collections.singleton("单例");
        System.out.println(singleton);
        singleton.add("123");
        System.out.println(singleton);//UnsupportedOperationException

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值