java将数组元素倒置(反转)的方法?我只想到了5种,有其他方式欢迎补充
生活随笔
收集整理的這篇文章主要介紹了
java将数组元素倒置(反转)的方法?我只想到了5种,有其他方式欢迎补充
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 題目
- 算法實(shí)現(xiàn)
- 方法一
- 方法二
- 方法三
- 方法四
- 方法五
- 代碼以及效率測(cè)試
- 打印結(jié)果
題目
將字符串?dāng)?shù)組[“1”, “2”, “3”, “4”, “5”, “6”]倒置,反轉(zhuǎn)后的新數(shù)組為[“6”,“5”,“4”,“3”,“2”,“1”]。
算法實(shí)現(xiàn)
方法一
使用java中l(wèi)ist的倒置函數(shù),具體的實(shí)現(xiàn)如下:
/*** 使用Collections.reverse來倒置數(shù)組** @param strArray 原來的字符串?dāng)?shù)組* @return*/public static String[] reverseArray1(String[] strArray) {//定一個(gè)新的數(shù)組String[] newArray = new String[strArray.length];List<String> list = new ArrayList<>();Collections.addAll(list, strArray);Collections.reverse(list);list.toArray(newArray);return newArray;}方法二
先生成一個(gè)新的數(shù)組,然后將元素倒置放入新的數(shù)組,具體算法如下:
/*** 倒置字符串?dāng)?shù)組** @param strArray* @return*/public static String[] reverseArray2(String[] strArray) {int len = strArray.length;//定義一個(gè)新的數(shù)組String[] newArray = new String[len];for (int i = 0; i < len; i++) {newArray[len - 1 - i] = strArray[i];}return newArray;}方法三
先生成一個(gè)新的數(shù)組,然后將元素倒置放入新的數(shù)組,取數(shù)組中間位置,只遍歷一半就可以完成賦值,具體代碼如下:
/*** 倒置字符串?dāng)?shù)組優(yōu)化** @param strArray* @return*/public static String[] reverseArray3(String[] strArray) {int len = strArray.length;int mid = len/2;//定義一個(gè)新的數(shù)組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;}方法四
先生成一個(gè)新的數(shù)組,然后將元素倒置放入新的數(shù)組,取數(shù)組中間位置,只遍歷一半就可以完成賦值,在方法三的基礎(chǔ)上將除法修改成移位運(yùn)算,具體代碼如下:
/*** 倒置字符串?dāng)?shù)組優(yōu)化,將除法替換成移位操作** @param strArray* @return*/public static String[] reverseArray4(String[] strArray) {int len = strArray.length;int mid = len >> 1;//定義一個(gè)新的數(shù)組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;}方法五
使用用鏈表的方式,先把數(shù)組轉(zhuǎn)換成用鏈表,然后倒序取值賦值給新數(shù)組,這個(gè)只是一種思路,具體代碼如下:
/*** 可以使用鏈表倒置的方式** @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;}代碼以及效率測(cè)試
/*** 打印數(shù)組** @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("原來的數(shù)組為:");printArray(a);System.out.println("使用reverseArray1倒置后的數(shù)組為:");printArray(reverseArray1(a));System.out.println("使用reverseArray2倒置后的數(shù)組為:");printArray(reverseArray2(a));System.out.println("使用reverseArray3倒置后的數(shù)組為:");printArray(reverseArray3(a));System.out.println("使用reverseArray4倒置后的數(shù)組為:");printArray(reverseArray4(a));System.out.println("使用reverseArray5倒置后的數(shù)組為:");printArray(reverseArray5(a));System.out.println("-----下面針對(duì)耗時(shí)情況進(jìn)行測(cè)試-----");int loopTimes = 1000000;long startTime1 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray1(a);}System.out.println(loopTimes + "次循環(huán),reverseArray1耗時(shí):" + (System.currentTimeMillis() - startTime1) + "ms");long startTime2 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray2(a);}System.out.println(loopTimes + "次循環(huán),reverseArray2耗時(shí):" + (System.currentTimeMillis() - startTime2) + "ms");long startTime3 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray3(a);}System.out.println(loopTimes + "次循環(huán),reverseArray3耗時(shí):" + (System.currentTimeMillis() - startTime3) + "ms");long startTime4 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray4(a);}System.out.println(loopTimes + "次循環(huán),reverseArray4耗時(shí):" + (System.currentTimeMillis() - startTime4) + "ms");long startTime5 = System.currentTimeMillis();for (int i = 0; i < loopTimes; i++) {reverseArray5(a);}System.out.println(loopTimes + "次循環(huán),reverseArray5耗時(shí):" + (System.currentTimeMillis() - startTime5) + "ms");}打印結(jié)果
原來的數(shù)組為: 1 2 3 4 5 6 使用reverseArray1倒置后的數(shù)組為: 6 5 4 3 2 1 使用reverseArray2倒置后的數(shù)組為: 6 5 4 3 2 1 使用reverseArray3倒置后的數(shù)組為: 6 5 4 3 2 1 使用reverseArray4倒置后的數(shù)組為: 6 5 4 3 2 1 使用reverseArray5倒置后的數(shù)組為: 6 5 4 3 2 1 -----下面針對(duì)耗時(shí)情況進(jìn)行測(cè)試----- 1000000次循環(huán),reverseArray1耗時(shí):526ms 1000000次循環(huán),reverseArray2耗時(shí):314ms 1000000次循環(huán),reverseArray3耗時(shí):194ms 1000000次循環(huán),reverseArray4耗時(shí):125ms 1000000次循環(huán),reverseArray5耗時(shí):217ms 與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的java将数组元素倒置(反转)的方法?我只想到了5种,有其他方式欢迎补充的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java面向对象三大特性:封装、继承、多
- 下一篇: Json数组列表中的数据分组排序、组内排