java中Collections常用方法总结(包括sort,copy,reverse等)

2023-05-16

1、sort(Collection)方法的使用(含义:对集合进行排序)。

例:对已知集合c进行排序
              public class Practice {
                      public static void main(String[] args){
                                   List c = new ArrayList();
                                c.add("l");
                                c.add("o");
                               c.add("v");
                                c.add("e");
                              System.out.println(c);
                                Collections.sort(c);
                                System.out.println(c);
                        }
              }
        运行结果为:[l, o, v, e]
                  [e, l, o, v]  

2.reverse()方法的使用(含义:反转集合中元素的顺序)。

 
public class Practice {
                    public static void main(String[] args){
                             
List list = Arrays.asList("one two three four five six siven".split(""));//无空格
          
System.out.println(list);
       
List list = Arrays.asList("one two three four five six siven".split("  "));//两个空格
 
System.out.println(list);
      List list = Arrays.asList("one two three four five six siven".split(" "));//一个空格
                            System.out.println(list);
                            Collections.reverse(list);
                           System.out.println(list);
                    }
          }

   运行结果为:
[o, n, e,  , t, w, o,  , t, h, r, e, e,  , f, o, u, r,  , f, i, v, e,  , s, i, x,  , s, i, v, e, n]                  
 [one two three four five six siven]
 [one, two, three, four, five, six, siven]
 [siven, six, five, four, three, two, one]

3.shuffle(Collection)方法的使用(含义:对集合进行随机排序)。

shuffle(Collection)的简单示例
           public class Practice {
                     public static void main(String[] args){
                                  List c = new ArrayList();
                             c.add("l");
                              c.add("o");
                              c.add("v");
                             c.add("e");
                                 System.out.println(c);
                               Collections.shuffle(c);
                             System.out.println(c);
                              Collections.shuffle(c);
                               System.out.println(c);
                        }
             }
            运行结果为:[l, o, v, e]
                              [l, v, e, o]
                              [o, v, e, l]

4.fill(List list,Object o)方法的使用(含义:用对象o替换集合list中的所有元素)

public class Practice {
                 public static void main(String[] args){
                            List m = Arrays.asList("one two three four five six siven".split(" "));
                         System.out.println(m);
                          Collections.fill(m, "青鸟52T25小龙");
                         System.out.println(m);
                  }
       }
     运行结果为:
                       [one, two, three, four, five, six, siven]
                       [青鸟52T25小龙, 青鸟52T25小龙, 青鸟52T25小龙, 青鸟52T25小龙, 青鸟52T25小龙, 青鸟52T25小龙, 青鸟52T25小龙]

5.copy(List m,List n)方法的使用(含义:将集合n中的元素全部复制到m中,并且覆盖相应索引的元素)。

 public class Practice {
                    public static void main(String[] args){
                            List m = Arrays.asList("one two three four five six siven".split(" "));
                            System.out.println(m);
                             List n = Arrays.asList("我 是 复制过来的哈".split(" "));
                             System.out.println(n);
                             Collections.copy(m,n);
                                System.out.println(m);
                      }
             }
   运行结果为:[one, two, three, four, five, six, siven]
                         [我, 是, 复制过来的哈]
                        [我, 是, 复制过来的哈, four, five, six, siven]

6.min(Collection),min(Collection,Comparator)方法的使用(前者采用Collection内含自然比较法,后者采用Comparator进行比较)。

public static void main(String[] args){
        List c = new ArrayList();
     c.add("l");
     c.add("o");
    c.add("v");
     c.add("e");
   System.out.println(c);
     System.out.println(Collections.min(c));
}
运行结果:[l, o, v, e]
                e

7.max(Collection),max(Collection,Comparator)方法的使用(前者采用Collection内含自然比较法,后者采用Comparator进行比较)。

public static void main(String[] args){
        List c = new ArrayList();
     c.add("l");
     c.add("o");
    c.add("v");
     c.add("e");
   System.out.println(c);
     System.out.println(Collections.max(c));
}
运行结果:[l, o, v, e]
                v

