Collection.sort(arraylist)在一个函数中排序另一个arraylist

时间:2014-07-27 13:51:58

标签: java sorting arraylist

说,我在(公共类class1(String args [])中创建了一个arraylist)

static List<Double> list1 = new ArrayList<Double>();

然后我把这个arraylist传递给一个函数(public static void main(String args []))

biggestvalue(list1);

这是函数,例如:

public static double biggestvalue(List<Double> list){
    Collections.sort(list);
    return list.get(list.size()-1);
}

我把它传递给一个函数,所以希望它只能排序列表而不是list1,但是list1也会被排序,我不明白为什么会这样。 因此,请向我解释为什么会这样,并且有什么解决方案可以解决这个问题?

2 个答案:

答案 0 :(得分:3)

当您将其作为参数传递时,您只传递对List的引用。因此,listlist1都指向相同的List

一个好的经验法则是不修改传递给方法的对象,所以我会在方法中复制一下:

public static double biggestvalue(List<Double> list){
    List<Double> temp = new ArrayList<>(list);
    Collections.sort(temp);
    return temp.get(temp.size()-1);
}

答案 1 :(得分:1)

list1也会被排序,因为您正在传递对该对象的引用。您希望在排序之前复制列表,因此原始对象不会被修改:

List<Double> dup = new ArrayList<>(list);
Collections.sort(dup);
return dup.get(dup.size() - 1);