GavaではTreeRangeMapが基本的に使用されています。
7174 ワード
Range Mapは普通のMapと同じように、キーの値を記憶して、キーによって値を取ります。Mapと違ってキーの種類はRangeでなければなりません。区間でもあります。RangeMapのGuavaにおける定義はインターフェースである:
remove方法でTreeRangeMapのキー区間1をカットします。Tree RangeMapの中のある区間が完全に削除されていない場合、この区間はカットされただけです。しかし、TreeRangeMapの中にあります。Tree RangeMapの中のある区間が完全に削除されたら、この区間と対応する値は全部削除されますか?それとも2回目の入力で表示されますか?削除と出力の試験コードを後に付けます。
public interface RangeMap<K extends Comparable, V> {
@Nullable //
V get(K var1); //
@Nullable //
Entry, V> getEntry(K var1); // , Entry Map.Entry
void put(Range var1, V var2); //
void remove(Range var1); //
... //
}
TreeRangeMapはRangeMapの実現であり、内部区間が重複しないようにして、秩序化していることを保証する。例を挙げると、public class Test {
public static void main(String[] args) {
RangeMap test = TreeRangeMap.create();
test.put(Range.closed(1, 2), "xyb");
test.put(Range.closed(10, 12), "Charlotte");
test.put(Range.closed(5, 8), "love");
for(Map.Entry, String> entry : test.asMapOfRanges().entrySet()) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
}
}
出力結果は:[1‥2] xyb
[5‥8] love
[10‥12] Charlotte
TreeRangeMapが挿入する区間とTreeRangeMapが保存している区間とが重複している場合、TreeRangeMapは以前の区間を切断し、現在の挿入区間の完全性を保持し、例えば先ほどの例の挿入区間を置き換える。test.put(Range.closed(1, 7), "xyb");
test.put(Range.closed(6, 12), "Charlotte");
test.put(Range.closed(5, 8), "love");
出力は:[1‥5) xyb
[5‥8] love
(8‥12] Charlotte
TreeRangeMapは区間をキーとしているが、get法は単一値Kをパラメータとしている。この場合、TreeRangeMapは先にK対応区間を検索して、この区間に対応する値を返します。上のコードを例にして、中に検索を入れます。test.put(Range.closed(1, 7), "xyb");
test.put(Range.closed(6, 12), "Charlotte");
test.put(Range.closed(5, 8), "love");
System.out.println(test.get(2));
この時の出力は:xyb
get Entry方法も同じ原理です。ここではもう説明しません。remove方法でTreeRangeMapのキー区間1をカットします。Tree RangeMapの中のある区間が完全に削除されていない場合、この区間はカットされただけです。しかし、TreeRangeMapの中にあります。Tree RangeMapの中のある区間が完全に削除されたら、この区間と対応する値は全部削除されますか?それとも2回目の入力で表示されますか?削除と出力の試験コードを後に付けます。
test.remove(Range.closed(1, 2));
for(Map.Entry, String> entry : test.asMapOfRanges().entrySet()) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
System.out.println("-------------------");
test.remove(Range.closedOpen(1, 5));
for(Map.Entry, String> entry : test.asMapOfRanges().entrySet()) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
出力:(2‥5) xyb
[5‥8] love
(8‥12] Charlotte
-------------------
[5‥8] love
(8‥12] Charlotte
(終わり)