8.indexOfSubList(List list,List subList)方法的使用(含义:查找subList在list中首次出现位置的索引)。

public static void main(String[] args){
        ArrayList<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 6, 6, 7, 3));
        ArrayList<Integer> targetList = new ArrayList<>(Arrays.asList(6));
        System.out.println(Collections.indexOfSubList(intList, targetList));
}
运行结果:5

9.lastIndexOfSubList(List source,List target)方法的使用与上例方法的使用相同

public static void main(String[] args){
        ArrayList<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 6, 6, 7, 3));
        ArrayList<Integer> targetList = new ArrayList<>(Arrays.asList(6));
        System.out.println(Collections.lastIndexOfSubList(intList, targetList));
}
运行结果:7

10.rotate(List list,int m)方法的使用(含义:集合中的元素向后移m个位置,在后面被遮盖的元素循环到前面来)。移动列表中的元素,负数向左移动,正数向右移动

public static void main(String[] args){
        ArrayList<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        System.out.println(intList);
        Collections.rotate(intList, 1);
        System.out.println(intList);
}
运行结果:[1, 2, 3, 4, 5]
             [5, 1, 2, 3, 4]
public static void main(String[] args){
        ArrayList<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        System.out.println(intList);
        Collections.rotate(intList, -1);
        System.out.println(intList);
}
运行结果:[1, 2, 3, 4, 5]
               [2, 3, 4, 5, 1]
11.swap(List list,int i,int j)方法的使用(含义:交换集合中指定元素索引的位置)
  public class Practice {
                      public static void main(String[] args){
                             List m = Arrays.asList("one two three four five six siven".split(" "));
                              System.out.println(m);
                              Collections.swap(m, 2, 3);
                              System.out.println(m);
                        }
             }
    运行结果为:
           [one, two, three, four, five, six, siven]
           [one, two, four, three, five, six, siven]

12.binarySearch(Collection,Object)方法的使用(含义:查找指定集合中的元素,返回所查找元素的索引)。

binarySearch(Collection,Object)的简单示例
         public class Practice {
                  public static void main(String[] args){
                              List c = new ArrayList();
                          c.add("l");
                          c.add("o");
                           c.add("v");
                           c.add("e");
                          System.out.println(c);
                           int m = Collections.binarySearch(c, "o");
                             System.out.println(m);
                    }
          }
    运行结果为:[l, o, v, e]
                          1

13.replaceAll(List list,Object old,Object new)方法的使用(含义:替换批定元素为某元素,若要替换的值存在刚返回true,反之返回false)。

public class Practice {
                   public static void main(String[] args){
                          List list = Arrays.asList("one two three four five six siven".split(" "));
                             System.out.println(list);
                          List subList = Arrays.asList("three four five six".split(" "));
                           System.out.println(Collections.replaceAll(list, "siven", "siven eight"));
                           System.out.println(list);
                    }
          }
    运行结果为:
                     [one, two, three, four, five, six, siven]
                      true
                      [one, two, three, four, five, six, siven eight]

总结

1. 排序操作(主要针对List接口相关)

reverse(List list):反转指定List集合中元素的顺序
shuffle(List list):对List中的元素进行随机排序(洗牌)
sort(List list):对List里的元素根据自然升序排序
sort(List list, Comparator c):自定义比较器进行排序
swap(List list, int i, int j):将指定List集合中i处元素和j出元素进行交换
rotate(List list, int distance):将所有元素向右移位指定长度,如果distance等于size那么结果不变

 public void testSort() {
        System.out.println("原始顺序:" + list);
        
        Collections.reverse(list);
        System.out.println("reverse后顺序:" + list);

        Collections.shuffle(list);
        System.out.println("shuffle后顺序:" + list);
        
        Collections.swap(list, 1, 3);
        System.out.println("swap后顺序:" + list);

        Collections.sort(list);
        System.out.println("sort后顺序:" + list);

        Collections.rotate(list, 1);
        System.out.println("rotate后顺序:" + list);
    }

