2012-04-21 19 views
0

私はTreeMapのキーを検索しなければならない割り当てをしています(TreeMapが見つかったファイルにマップされていますが、このツリーマップは逆インデックスです)。クエリファイル内のプログラム。しかし、効率を上げるために、私の教授は、クエリワードで始まるキーを探すときにTreeMapのすべてのキーを繰り返し処理するのではなく、反復処理が必要なキーだけを反復したいと思っています。たとえば、クエリの単語がCで始まる場合は、Cで始まるキーだけを反復する必要があります。これにアプローチする方法のアイデアはありますか?TreeMapのPORTIONを反復処理する方法は?

+0

私はあなたは、JavaのTreeMapを意味すると仮定しますか? TreeMapのキーをより正確に記述できますか?また、「必要な鍵だけ」についてもっと具体的にすることができますか?しかし、一般的には、TreeMapは完全に完全にしか反復することができません。 – nplatis

+0

はい、Java TreeMapです。申し訳ありませんが、これらのキーはTreeMapのString型です。したがって、クエリワードと同じ文字で始まるキーを反復したいだけです。私の教授によると、TreeMapの部分だけを繰り返す方法がありますが、私はそれを可能な限り前提としています。これは、 – maxicecil21

答えて

1

TreeMapのsubMap()メソッドを使用して、調べたいキーの範囲のみを含むSortedMapを取得します。その後、そのSortedMapを反復処理します。

0

ここ@ottomeisterが提案するものの基本的な実装は次のとおりです。

public class Tester{ 
    public static void main(String a[]){ 
     TreeMap<CustomObject,String> tm = new TreeMap<CustomObject,String>(); 
     tm.put(new CustomObject(4,"abc"),"abc"); 
     tm.put(new CustomObject(7,"bcd"),"bcd"); 
     tm.put(new CustomObject(25,"cde"),"cde"); 
     tm.put(new CustomObject(18,"def"),"def"); 
     tm.put(new CustomObject(2,"efg"),"efg"); 
     tm.put(new CustomObject(8,"fgh"),"fgh"); 
     tm.put(new CustomObject(3,"aab"),"aab"); 
     tm.put(new CustomObject(13,"aab"),"abb"); 

     Map<CustomObject, String> sub = tm.subMap(new CustomObject(9,""),new CustomObject(20,"")); 

     for(Map.Entry<CustomObject,String> entry : sub.entrySet()) { 
      CustomObject key = entry.getKey(); 
      String value = entry.getValue(); 

      System.out.println(key.getId() + " => " + value); 
     } 
    } 
} 

class CustomObject implements Comparable<CustomObject>{ 
    private int id; 
    private String Name; 
    CustomObject(int id, String Name){ 
     this.id = id; 
     this.Name = Name; 
    } 
    @Override 
    public int compareTo(@NotNull CustomObject o) { 
     return this.id - o.id; 
    } 
    public int getId(){ 
     return this.id; 
    } 
} 

出力: 13 => ABB 18 => DEF

関連する問題