比较器获取链接列表中的最大值,并从比较

时间:2016-01-04 00:56:17

标签: java

我试图从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));

   }

}

2 个答案:

答案 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。