Java 数组元素倒序的三种方式(小结)

网友投稿 291 2022-12-26


Java 数组元素倒序的三种方式(小结)

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

直接数组元素对换

@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存入和取出的顺序是一http://样的,可以利用这里特性暂时存储数组元素.

@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 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 void recordTime(Class clazz, String methodName) {

long start = System.currentTimeMillis();

System.out.println("start: " + start);

Method[] declaredMethods = clazz.getDeclaredMethohttp://ds();

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工具类反转数组元素更简单,但是在原数组上操作时速度更快,并且占用最少的内存.


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在线文件接口测试工具(在线测试接口网站)
下一篇:Java实现数组翻转的实现代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~