Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找列表中最大年龄元素的最佳方法 List List=new ArrayList(); 男子法力=新人(29);//构造函数参数为年龄,使用manA.age获得29 列表。添加(法力); Man manB=新人(23); 列表。添加(manB); Man manC=新人(42); 列表。添加(manC); Man manD=新人(38); 列表。添加(manD);_Java_Math - Fatal编程技术网

Java 查找列表中最大年龄元素的最佳方法 List List=new ArrayList(); 男子法力=新人(29);//构造函数参数为年龄,使用manA.age获得29 列表。添加(法力); Man manB=新人(23); 列表。添加(manB); Man manC=新人(42); 列表。添加(manC); Man manD=新人(38); 列表。添加(manD);

Java 查找列表中最大年龄元素的最佳方法 List List=new ArrayList(); 男子法力=新人(29);//构造函数参数为年龄,使用manA.age获得29 列表。添加(法力); Man manB=新人(23); 列表。添加(manB); Man manC=新人(42); 列表。添加(manC); Man manD=新人(38); 列表。添加(manD);,java,math,Java,Math,我想在列表中获取最大年龄元素manC 做这件事最好(最快)的方法是什么?无论怎样,你都必须在O(N)时间内完成,除非你使用的不是列表 List<Man> list=new ArrayList<Man>(); Man manA = new Man(29); // constructor parameter is age, use manA.age to get 29 list.add(manA); Man manB = new Man(23); list.add(man

我想在
列表中获取最大年龄元素
manC


做这件事最好(最快)的方法是什么?

无论怎样,你都必须在O(N)时间内完成,除非你使用的不是列表

List<Man> list=new ArrayList<Man>();

Man manA = new Man(29);  // constructor parameter is age, use manA.age to get 29
list.add(manA);
Man manB = new Man(23);
list.add(manB);
Man manC = new Man(42);
list.add(manC);
Man manD = new Man(38);
list.add(manD);
这将简单地浏览整个列表,记录下迄今为止遇到的年龄最大的男人。循环完成后,maxAge将是所有循环中最老的一个

编辑:

在回应你关于Collections.max“更好”的评论时,我想我应该把这张便条写进去,这样就不会有人感到困惑了。从某种意义上讲,连接比较器是一种良好的实践,而且它是java.util的一部分,这也很好。但是,如果您查看源代码(附在下面),它会做完全相同的事情。因此,从算法上讲,它并不是更好(更快,正如您上面提到的)


publicstatic或者您可以将Man对象添加到使用红黑树的TreeSet。这意味着树在添加时保持顺序。是O(log(N))。

我找到了一个方法
Collections.max(Collection coll,Comparator comp)
,我想这是better@Zenofo,您的方法将要求您提供一个比较器。您也可以使用Collections.Max(Collection coll),但必须实现Comparable。如果要多次查找最大值、最小值或对人的集合进行排序,建议实现Compariable,这样您就可以利用集合来为自己进行排序。@Zenofo您要求的是最快的,而不是最可读的。不过,它们都是最糟糕的情况。使用Collections.max可能在风格上更好,但仍然需要O(N)时间。没有一个事实是,为了确定最老的人,你必须考虑每个人的年龄。如果<代码>列表是空的,那么<代码> Max年龄>代码>将指向伪代码<代码>新的人(0)< /代码>。你必须使用一个列表吗?为什么不使用一个有序集合?什么时候速度对你很重要?添加它们?还是询问?+1。如果经常使用检索max/min,我还建议使用有序集合(例如TreeSet),最好的解决方案是最大堆,不是吗?O(1)使用树集,然后以编写简单比较器为代价,可以调用last()表示最高年龄,first()表示最低年龄,以及其他可能有用的方法。
Man maxAge = new Man(0);
for(Man man : list) {
  if(man.age > maxAge.age) {
    maxAge = man;
  }
}
public static <T extends Object & Comparable<? super T>> T max(
  Collection<? extends T> collection) {
  Iterator<? extends T> it = collection.iterator();
  T max = it.next();
  while (it.hasNext()) {
    T next = it.next();
    if (max.compareTo(next) < 0) {
      max = next;
    }
  }
  return max;
}
Man maxAge = null;
for (Man man: list)
{
    if (maxAge==null || man.getAge() > maxAge.getAge())
        maxAge = man;
}