文章目录

  • 题目
  • 算法实现
    • 方法一
    • 方法二
    • 方法三
    • 方法四
    • 方法五
  • 代码以及效率测试
  • 打印结果

题目

将字符串数组[“1”, “2”, “3”, “4”, “5”, “6”]倒置,反转后的新数组为[“6”,“5”,“4”,“3”,“2”,“1”]。

算法实现

方法一

使用java中list的倒置函数,具体的实现如下:

    /*** 使用Collections.reverse来倒置数组** @param strArray 原来的字符串数组* @return*/public static String[] reverseArray1(String[] strArray) {//定一个新的数组String[] newArray = new String[strArray.length];List<String> list = new ArrayList<>();Collections.addAll(list, strArray);Collections.reverse(list);list.toArray(newArray);return newArray;}

方法二

先生成一个新的数组,然后将元素倒置放入新的数组,具体算法如下:

    /*** 倒置字符串数组** @param strArray* @return*/public static String[] reverseArray2(String[] strArray) {int len = strArray.length;//定义一个新的数组String[] newArray = new String[len];for (int i = 0; i < len; i++) {newArray[len - 1 - i] = strArray[i];}return newArray;}

方法三

先生成一个新的数组,然后将元素倒置放入新的数组,取数组中间位置,只遍历一半就可以完成赋值,具体代码如下:

    /*** 倒置字符串数组优化** @param strArray* @return*/public static String[] reverseArray3(String[] strArray) {int len = strArray.length;int mid = len/2;//定义一个新的数组String[] newArray = new String[len];for (int i = 0; i <= mid; i++) {newArray[i] = strArray[len-1 -i];newArray[len-1 - i] = strArray[i];}return newArray;}

方法四

先生成一个新的数组,然后将元素倒置放入新的数组,取数组中间位置,只遍历一半就可以完成赋值,在方法三的基础上将除法修改成移位运算,具体代码如下:

    /*** 倒置字符串数组优化,将除法替换成移位操作** @param strArray* @return*/public static String[] reverseArray4(String[] strArray) {int len = strArray.length;int mid = len >> 1;//定义一个新的数组String[] newArray = new String[len];for (int i = 0; i <= mid; i++) {newArray[i] = strArray[len - 1 - i];newArray[len - 1 - i] = strArray[i];}return newArray;}

方法五

使用用链表的方式,先把数组转换成用链表,然后倒序取值赋值给新数组,这个只是一种思路,具体代码如下:

    /*** 可以使用链表倒置的方式** @param strArray* @return*/public static String[] reverseArray5(String[] strArray) {LinkedList<String> linkedList = new LinkedList<>();Collections.addAll(linkedList, strArray);String[] newArray = new String[strArray.length];int loop = 0;while (!linkedList.isEmpty()) {newArray[loop] = linkedList.pollLast();loop++;}return newArray;}

代码以及效率测试

    /*** 打印数组** @param strArray*/public static void printArray(String[] strArray) {for (int i = 0, len = strArray.length; i < len; i++) {System.out.print(strArray[i] + " ");}System.out.println();}public static void main(String[] agrs) {String[] a = {"1", "2", "3", "4", "5", "6"};System.out.println("原来的数组为:");printArray(a);System.out.println("使用reverseArray1倒置后的数组为:");printArray(reverseArray1(a));System.out.println("使用reverseArray2倒置后的数组为:");printArray(reverseArray2(a));System.out.println("使用reverseArray3倒置后的数组为:");printArray(reverseArray3(a));System.out.println("使用reverseArray4倒置后的数组为:");printArray(reverseArray4(a));System.out.println("使用reverseArray5倒置后的数组为:");printArray(reverseArray5(a));System.out.println("-----下面针对耗时情况进行测试-----");int loopTimes = 1000000;long startTime1 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray1(a);}System.out.println(loopTimes + "次循环,reverseArray1耗时:" + (System.currentTimeMillis() - startTime1) + "ms");long startTime2 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray2(a);}System.out.println(loopTimes + "次循环,reverseArray2耗时:" + (System.currentTimeMillis() - startTime2) + "ms");long startTime3 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray3(a);}System.out.println(loopTimes + "次循环,reverseArray3耗时:" + (System.currentTimeMillis() - startTime3) + "ms");long startTime4 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray4(a);}System.out.println(loopTimes + "次循环,reverseArray4耗时:" + (System.currentTimeMillis() - startTime4) + "ms");long startTime5 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray5(a);}System.out.println(loopTimes + "次循环,reverseArray5耗时:" + (System.currentTimeMillis() - startTime5) + "ms");}

打印结果