输出

原始顺序:[b张三, d孙六, a李四, e钱七, c赵五]
reverse后顺序:[c赵五, e钱七, a李四, d孙六, b张三]
shuffle后顺序:[b张三, c赵五, d孙六, e钱七, a李四]
swap后顺序:[b张三, e钱七, d孙六, c赵五, a李四]
sort后顺序:[a李四, b张三, c赵五, d孙六, e钱七]
rotate后顺序:[e钱七, a李四, b张三, c赵五, d孙六]

2. 查找和替换(主要针对Collection接口相关)

binarySearch(List list, Object key):使用二分搜索法,以获得指定对象在List中的索引,前提是集合已经排序
max(Collection coll):返回最大元素
max(Collection coll, Comparator comp):根据自定义比较器,返回最大元素
min(Collection coll):返回最小元素
min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素
fill(List list, Object obj):使用指定对象填充
frequency(Collection Object o):返回指定集合中指定对象出现的次数
replaceAll(List list, Object old, Object new):替换

public void testSearch() {
        System.out.println("给定的list:" + list);
        System.out.println("max:" + Collections.max(list));
        System.out.println("min:" + Collections.min(list));
        System.out.println("frequency:" + Collections.frequency(list, "a李四"));
        Collections.replaceAll(list, "a李四", "aa李四");
        System.out.println("replaceAll之后:" + list);
        
        // 如果binarySearch的对象没有排序的话,搜索结果是不确定的
        System.out.println("binarySearch在sort之前:" + Collections.binarySearch(list, "c赵五"));
        Collections.sort(list);
        // sort之后,结果出来了
        System.out.println("binarySearch在sort之后:" + Collections.binarySearch(list, "c赵五"));

        Collections.fill(list, "A");
        System.out.println("fill:" + list);
    }

输出

给定的list:[b张三, d孙六, a李四, e钱七, c赵五]
max:e钱七
min:a李四
frequency:1
replaceAll之后:[b张三, d孙六, aa李四, e钱七, c赵五]
binarySearch在sort之前:-4
binarySearch在sort之后:2
fill:[A, A, A, A, A]

3. 同步控制

Collections工具类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而解决多线程并发访问集合时线程的安全问题。HashSet、ArrayList、HashMap都是线程不安全的,如果需要考虑同步,则使用这些方法。这些方法主要有:synchronizedSet、synchronizedSortedSet、synchronizedList、synchronizedMap、synchronizedSortedMap。

特别需要指出的是,在使用迭代方法遍历集合时需要手工同步返回的集合。

Map m = Collections.synchronizedMap(new HashMap());
      ...
  Set s = m.keySet();  // Needn't be in synchronized block
      ...
  synchronized (m) {  // Synchronizing on m, not s!
      Iterator i = s.iterator(); // Must be in synchronized block
      while (i.hasNext())
          foo(i.next());
  }

4. 设置不可变集合

Collections有三类方法可返回一个不可变集合:

emptyXxx():返回一个空的不可变的集合对象
singletonXxx():返回一个只包含指定对象的,不可变的集合对象。
unmodifiableXxx():返回指定集合对象的不可变视图

public void testUnmodifiable() {
        System.out.println("给定的list:" + list);
        List<String> unmodList = Collections.unmodifiableList(list);
        
        unmodList.add("再加个试试!"); // 抛出:java.lang.UnsupportedOperationException
        
        // 这一行不会执行了
        System.out.println("新的unmodList:" + unmodList);
    }

5. 其它

