一面试题要求把静态数组里面的数字进行排序, 我想直接调用java提供的sort()方法, 在eclipse中调试, 提示我红色代码错误, 请问高手这是怎么回事? 数组怎么转换成ArrayList?package Test;import java.util.*;
import java.util.Collections;public class TestSort {

public static void main(String[] args) {
int[] a={1,2,0,6,12,3,123,83,32};

List list=new ArrayList();
for (int i=0;i<a.length;i++){
list.add(a[i], list);  //写成list.add(a[i])不行, eclipse自动帮忙加上的 }
Collections.sort(list);
System.out.println(list); }}

解决方案 »

  1.   

    List   list=Arrays.asList(a);
      

  2.   

    这样转换怎么还是不行的啊? 静态数组都被eclipse强制改成Object类型...
      

  3.   

    list里面存放的是对象引用,而非值
    所以要这样写:
    Integer[]   a={new Integer(2),new Integer(1)};
    List list = Arrays.asList(a);
    Collections.sort(list);
    System.out.println(list);
      

  4.   

    list.add(a[i]);  可以啊,我的eclipse没有报错,输出结果:[1]
    [1, 2]
    [0, 1, 2]
    [0, 1, 2, 6]
    [0, 1, 2, 6, 12]
    [0, 1, 2, 3, 6, 12]
    [0, 1, 2, 3, 6, 12, 123]
    [0, 1, 2, 3, 6, 12, 83, 123]
    [0, 1, 2, 3, 6, 12, 32, 83, 123]
      

  5.   

    4楼可以跑,是因为你使用的是JDK5.0以上的版本,它可以进行自动装箱,将int基本类型转化成了Integer对象。
    而楼主估计使用的是JDK1.4或一下的版本,不支持自动装箱。List的add方法使用一个Object作为参数,所以3楼是正解。建议楼主先看看Java的基本知识,再读一读JDK的api文档
      

  6.   

    那么你的目的是什么呢?要性能的化,自己写一个方法好了。Collections提供的方法有这样的要求,除非你不用,否则就得遵守人家的接口定义
      

  7.   

    另外,楼主的问题是
    “我想直接调用java提供的sort()方法,   在eclipse中调试,   提示我红色代码错误,   请问高手这是怎么回事? ”而不是怎么写一个方法高效的实现排序。iisbocai 觉得对吗?
      

  8.   

    直接用Arrays.sort(a);就OK了。
    用的着搞那么多吗?
    如果平时写程序到是无所谓,可是面试是不一样的。
    人家要的不是拐了九九八十一弯写出来的程序,而是要程序的执行效率高和内存的消耗少。
    他提出的问题上面已经有人回答了。我只是做个提醒而已。
    楼上的别激动。
      

  9.   

    list.add(Object obj);方法中的参数应该是Object类型的,将int类型先转化成Integer类型就好了,程序修改如下package Test; import java.util.*; 
    import java.util.Collections; public class TestSort {     public static void main(String[] args) { 
            int[] a={1,2,0,6,12,3,123,83,32};         List list=new ArrayList(); 
            for (int i=0;i <a.length;i++){ 
            list.add(new Integer(a[i]));    
            Collections.sort(list); 
            System.out.println(list); 
        } 
    } 输出结果为:
    [1] 
    [1, 2] 
    [0, 1, 2] 
    [0, 1, 2, 6] 
    [0, 1, 2, 6, 12] 
    [0, 1, 2, 3, 6, 12] 
    [0, 1, 2, 3, 6, 12, 123] 
    [0, 1, 2, 3,6, 12, 83, 123] 
    [0, 1, 2, 3, 6, 12, 32, 83, 123]
      

  10.   

    呵呵,我没有争吵的意思,就事论事而已。“人家要的不是拐了九九八十一弯写出来的程序,而是要程序的执行效率高和内存的消耗少。 ”iisbocai 说的不错。
      

  11.   

    谢谢大家!
    Arrays.sort()和Collections.sort()区别是什么?
    我是这样理解的: Arrays.sort()静态数组排序, Collections.sort()动态数组排序, 不知有没错?
      

  12.   

    我的jdk 是1.5的怎么情况跟他一样?、??
      

  13.   

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    public class TestSort {
    public static void main(String[] args) {
    int[]   a={1,2,0,6,12,3,123,83,32}; 
    List   list   =  Arrays.asList(a); 
    System.out.println(list); }
    }结果如下:
    [[I@f6a746]请问大虾这个为什么?(我用的MyEclipse5.5+jdk1.5)
      

  14.   

    to StrutHibernate:你的Sysoute.out.println(list) 打印的是List对象。这意味着打印的时候,回去首先默认调用List的实现的toString()方法,然后将toString()的结果打印出来。你的这个List的实现是Arrays的一个内部类,它的toString()方法返回的是你传入的数组 a 的地址。所以,最后打印出来的就是你看到的那个字符串[[I@f6a746] 了
      

  15.   

    to strutHibernate, 加层for循环遍历一下
      

  16.   

    我觉得如果是道面试题的话,考官绝对是想让你写底层的代码,如果直接调用API,那就没有考察性了
    如果确实是用API的话,我建议你是用专门针对数组的类Arrays,Collections这个类处理数组时我用的不太多,个人比较习惯于Arrays,里面也有sort方法
    List list=new ArrayList(); 
    for (int i=0;i <a.length;i++){ 
    list.add(a[i], list);  //写成list.add(a[i])不行, eclipse自动帮忙加上的  } 
    这代码有问题,建议你是用for-each完整代码如下
    public void invoke(int arr[]) {
        List list = new ArrayList();
        for(int num : arr)
             list.add(num);
        Collections.sort(list);
        // 打印看效果
        for(Object obj : list)
            System.out.print(obj + " ");
    }