原来的数组为:
1 2 3 4 5 6
使用reverseArray1倒置后的数组为:
6 5 4 3 2 1
使用reverseArray2倒置后的数组为:
6 5 4 3 2 1
使用reverseArray3倒置后的数组为:
6 5 4 3 2 1
使用reverseArray4倒置后的数组为:
6 5 4 3 2 1
使用reverseArray5倒置后的数组为:
6 5 4 3 2 1
-----下面针对耗时情况进行测试-----
1000000次循环,reverseArray1耗时:526ms
1000000次循环,reverseArray2耗时:314ms
1000000次循环,reverseArray3耗时:194ms
1000000次循环,reverseArray4耗时:125ms
1000000次循环,reverseArray5耗时:217ms

java将数组元素倒置(反转)的方法?我只想到了5种,有其他方式欢迎补充相关推荐

  1. java如何打印数组的值,Java打印数组元素的值

    本篇文章帮大家学习java打印数组元素的值,包含了Java打印数组元素的值使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 以下实例演示了如何通过重载 MainClass ...

  2. java怎么把把数组元素倒置_java数组元素倒置

    package dataStructure; import java.util.Arrays; import java.util.ArrayList; public class Test1 { sta ...

  3. 在Java中使用分隔符(拆分的对立面)连接数组元素的快速简便方法

    本文翻译自:A quick and easy way to join array elements with a separator (the opposite of split) in Java [ ...

  4. java如何给数组倒置_数组元素倒置-Java

    导读热词 通过两个嵌套循环,实现将数组中的元素倒置.Java实现如下: package test; import java.util.Scanner; public class test15 { /* ...

  5. Java黑皮书课后题第7章:*7.12(倒置数组)7.7节中的reverse方法通过复制到新数组实现倒置。改写方法将参数中传递的数组倒置,并返回该数组。编写一个测试程序,输入10个数字,倒置它们并显示

    7.12(倒置数组)7.7节中的reverse方法通过复制到新数组实现倒置.改写方法将参数中传递的数组倒置,并返回该数组.编写一个测试程序,输入10个数字,倒置它们并显示 题目 题目描述 破题 代码 ...

  6. JAVA 数组元素的反转

    package Code411;/*数组元素的反转本来[1,2,3,4]反转后[4,3,2,1]1.对称位置的元素交换2.对称位子需要两个索引3.int temp =a:a=b;b=temp;4.什么 ...

  7. 将数组倒置java_java数组元素倒置

    1 package dataStructure; 2 import java.util.Arrays; 3 import java.util.ArrayList; 4 public class Tes ...

  8. Java数组怎么定义?java中数组的定义及使用方法

    许多初学者不知道如何定义java中数组,下面我就为大家带来一篇java中数组的定义及使用方法.应该可以解决大部分人的需求,现在就分享给大家,也给大家做个参考. 数组:是一组相关变量的集合 数组是一组相 ...

  9. C语言二维数组元素的多种表示方法小结

    C语言二维数组元素的多种表示方法小结 昨天,一个小可爱问我,为何函数中,数组可以改变主函数中的值,比如b[i],就可以改原来数组中的值.其实b[i] 等价于 *(b + i)也是通过地址间接更改的,小 ...

最新文章

  1. linux程序获取透传参数,Linux内核中TCP SACK处理流程分析
  2. C语言ODBC方式连接DM数据库
  3. ubuntu 16.04(Windows 10双系统+grub引导)无法进入tt1~tt6(NVIDIA驱动安装相关-黑屏,login loop,分辨率)...
  4. MySQL 数据库中如何将表字段的空值全部替换成空字符串
  5. react(86)--列表项控制选中
  6. 狗窝里的小日子- 5 ...
  7. 惠普10代的服务器有哪些型号,英特尔官方科普:秒懂十代酷睿型号怎么认!
  8. 记录kylin成功启动,访问页面404问题
  9. openstack搭建
  10. OD使用教程10 - 调试篇10|解密系列
  11. ARP解决方法/工具+真假ARP防范区别方法+ARP终极解决方案
  12. Unity 使物体朝向某个方位
  13. pycharm中文版2019禁止更新的方法
  14. 在AVEVA PDMSE3D软件实现三维二维码模型
  15. android简单日记案例,android日记本实现源代码
  16. 网站建设的费用一般与功能要求是成正比的
  17. 芯驰任命程泰毅为CEO:张强和仇雨菁分别担任CMO和COO
  18. excel单元格内换行
  19. 华为大手机 m3 linux,华为平板 M3(青春版10.1英寸 全网通)手机完美获取root教程,最强root工具,亲测可用!...
  20. 一看就会的Nginx学习教程(千万别告诉其他人),java视频百度云盘

热门文章

  1. 控制ALV单元格可编辑
  2. Oracle触发器(trigger):一般用法
  3. 平台型OA=高性价比OA?
  4. SAP-检查多个关联字段输入,以及有条件地调用模块
  5. Super BOM应用步骤总结
  6. 利用BADI ME_PROCESS_PO_CUST進行PO check
  7. 永洪Desktop安装后启动提示缺少libv8_libbase.dll文件解决办法
  8. “有效私域”加速,私域SaaS服务商提前蜕变
  9. 短视频进入下半场,价值创造成赛点
  10. linux mail 密码错误,linux下mail使用故障解决