挿入順序を維持する以外に、LinkedHashSet を使用して一意の要素のセットを格納する既存の機能があります。
LinkedHashSet に既に存在する場合、特定の要素を取得する必要があるという新しい要件があります。つまり、要素を追加しようとすると、メソッドは要素が既に存在するかどうかを確認し、既存の要素を返す必要があります。LinkedHashSet には最大 10000 個の要素が含まれる場合があります。
これを実現する現在の方法は、LinkedHashSet で反復子を使用することです。
Class CustomObject {
String id;
String name;
CustomObject (String id, String name) {
this.id = id;
this.name = name;
}
LinkedHashMap<String, LinkedHashSet<CustomObject>> parentRecord = new LinkedHashMap<String, LinkedHashSet<CustomObject>>(4);
.
.
.
public CustomObject addCustomObject (CustomObject customObject)
//Assume the following child node not to be null
Set<CustomObject> child = parentRecord.get("customObjectName");
if (child.contains(customObject)) {
Iterator<CustomObject> it = child.iterator();
while (it.hasNext()) {
CustomObject node = it.next();
if (node.getId().equals(customObject.getId())) {
return node;
}
}
}
child.add(customObject);
return customObject;
}
}
効率的な代替データ構造の方法はありますか
一意の値を保存する
追加しようとしたときに特定の要素が既に存在する場合は、その要素を返します
広告掲載順を維持する(可能な場合)
追加される customObject は既にセットに含まれているため、customObject 自体を返すことは理にかなっています。ただし、ノード内にノードを構築しているため、それはうまくいきません。返される customObject には、子ノードがある場合があります。