2016-07-20 1 views
0
public NavigableMap<K,V> subMap(K fromKey, 
         boolean fromInclusive, 
         K toKey, 
         boolean toInclusive) 

インターフェースの記述:NavigableMapのがfromKey〜toKeyのキー範囲を持つマップ の部分のビューを返し。 fromKeyとtoKeyが 等しい場合、fromInclusiveとtoInclusive の両方がtrueでない限り、返されるマップは空です。返されたマップはこのマップによってサポートされているため、返されたマップの の変更はこのマップに反映され、その逆もあります。 返されたマップは、このマップ がサポートするすべてのオプションのマップ操作をサポートしています。TreeMap:NavigableMap <K,V> subMap()、新しいマップオブジェクトを作成しますか?

この関数は新しいマップオブジェクトを作成しますか?戻り値オブジェクトには何が格納されていますか?

+1

新しいオブジェクトが返されない可能性がある場合は、返されるオブジェクトはどこから来ると思いますか? –

答えて

4

この関数は新しいマップオブジェクトを作成しますか?

ただし、このMapオブジェクトには、キーと値を保持するマップ内のノードの新しいコピーがありません。基礎となる地図を変更すると、この地図を変更することができます。

1

はい新しいマップインスタンスを作成しますが、新しいマップのオブジェクトは古いマップのオブジェクトの参照を持ちます。 したがって、オブジェクトが同じであるため、2つのマップに表示されるオブジェクトのすべての変更が2つのマップで表示されます。

新しいインスタンスマップであっても、注意してください。古典的なフル機能のMapインスタンスではありません。新しい要素を追加することはできません。サブマップの範囲内の要素を置換または削除するだけです。

編集

が返されるマップは、その範囲外のキーが挿入されようとすると、IllegalArgumentExceptionをスローします、またはそのエンドポイントの範囲外のいずれかのサブマップを構築します。 JDK 1.6のパッケージ静的クラスNavigableSubMapで例えば

public final V put(K key, V value) { 
      if (!inRange(key)) 
       throw new IllegalArgumentException("key out of range"); 
      return m.put(key, value); 
} 


public final V remove(Object key) { 
     return !inRange(key) ? null : m.remove(key); 
} 

それは検討すると(例えば、あまりにもサブリスト)一般的にはサブコレクションとしてのsubMapを使うようにするとよいでしょうとして元の地図の表示範囲が制限されています。

+0

新しい要素を追加できます。 – daolincheng

+0

@ daolincheng まだ存在している範囲内です。私は自分の答えを更新しました。要素を置き換えることができます。 – davidxxx

関連する問題