- Java code
package com.yaxing.suanfa;public class ArrayDemo { /** * 改变了数组 * */ public static int[] reverseArray(int[] a){ int temp; for(int i=0;i<a.length/2;i++){ temp = a[i]; a[i] = a[a.length-1-i]; a[a.length-1-i] = temp; } return a; } public static char[] reverseArray(char[] a){ char temp; for(int i=0;i<a.length/2;i++){ temp = a[i]; a[i] = a[a.length-1-i]; a[a.length-1-i] = temp; } return a; } /** * 使用泛型 * */ public Object[] reverseArray1(Object[] a){ Object temp; for(int i=0;i<a.length/2;i++){ temp = a[i]; a[i] = a[a.length-1-i]; a[a.length-1-i] = temp; } return a; } /** * 逆序输出,不逆转数组 * */ public static int[] reverseArrayPrint(int[] a){ for(int i=0;i<a.length;i++){ if(i==a[a.length-1]){ System.out.print(a[a.length-1-i]+" "); }else{ System.out.print(a[a.length-1-i]+"、"); } } return a; } /** * @param args */ public static void main(String[] args) { int a[] = new int[100]; for(int i=0;i<a.length;i++){ a[i]=i; } System.out.println("原始数组:"); for(int i:a){ if(i==a[a.length-1]){ System.out.print(i+" "); }else{ System.out.print(i+"、"); } } System.out.println(); int b[] = ArrayDemo.reverseArray(a); System.out.println("逆转后数组:"); for(int i:b){ if(i==b[b.length-1]){ System.out.print(i+" "); }else{ System.out.print(i+"、"); } } System.out.println(); System.out.println("只逆序打印数组"); ArrayDemo.reverseArrayPrint(a); String cc = "abcdefg"; char c[] = cc.toCharArray();; ArrayDemo.reverseArray(c); System.out.println(); System.out.println("逆序字符串"); for(char i:c){ if(i==c[c.length-1]){ System.out.print(i+" "); }else{ System.out.print(i+"、"); } } }}
思路就是:第一个跟最后一个换,第二个跟倒数第二个换。。。依次类推。
但是,当数组非常大的时候,
就会报如下异常:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
另外,我想把这个改成泛型的,该怎么改呢,就是不管我下面定义的是什么类型的数组,上面都可以处理,
而不用重载好多个reverseArray()方法啊。
------解决方案--------------------------------------------------------
分成多个数组来逆转,况且这个是否OutOfMemoryError跟你的JVM设置有关的,如果数组过大可能会直接进入老年代,这个时候如果你的老年代大小不够,那肯定要报内存溢出的。
至于泛型的话,建议你看看ArrayList的实现嘛,你应该能从中学到一些你想要的东西
------解决方案--------------------------------------------------------
OutOfMemoryError 这个是内存溢出 和你数组没关系的,设置一下就可以。
------解决方案--------------------------------------------------------
能用sun的api尽量别自己写方法。
java.util
类 Collections
reverse
public static void reverse(List<?> list)反转指定列表中元素的顺序。
此方法以线性时间运行。
参数:
list - 元素要被反转的列表。
抛出:
UnsupportedOperationException - 如果指定列表或其列表迭代器不支持 set 操作。