美文网首页
Java集合Collections.rotate用法

Java集合Collections.rotate用法

作者: 牧码人zhouz | 来源:发表于2021-03-08 14:02 被阅读0次

    函数定义

    public static void rotate([List]<?> list,
                              int distance)</pre>
    

    功能描述

    按指定距离旋转列表中的元素。
    PS:个人认为应该叫循环移位比较合适。当distance>0时,向右移位;当distance<0时,向左移位。
    假如有一个列表list = ['a', 'b', 'c', 'd', 'e'],执行Collections.rotate(list, 1)和执行Collections.rotate(list, -4)的结果是一样的,都是['b', 'c', 'd', 'e', 'a']
    代码如下:

        public static void main(String[] args) {
            String s = "abcde";
            List<Character> list = strToList(s);
            List<Character> list2 = strToList(s);
            Collections.rotate(list, 1);
            System.out.println(list);
    
            Collections.rotate(list2, -4);
            System.out.println(list2);
    
        }
    
        public static List<Character> strToList(String s){
            char[] arr = s.toCharArray();
            List<Character> list = new ArrayList<>();
            for (int i = 0; i < arr.length; i++) {
                list.add(arr[i]);
            }
            return list;
        }
    

    两次运行结果如下:


    可见,右移1位和左移4位的效果是一样的。

    另外,这个方法有个比较有趣的用法,就是可以只移动子列表的元素,子列表外的其它元素保持位置不变。比如说有列表list = ['a', 'b', 'c', 'd', 'e'] , 现在只想移动子列表['b', 'c', 'd'],将b左移一位,变成[ 'c', 'd', 'b']而主列表中的ae位置不变,你可以这样用:

    public class TestCollectionsRotate2 {
        public static void main(String[] args) {
            String s = "abcde";
            List<Character> list = strToList(s);
            Collections.rotate(list.subList(1, 4), -1);
            System.out.println(list);
        }
    
        public static List<Character> strToList(String s) {
            char[] arr = s.toCharArray();
            List<Character> list = new ArrayList<>();
            for (int j = 0; j < arr.length; j++) {
                list.add(arr[j]);
            }
            return list;
        }
    }
    

    输出结果如下:


    可见在保持a,e位置不变的条件下,完成的b的位置移动。

    相关文章

      网友评论

          本文标题:Java集合Collections.rotate用法

          本文链接:https://www.haomeiwen.com/subject/roayqltx.html