• Java 数组元素倒序的三种方式


    将数组元素反转有多种实现方式,这里介绍常见的三种.

    • 直接数组元素对换
    @Test
    public void testReverseSelf() throws Exception {
        System.out.println("use ReverseSelf");
    
        String[] strings = { "ramer", "jelly", "bean", "cake" };
        System.out.println("	" + Arrays.toString(strings));
        for (int start = 0, end = strings.length - 1; start < end; start++, end--) {
            String temp = strings[end];
            strings[end] = strings[start];
            strings[start] = temp;
        }
        System.out.println("	" + Arrays.toString(strings));
    }

    • 使用ArrayList: ArrayList存入和取出的顺序是一样的,可以利用这里特性暂时存储数组元素.
    @Test
    public void testArrayList() throws Exception {
        System.out.println("use ArrayList method");
    
        String[] strings = { "ramer", "jelly", "bean", "cake" };
        System.out.println("	" + Arrays.toString(strings));
        List<String> list = new ArrayList<>(strings.length);
        for (int i = strings.length - 1; i >= 0; i--) {
            list.add(strings[i]);
        }
        strings = list.toArray(strings);
        System.out.println("	" + Arrays.toString(strings));
    }

    • 使用Collections和Arrays工具类
    @Test
    public void testCollectionsReverse() throws Exception {
        System.out.println("use Collections.reverse() method");
    
        String[] strings = { "ramer", "jelly", "bean", "cake" };
        System.out.println("	" + Arrays.toString(strings));
        // 这种方式仅针对引用类型,对于基本类型如:
        // char[] cs = {'a','b','c','g','d'};
        // 应该定义或转换成对应的引用类型: 
        // Character[] cs = {'a','b','c','g','d'};
        Collections.reverse(Arrays.asList(strings));
        System.out.println("	" + Arrays.toString(strings));
    }

    • 速度测试:
    @Test
    public void testTimeDuration() throws Exception {
        recordTime(ArrayReverse.class,"testCollectionsReverse");
        recordTime(ArrayReverse.class,"testArrayList");
        recordTime(ArrayReverse.class,"testReverseSelf");
    }
    
    private static String[] strings = new String[1000000];
    {
        for (int i = 0; i < 1000000; i++) {
            strings[i] = String.valueOf(i);
        }
    }
    /**
     * 记录操作执行总时间.
     *
     * @param <T> the generic type
     * @param clazz the clazz
     * @param methodName the method name
     */
    public <T> void recordTime(Class<T> clazz, String methodName) {
        long start = System.currentTimeMillis();
        System.out.println("start: " + start);
    
        Method[] declaredMethods = clazz.getDeclaredMethods();
        for (Method method : declaredMethods) {
            String name = method.getName();
            if (name.equals(methodName)) {
                try {
                    method.invoke(clazz.newInstance());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("end: " + end);
        System.out.println("duration: " + (end - start) + " ms");
    }

    • 测试结果:

      使用Collections和Arrays工具类: 12 ms
      使用ArrayList: 7 ms
      直接数组元素对换: 4 ms
      当数据量越来越大时,使用ArrayList的方式会变得很慢.
      直接使用数组元素对换,总是最快完成.

    • 总结: 使用Collections和Arrays工具类反转数组元素更简单,但是在原数组上操作时速度更快,并且占用最少的内存.

  • 相关阅读:
    编程的智慧(王垠)(http://www.cocoachina.com/programmer/20151125/14410.html)
    NSString用法,object-C数组以及字符串拼接和分割
    xcode自动生成代码片段
    21 RadioGroup ListFragment
    21 PagerTabStrip-PagerTitleStrip-viewPager
    21 FragmentTabHost +Fragment代码案例
    21 导航书签一些总结
    Udemy上免费的angualr2视频教程分享
    撕衣服源码
    android viewpager切换到最后一页时,跳转至其他activity
  • 原文地址:https://www.cnblogs.com/QQ846300233/p/6683843.html
Copyright © 2020-2023  润新知