disjoint(Collection<?> c1, Collection<?> c2) - 如果两个指定 collection 中没有相同的元素,则返回 true。
addAll(Collection<? super T> c, T... a) - 一种方便的方式,将所有指定元素添加到指定 collection 中。示范: 
Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon");
Comparator<T> reverseOrder(Comparator<T> cmp) - 返回一个比较器,它强行反转指定比较器的顺序。如果指定比较器为 null,则此方法等同于 reverseOrder()(换句话说,它返回一个比较器,该比较器将强行反转实现 Comparable 接口那些对象 collection 上的自然顺序)。

public void testOther() {
        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        
        // addAll增加变长参数
        Collections.addAll(list1, "大家好", "你好","我也好");
        Collections.addAll(list2, "大家好", "a李四","我也好");
        
        // disjoint检查两个Collection是否的交集
        boolean b1 = Collections.disjoint(list, list1);
        boolean b2 = Collections.disjoint(list, list2);
        System.out.println(b1 + "\t" + b2);
        
        // 利用reverseOrder倒序
        Collections.sort(list1, Collections.reverseOrder());
        System.out.println(list1);
    }

输出

true false
[我也好, 大家好, 你好]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中Collections常用方法总结(包括sort,copy,reverse等) 的相关文章

  • 2018年度总结

    2019新的一年到了 xff0c 又是一年到收获的季节 xff0c 在去年自己见证了师哥师姐的收获 xff0c 支付宝的出了自己的消费清单 xff0c 自己给自己一份2018年度成长清单 计算机 今年开始学习java xff0c 从开始的不
  • 模糊查询

    lt select id 61 34 findByUserIdMonthAttend 34 resultMap 61 34 BaseResultMap 34 gt SELECT lt include refid 61 34 Base Col
  • 字符串连接

    StringBuilder StringBuffer String三者区别 1 运行速度 xff0c 在这方面运行速度快慢为 xff1a StringBuilder gt StringBuffer gt String String最慢的原因
  • 集合

    Java集合类存放于 java util 包中 xff0c 是一个用来存放对象的容器 集合只能存放对象 比如你存一个 int 型数据 1放入集合中 xff0c 其实它是自动转换成 Integer 类后存入的 xff0c Java中每一种基本
  • 事务

    事务必须服从ISO IEC所制定的ACID原则 ACID是原子性 xff08 atomicity xff09 一致性 xff08 consistency xff09 隔离性 xff08 isolation xff09 和持久性 xff08
  • vue select 获取value和lable

    vue select控件在选择时需要把id和name两个值都获取到 xff0c 实现方案如下 xff1a select控件代码 lt FormItem label 61 34 物资类型 xff1a 34 prop 61 34 supplyT
  • vue中render函数子组件调用父组件方法

    父组件render函数内容 return h swichbutton swichbutton为子组件 props row params row valveState props声明给子组件传递的参数 xff0c 子组件通过以下方式接收 pr
  • Couldn't find preset "es2015" relative to directory

    修改 babelrc文件内容如下 xff0c 运行后报错 Module build failed Error Couldn t find preset es2015 relative to directory 34 presets 34 3
  • vue运行同时被localhost和ip地址访问

    在index js文件下修改host内容 xff0c localhost改为本机ip host 39 192 168 X XX 39 can be overwritten by process env HOST port 8080 can
  • AppData\Roaming\npm-cache\_logs

    npm install报如下错误 xff1a npm ERR code ELIFECYCLE npm ERR errno 1 npm ERR bhwechat 64 1 0 0 dev 96 webpack dev server inlin
  • 你和高手的差距,就在一念之间

    我一直做软件开发和技术管理工作 xff0c 虽然在做联合创始人期间也参与2B的市场销售运营等众多事情 xff0c 但2C的电商卖货这件事从未体验过 想起小学时学的小马过河的故事 xff0c 要想知道怎么做 xff0c 不能只听别人的说法 x
  • 动态IF语句拼接sql语句

    动态IF语句拼接sql语句 lt 列表 正式 非居民 gt lt select id 61 34 listFormatNodWeller 34 resultType 61 34 com jczb binhe oa model Nodwell
  • swagger基本注解

    与使用Swagger核心注释注释模型类以提供其他元数据相同 xff0c 可以注释控制器及其方法和方法参数 64 Api描述了整个控制器 64 ApiOperation用于方法级别的描述 64 ApiParam用于方法参数 64 RestCo
  • sql语句foreach

    lt 查询 新户水表信息 gt lt select id 61 34 getWaterMeterStartByMeterCodeNew 34 parameterType 61 34 com jczb binhe oa model Water
  • groupconcat函数

    比如select group concat name MySQL中group concat函数 语法如下 xff1a group concat DISTINCT 要连接的字段 Order BY ASC DESC 排序字段 Separator
  • echart百度地图取消点击事件

    在下载的nodemodule包中修改代码 var bmap 61 bmapModel bmap 61 new BMap Map bmapRoot enableMapClick false
  • JavaEE规范

    十三个规范为 xff1a JDBC xff08 java Database Connectivity xff09 xff1a JDBC API为访问不同的数据库提供了一种统一的途径 JNDI Java Name and Directory
  • Java反射

    什么时候用 Java程序中许多对象在运行时出现两种类型 xff1a 编译时类型和运行时类型 xff0c 例如Person p 61 New Student 这时生成的p变量的编译时类型为Person xff0c 运行时类型为Student
  • css3 animation 实现帧动画

    先上代码 xff1a lt DOCTYPE html gt lt html gt lt head gt lt title gt lt title gt lt style gt ani container width 125px height
  • 从原理到实战:vue中的provide/inject让你的代码更优美

    前言 关于 vue 中的 provide inject 这一主题 xff0c 它可以被看作是一种高级的依赖注入机制 xff0c 允许跨层级组件实现状态共享 xff0c 从而提高代码的可维护性和扩展性 在这篇文章中 xff0c 我将从原理到实

