【问题标题】:Android - Do I need to sort a collection for min and max?Android - 我需要对集​​合进行最小和最大排序吗?
【发布时间】:2013-08-22 22:03:16
【问题描述】:

几天前我来到这里(SO)研究如何从Android中的集合中获取最小值和最大值,并找到了解决以下效果的解决方案(抱歉没有链接到实际答案我使用):

Max = (TextView)findViewById(R.id.Max);
Collections.sort(list);
Max.setText(String.format("%.2f", Collections.max(list)));

我的问题是我真的需要在提取最小值/最大值之前对列表进行排序吗?我尝试运行代码而不对列表进行排序,它似乎工作正常。我只是担心,因为我使用的答案肯定首先对列表进行了排序,所以我认为一定有原因,我只是不知道它是什么!

【问题讨论】:

  • 谢谢大家;这是一个双打列表,因此它们应该“正确”排序。

标签: android sorting collections max min


【解决方案1】:

除了@BobbyDigital's answer who corectly指出th方法迭代完整列表,我想提一下使用max函数的结果可能取决于列表元素的类型。如果您看到 doc ,它会说

根据元素的自然顺序返回给定集合的最大元素。

如果您看到Why does Collections.max() not return actual max value for a Collection of String? 问题,则此人使用了Strings 列表。在使用上面的数字提取最大值时,他没有得到最大数字,因为它返回的值是最大的 lexicographically。所以,只提他的代码:

ArrayList<String> dirNo = new ArrayList<String>();

dirNo.add("1");
dirNo.add("2");
dirNo.add("3");
dirNo.add("4");
dirNo.add("5");
dirNo.add("6");
dirNo.add("7");
dirNo.add("8");
dirNo.add("9");
dirNo.add("10");
dirNo.add("11");

System.out.println("max : " + Integer.parseInt(Collections.max(dirNo))
        + "");

上面的代码给出了9 作为答案。所以在使用时要小心。您可能希望根据您的需要将所有内容转换为Integer 等。

P.S:示例来自提到的问题,答案的灵感来自this 对同一问题的回答 NPE

【讨论】:

  • 但排序不会给出相同的结果。我理解问题是对先前的事情进行排序。
  • 你是对的。他的问题是在使用最大物质之前进行排序(你已经回答了:))。我提到这个是看到这个人试图做的事情的总体意图。既然他想从列表中获得最大值,我只是把它放在脑海中是件好事(结果可能不是他所期望的)。
【解决方案2】:

不,它不必排序。该方法遍历整个集合。
See the Java docs for the method!

【讨论】:

  • 只是在 Bobby 的回答中添加一点,您不必排序,不,但是 max 和 min 的含义取决于您的集合中的类型。请参阅特定的“max”方法,例如:docs.oracle.com/javase/6/docs/api/java/util/…(使用 natural 顺序,如果您想要其他顺序提供 Comparator [next method down])。
猜你喜欢
  • 2017-06-13
  • 2018-04-18
  • 1970-01-01
  • 2017-08-01
  • 2020-11-23
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多