使用键对ArrayList / HashMap进行排序

时间:2015-02-20 22:45:09

标签: java sorting arraylist hashmap

我有一个ArrayList

    static ArrayList<term> terms = new ArrayList<term>();

和一个HashMap

    static HashMap<String,ArrayList<Integer>> inverted_index = new HashMap<String,ArrayList<Integer>>();

这是我的课程

    public class term {
int docID;
String tokenName;

public term(String tokenName, int docID)
{
    this.tokenName = tokenName;
    this.docID = docID;
}

public int getDocID() {
    return docID;
}
public String getTokenName() {
    return tokenName;
}

public String toString(){
    return tokenName + " " + docID ;
}}

我想按tokenName对其进行排序。 我这样做了

    Collections.sort(terms, new Comparator<term>(){
        public int compare(term term1, term term2){
            return term1.tokenName.compareTo(term2.tokenName);
        }
    });

现在,当我打印条款时,我确实得到了排序顺序。 现在我调用这个函数

    public static void createInvertedIndex(){
    inverted_index.clear();
    for(int i=0; i<terms.size(); i++){

        ArrayList<Integer> doc_list = new ArrayList<Integer>();

        if(!inverted_index.containsKey(terms.get(i).tokenName)){

            doc_list.add(terms.get(i).docID);
            if(i+1 < terms.size()){
                if(terms.get(i).tokenName.equals(terms.get(i+1).tokenName)){
                    while((i+1 < terms.size()) && terms.get(i).tokenName.equals(terms.get(i+1).tokenName))
                    {
                        i++;
                        doc_list.add(terms.get(i).docID);
                    }
                }
            }
            //System.out.println(terms.get(i)); ------ Get Sorted Terms here
            inverted_index.put(terms.get(i).tokenName, doc_list);
        }
    }
    System.out.println(inverted_index); // ------ Get Unsorted terms in this
}

我没有对sorted_index进行排序。 我也需要对它进行排序吗? 如果是这样,怎么做?

我希望输出按排序顺序。

1 个答案:

答案 0 :(得分:4)

inverted_indexHashMapHashMap未排序。您需要使用SortedMap,例如TreeMap