随机推荐

  • Struts2框架下使用Kindeditor上传图片

    之前的项目是用Spring的模式上传Kindeditor图片到服务器 xff0c 但是现在这个项目里面只有Struts2框架所以跟Spring不一样 xff0c 以下为代码 xff1a public Object fileUpload St
  • 8大话题,解惑企业数字化

    从IT到DT xff0c 从信息化到数字化 xff0c 这个观念已经毋庸置疑 xff0c 但是 xff0c 这条路却缺少参照 xff0c 暗夜前行 xff0c 全靠摸索 关于数字化 xff0c 肯定不是上马一些OA工具 购买一些营销工具就行
  • python爬取网易云音乐

    只需要吧这个id替换掉代码中的id就可以了 span class token comment http music 163 com song media outer url id 61 为网易云的下载连接更换id即可 span span c
  • linux环境下常用的查找命令find、which、grep

    文章目录 前言find命令格式具体示例 locate命令格式具体示例 whereis命令格式具体示例 which命令格式具体示例 grep命令格式具体示例 总结 前言 查找是运维工作的很重要的一部分 xff0c 不管是文件查找 xff0c
  • 网络编程学习(9)/ FTP项目(3) ——目录切换、目录查看功能

    网络编程学习 xff08 9 xff09 FTP项目 xff08 3 xff09 目录切换 目录查看功能 调用功能函数以及对参数数量进行判断客户端 96 server 文件夹下 FTPClient py 96 状态码的变化服务端 96 li
  • [入门] 用java输出一个HelloWorld并运行

    你好 陌生人 今天是我第一次写博客 内容与知识等方面都不成熟 请见谅 如何在java里运行一个HelloWorld文本 首先 创建一个记事本 取名为HelloWorld 后缀名为java 然后打开记事本输入 public class Hel
  • 标识符与数据类型

    标识符 Java 语言中 xff0c 对各种变量 方法和类等要素命名时使用的字符序列称为标识符 Java 标识符有如下命名规则 xff1a 标识符由字母 下划线 美元符 或数字组成 标识符应以字母 下划线 美元符开头 Java 标识符大小写
  • 线程运行的几个状态

    1 创建状态 New 创建一个新的线程对象 已经有了空间和其他资源 2 就绪状态 Runnable 属于等待状态或可运行状态 若其他线程调用了该对象start 方法 从而启动线程 处于就绪状态的线程 等待cpu的使用权限执行 3 阻塞状态
  • Javaweb转发

    概念 请求转发 xff1a request getRequestDispatcher 要转发的URL地址 forward request response 是一次请求 xff0c 转发后请求对象会保存 xff0c 但是它的地址不会发生变化
  • Javaweb重定向

    概念 首先向客户浏览器发送一个http请求 当服务器接收后发送一个响应状态码302 对应一个新的浏览器地址 新的浏览器地址发现有一个302响应状态码 跳转到对应地址 可以这样理解 浏览器要访问oneServlet 可是oneServlet搬
  • 面试题总结(一)

    1 char型变量中能不能存贮一个中文汉字 为什么 char型变量是用来存储Unicode编码的字符的 xff0c unicode编码字符集中包含了汉字 xff0c 所以 xff0c char型变量中当然可以存储汉字啦 不过 xff0c 如
  • SSM整合

    什么是ssm 通常指的是spring springmvc和mabatis 1 xff09 Spring Spring 是一个开源框架 xff0c Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架 xff0c 由 Rod
  • 在这个艰难的环境下,我裸辞了

    2022年 xff0c 疫情期间 xff0c 工作了22年的我 xff0c 从软件研发管理的相关工作中 xff0c 辞职创业 xff0c 开启我的独立咨询顾问生涯 很多人不解和迷惑 xff0c 也有朋友关切的询问我的近况 xff0c 就差用
  • 反射的简要

    什么是反射 Java反射机制是在运行状态中 xff0c 对于任意一个类 xff0c 都能够知道这个类的所有属性和方法 xff0c 对于任意一个对象 xff0c 都能够调用它的任意一个方法和属性 xff0c 这种动态获取的信息以及动态调用对象
  • Lenovo system X3650 M5安装Windows Server 2008 R2简易教程

    目标 xff1a 在Lenovo System X3650上安装Windows Server 2008 R2 xff08 建议安装windows server 2012 R2 xff09 准备工具 U盘和空白光盘 xff0c DVD刻录机
  • 空间相关分析(一) 空间权重矩阵

    之前的博客分享了各行政区shp文件的制作方法 xff0c 在拿到shp文件后就可以进行空间相关分析啦 今天来介绍一下相关理论的基础 空间权重矩阵的创建 目录 定义介绍Geoda创建空间权重矩阵Arcgis创建空间权重矩阵 定义介绍 根据地理
  • 加深对RxJava线程切换的理解之ObserveOn和SubscribeOn

    这几天看到一篇些文章 xff0c 关于RxJava线程切换的 xff0c 说到RxJava的线程切换 xff0c 就一定会涉及ObserveOn和SubscribeOn两个方法 网上对于ObserveOn和SubscribeOn的调用顺序
  • 记录一次kali linux的安装以及远程桌面的配置

    1 选择图形界面安装 2 简单起见 xff0c 选择中文 xff0c 英文的同理 xff1a 3 毫无疑问选择中国 4 汉语 xff1a 5 这里我会点击取消选择手动配置网络 以上是我的网络配置 xff0c 请依据需要自己进行自己的网络配置
  • 【数据库】SQL sever常用快捷键

    我常用的 xff1a ctrl 43 e xff1a 执行 ctrl 43 k 43 c xff1a 注释 ctrl 43 k 43 u xff1a 取消注释 ctrl 43 f xff1a 快速查找 ctrl 43 h xff1a 快速替
  • java中Collections常用方法总结(包括sort,copy,reverse等)

    1 sort Collection 方法的使用 含义 xff1a 对集合进行排序 strong 例 xff1a 对已知集合c进行排序 strong public class Practice public static void main