に設定し、私は、データ構造の以下のタイプの私の知識を1として地図と私の現在のプロジェクトでのJava
Map<String, Map<String,Set<String>>, Set<subscriber>>
を必要とし、Javaがデータ構造のこの種類をサポートしていません(私が間違っている場合には親切に私を修正) 。または(「どのようにしてこのデータ型のJavaでデータ構造を実現できますか?
上記のデータ構造と操作をサポートするサードパーティのライブラリはありますか?
に設定し、私は、データ構造の以下のタイプの私の知識を1として地図と私の現在のプロジェクトでのJava
Map<String, Map<String,Set<String>>, Set<subscriber>>
を必要とし、Javaがデータ構造のこの種類をサポートしていません(私が間違っている場合には親切に私を修正) 。または(「どのようにしてこのデータ型のJavaでデータ構造を実現できますか?
上記のデータ構造と操作をサポートするサードパーティのライブラリはありますか?
あなたが本当にあなたのデータ構造のキーとして機能するようにマップをしたい場合は、私は、これはあなたが欲しいものだと思う:あなたがためにカスタムペアクラス内のequalsとhashCodeをオーバーライドしなければならないこと
static Map<String,Set<String>> makeUnmodifiable(Map<String,Set<String>> m) {
Map<String,Set<String>> map = new HashMap<String,Set<String>>();
for (Map.Entry<String,Set<String>> entry : m.entrySet()) {
map.add(entry.getKey(), Collections.unmodifiableSet(entry.getValue()));
}
return Collections.unmodifiableMap(map);
}
static class Pair {
final String first;
final Map<String,Set<String>> second;
Pair(String first, Map<String,Set<String>> second) {
this.first = first;
this.second = second != null ? makeUnmodifiable(second) : null;
}
public void equals(Object o) {
...
}
public int hashCode() {
...
}
}
Map<Pair,Set<Subscriber>> myMap;
は注意これが適切に動作するようにします。
マップはkey/value
オブジェクトです。したがって、Map<String, Map, Set>
を開始することはできません。
これはOPが言っていることです_私の知る限り、Javaはこの種のデータ構造をサポートしていません_ –
String
で地図を作ることであろう
と値CustomObject
なぜ:
Map<String, Object[]>
、その後、2の長さを作成しますあなたのMap<String,Set<String>>
とSet<subscriber>
を保持するオブジェクト配列は、それはハッキングのビットだが、それは解決
ですEDIT:私はカスタムオブジェクトのアイデアが好きです。
class Wrapper {
public Map<String,Set<String>> myMap = new HashMap<String,Set<String>>();
public Set<Subscriber> mySet = new TreeSet<Subscriber>();
}
Map <String, Wrapper> myMapOfWrappers = new HashMap<String, Wrapper>();
(ここでWrapper
クラスは単純な例である、あなたを:あなたはラッパークラスを記述し、あなたの地図でそれを使用する必要があると思いますので、
役立つ入力がありませんそこ。この目的のために一般的なものとカスタムメイドのもののペアタイプを使用しないでください。 – yshavit
Javaは、単純な「ペア」クラスを提供していません
編集の追加:私はこれを投稿したときにあなたの質問の下にコメントを追加しました。あなたはそれを答えとして受け入れても、の2つのキーを探しています。どのように問題に近づいているのか考え直すことをお勧めします。アレックスは彼の例であなたがこれをしなければならない方法を示しています。 Map
で変更可能なデータをキーとして使用すると、コンテンツが変更された場合に多くの問題が発生する可能性があります。それを防ぐためにequals()
とhashCode()
を実装することは、しばしば些細なことではありません。
ああ、あなたの知恵を共有してください。(明らかに誰かがインターネットに傷ついている) –
合意したように、マップを別のマップのキーとして使用したいという事実は非常に珍しく、問題空間を完全には理解していないか、たぶん、あなたはこれを2つのマップやそれらの線に沿ったものに戸惑うのが良いでしょう。 – Alex
このデータ構造で何をしたいかについてもう少し説明できますか?マップにはキーと値があるので、3番目のパラメータは何ですか? – Alex
Map>、セット>これは、データ構造が多値であることを意味します。最初の2つの引数はキーです。 –
Pankesh
あなたの機能要件を記述すると良いでしょう、問題はあなたがしようとしているデザインにあるように見えます –