【问题标题】:Collection.sort(arraylist) in a function sorting another arraylistCollection.sort(arraylist) 在对另一个数组列表进行排序的函数中
【发布时间】:2014-09-18 20:06:58
【问题描述】:

说,我在 (public class class1(String args[])) 中创建了一个数组列表

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

然后我将此数组列表传递给 (public static void main(String args[])) 中的函数

biggestvalue(list1);

这是函数例如:

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

我将它传递给一个函数,希望它只会对 list 进行排序,而不是 list1,但随后 list1 也会被排序,我不明白为什么会这样。 因此,请向我解释为什么会这样,有什么解决方案可以解决这个错误?

【问题讨论】:

  • 在任何情况下:不要对列表进行排序以获得“最大值”。这就是Collections.max(collection) 的用途!
  • @Marco13 谢谢你提供的信息,我现在离不再是一个小人物还有一步之遥:) 无论如何这只是一个例子

标签: java sorting arraylist


【解决方案1】:

当您将 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);
}

【讨论】:

    【解决方案2】:

    list1 也被排序,因为您传递了对该对象的引用。您想在排序之前复制列表,这样原始对象就不会被修改:

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

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 2021-10-31
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2018-04-02
      相关资源
      最近更新 更多