Java六十二: Java 集合 - - Collections工具类

三、Collections工具类
  • 功能
    • 一个操作Set、List和Map等集合的工具类
    • 提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象不可变、对集合对象实现同步控制等方法
  1. 排序方法(List接口)
    • Set接口及Map接口中的元素是无序的,所以不涉及排序

      在这里插入图片描述

    • 代码示例

      @Test
          public void test1() {
              ArrayList<String> list = new ArrayList<>();
              list.add("123");
              list.add("AA");
              list.add("DD");
              list.add("CC");
              list.add("XX");
              list.add("FF");
              // list集合中元素的原本排序:[123, AA, DD, CC, XX, FF]
              System.out.println(list);
              // 反转排序
              Collections.reverse(list);
              // 反转后:[FF, XX, CC, DD, AA, 123]
              System.out.println(list);
              // 随机排序
              Collections.shuffle(list);
              // 输出结果:[123, FF, DD, AA, CC, XX]
              System.out.println(list);
              // 升序
              Collections.sort(list);
              // 升序后:[123, AA, CC, DD, FF, XX]
              System.out.println(list);
              // 指定位置调换
              Collections.swap(list,1,3);
              // [123, DD, CC, AA, FF, XX]
              System.out.println(list);
          }
      
  2. 替代方法

    在这里插入图片描述

    • 代码示例

       @Test
          public void test2(){
              ArrayList<Integer> list1 = new ArrayList<>();
              Integer i;
              list1.add(123);
              list1.add(456);
              list1.add(789);
              list1.add(32);
              list1.add(43);
              list1.add(43);
              list1.add(43);
              list1.add(3456);
              // list1集合的原本排序 [123, 456, 789, 32, 43, 43, 43, 3456]
              System.out.println(list1);
      
              // 获取最大值
              i = Collections.max(list1);
              // 3456
              System.out.println(i);
              // 获取最小值
              i = Collections.min(list1);
              // 32
              System.out.println(i);
              // 获取指定数据的出现次数
              i = Collections.frequency(list1,43);
              // 3
              System.out.println(i);
              // 替换数据
              Collections.replaceAll(list1, 43, 99);
              // 替换后:[123, 456, 789, 32, 99, 99, 99, 3456]
              System.out.println(list1);
              // 新造集合,并复制原有集合(新造集合的长度必须和原有集合一致)
              List list2 = Arrays.asList(new Object[list1.size()]);
              Collections.copy(list2,list1);
              // 拷贝结果与原集合一样 [123, 456, 789, 32, 99, 99, 99, 3456]
              System.out.println(list2);
      
          }
      
  3. 同步控制

    Collections类中提供了多个synchronizedXxx( ) 方法,该方法可将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。

    @Test
        public void test3() {
            // Arraylist1是线程不安全的,同样对象list也是线程不安全的
            ArrayList<String> list = new ArrayList<>();
            // 把list放入synchronizedList参数中,list就变成线程安全的了
            List list1 = Collections.synchronizedList (list);        
        }
    	// synchronizedList的源码
    	public static <T> List<T> synchronizedList(List<T> list) {
            return (list instanceof RandomAccess ?
                    new SynchronizedRandomAccessList<>(list) :
                    new SynchronizedList<>(list));
        }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值