我试图从LinkedList中提取最大值,但是有一个条件我希望LinkedList的第一个元素不在比较之内而不依赖于存储在第一个元素中的值。 我可以使用LinkedList的索引或通过比较排除第一个元素的任何内容。 这就是我所做的,但我不知道如何实现这个条件:
import java.util.*;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class HelloWorld{
public static void main(String args[]) {
// create a linked list
LinkedList<HashMap<Integer, Integer>> PathList = new LinkedList<HashMap<Integer, Integer>>();
Integer n = new Integer(0);
// add elements to the linked list
for(int i=1; i<4; i++){
HashMap<Integer, Integer> PMap = new HashMap<Integer, Integer>();
PMap.put(1,0);
PMap.put(2,i);
PMap.put(3,2*i);
PathList.add(n,PMap);
n++;
}
Iterator x = PathList.listIterator(0);
// print list with the iterator
while (x.hasNext()) {
HashMap<Integer, Integer> PMap = new HashMap<Integer, Integer>();
PMap = (HashMap<Integer, Integer>)x.next();
System.out.println(PMap.get(3));
}
Comparator<HashMap> cmp = new Comparator<HashMap>() {
@Override
public int compare(HashMap hm1, HashMap hm2) {
return new Integer((Integer)hm1.get(3)).compareTo(new Integer((Integer)hm2.get(3)));
}
};
System.out.println("Max value in this element " + Collections.max(PathList,cmp));
}
}
答案 0 :(得分:2)
您可以从原始列表创建子列表(它只是一个视图,它不会复制所有元素)。
所以你可以改变:
System.out.println("Max value in this element " + Collections.max(PathList,cmp));
要:
LinkedList<HashMap<Integer, Integer>> pathListWithoutFirst = PathList.subList(1, PathList.size());
System.out.println("Max value in this element " + Collections.max(pathListWithoutFirst, cmp));
答案 1 :(得分:0)
除Collections.max之外,您可以像这样自己实施 -
public int getMaxValue(LinkedList<Integer> list){
int max = Integer.MIN_VALUE;
/* We used i = 1 below to exclude first element as your needs.
But to include all elements, use i = 0 */
for(int i = 1; i < list.size(); i++){
if(list.get(i) > max){
max = list.get(i);
}
}
return max;
}
注意使用列表中的零个或一个项目调用上述方法将返回Integer.MIN_VALUE,即-2147483648。