说,我在(公共类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也会被排序,我不明白为什么会这样。 因此,请向我解释为什么会这样,并且有什么解决方案可以解决这个问题?
答案 0 :(得分:3)
当您将其作为参数传递时,您只传递对List
的引用。因此,list
和list1
都指向相同的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);