java将数组元素倒置(反转)的方法?我只想到了5种,有其他方式欢迎补充
生活随笔
收集整理的這篇文章主要介紹了
java将数组元素倒置(反转)的方法?我只想到了5种,有其他方式欢迎补充
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目
- 算法實現
- 方法一
- 方法二
- 方法三
- 方法四
- 方法五
- 代碼以及效率測試
- 打印結果
題目
將字符串數組[“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 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java将数组元素倒置(反转)的方法?我只想到了5种,有其他方式欢迎补充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java面向对象三大特性:封装、继承、多
- 下一篇: Json数组列表中的数据分组排序、组内排