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

  • 直接数组元素对换
@Test
public void testReverseSelf() throws Exception {System.out.println("use ReverseSelf");String[] strings = { "ramer", "jelly", "bean", "cake" };System.out.println("\t" + 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("\t" + 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("\t" + 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("\t" + 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("\t" + 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("\t" + 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工具类反转数组元素更简单,但是在原数组上操作时速度更快,并且占用最少的内存.

Java 数组元素倒序的三种方式相关推荐

  1. 转list_你知道Java数组转List的三种方式及对比吗?

    前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray ...

  2. Java 数组转 List 的三种方式及对比

    来源 | blog.csdn.net/x541211190/article/details/79597236 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的 ...

  3. Java数组转List的三种方式及对比

    前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray ...

  4. JAVA 数组的输出的三种方式

    定义一个数组: int nums[] = {1,8,6,7,3,5,4}; 第一种:利用Array类中的toString方法 调用Array.toString(a),返回一个包含数组元素的字符串,这些 ...

  5. android double转string_Java 数组转 List 的三种方式及对比

    来源:Java数组转List的三种方式及对比_五道口-CSDN博客 作者:大脑补丁 前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解 ...

  6. java数组转List的几种方式

    目录 java数组转List的几种方式 方式一:Arrays.asList(); 方式二:new ArrayList<>(Arrays.asList()) 方式三:Collections. ...

  7. Java 数组转List的四种方式

    Java 数组转List的四种方式 第一种方式(未必最佳):使用ArrayList.asList(strArray) ​ 使用Arrays工具类Arrays.asList(strArray)方式,转换 ...

  8. 元素隐藏的三种方式对比(针对移动端项目中的按钮,先隐藏且不能被点击 visibility:hidden)

    元素隐藏的三种方式对比 display:none opacity:0 visibility:hidden 项目需求 表面一个图片遮罩,鼠标hover遮罩消失,内部元素展现,其中有一个按钮在移动端是手指 ...

  9. Java中实现接口的三种方式您造吗?

    本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...

最新文章

  1. Dev-Cpp\MinGW64\x86_64-w64-mingw32\include
  2. JDK源码解析之集合篇2--Collection
  3. 五本必读的深度学习圣经书籍,入门 AI 从 深度学习 开始
  4. Oracle 联机重做日志文件(ONLINE LOG FILE)
  5. 前端学习(2460):粉丝管理
  6. Linux. C语言中else,2. if/else语句
  7. MSN Messenger去广告和其他修改方法
  8. 软件测试基础学习笔记
  9. 人工智能商用成果落地撬动AI未来
  10. VS2015导出带文件的项目模板
  11. 《Java程序员,上班那点事儿》荣登北京新华书店销售榜第2名,立贴纪念!
  12. SAP中采购申请PR与采购订单PO的关联性问题
  13. C++ 变量的生存期
  14. uni-app如何使用vant-ui
  15. 怎么用c语言算二进制位数,C语言位段的应用:统计二进制的位数
  16. 校园二手市场开题报告范文
  17. Android中的数据存储
  18. 【图像处理通道分离去除印章】
  19. Excel NORMINV函数用法
  20. 制造业产品开发中应用敏捷Scrum的思考 (下篇)

热门文章

  1. e2esoft VCam推流时推送声音
  2. java 动态链接_菜鸟提问:java 调用不了Windows动态链接库方式出错
  3. Maven 私服的上传和下载
  4. Git上传文件不能超过100M的解决办法
  5. windbg wt命令
  6. BI与ClickHouse:探索式BI的OLAP技术演进之路
  7. 8.shell 分支判断 if else
  8. python 仪表盘实现_【Python代替Excel】11:用Python做数据仪表盘
  9. 闲鱼如何保障交易链路质量
  10. 郑州机电工程学校计算机部,郑州机电工程学校2021年招生录取分数线