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()方法啊。

解决方案 »

  1.   

    分成多个数组来逆转,况且这个是否OutOfMemoryError跟你的JVM设置有关的,如果数组过大可能会直接进入老年代,这个时候如果你的老年代大小不够,那肯定要报内存溢出的。
    至于泛型的话,建议你看看ArrayList的实现嘛,你应该能从中学到一些你想要的东西
      

  2.   

    OutOfMemoryError 这个是内存溢出 和你数组没关系的,设置一下就可以。
      

  3.   

    能用sun的api尽量别自己写方法。
    java.util 
    类 Collectionsreverse
    public static void reverse(List<?> list)反转指定列表中元素的顺序。
    此方法以线性时间运行。 
    参数:
    list - 元素要被反转的列表。 
    抛出: 
    UnsupportedOperationException - 如果指定列表或其列表迭代器不支持 set 操作。
      

  4.   

    一般的面试题都有这个题目,
    别人的要求就是自己写,不借助Jaba 的API