0

Javaでオブジェクトリストとハッシュテーブルの間に関係を作ることは可能ですか.

たとえば、次のコードがあります。

//For list
MyClass1 obj1 = new MyClass1();
MyClass2 obj2 = new MyClass2();
List<Object> list = new ArrayList<>();
list.add(obj1);
list.add(obj2);

//For Hashtable
int first = 10;
String second = "something";
Hashtable<String, Object> hash = new ArrayList<>();
hash.put("1st", first);
hash.put("2nd", second);

では、どのようにしてそのような関係を作ることができますか:

list.get(0)ハッシュレコードに関連します =>{"1st", first}および

list.get(1)ハッシュレコード => に関連し{"2nd", second}ますか? たとえば、後で を取得した場合list、それが特定のハッシュ レコードに関連していることがわかりますか?

PS私はこのようなアプローチを試みました:

List<Hashtable<Object, Hashtable<String, Object>> list = new ArrayList<>();

しかし、最初の Hashtable のキーが同じになることもあると考えました。たとえば、次のような関係がある可能性があります。

obj1 related with {"1st", first} 

その後

MyClass1 obj3 = new MyClass1();
obj3 related with {"2nd", second}

したがって、別のレコードに同じキーがあるため、古いレコードが上書きされます(また、オブジェクトをキーとして使用できるようにするためにメソッドequalshashCodeメソッドをオーバーライドしましたが、これは問題を引き起こします。このため、私はできませんこれらのキーは同じものとして扱われるため、キーとして使用します)。

アップデート:

より明確にするために。たとえば、2 つの同じオブジェクトを作成しました (比較的言えば)。

MyClass1 obj1 = new MyClass1("name");
MyClass1 obj2 = new MyClass1("name");

ここで、1 つのオブジェクトを 1 つの Hashtable レコードに関連付け、もう 1 つのオブジェクトを別の Hashtable レコードに関連付ける必要があります。したがって、「obj1 show me Hashtable record you have Relationship」を使用すると、関連する Hashtable レコードが返されます (上記のように)。これらのオブジェクトは同じパラメーターを持っているため、マップを使用してこれらのオブジェクトを関連付ける際に問題があります (Hashtable では、これらのキーは同じキーとして扱われ、他のキーを上書きしますか?)。

私は次のようなことができると考えました:

List<List<Object>> final_list = new ArrayList<>();
List<Object> row = new ArrayList<>();
Hashtable<String, Object> myHash = new Hashtable<String, Object>

それで:

myHash.add("1", "something");
myHash.add("2", 10);
row.add(obj1);
row.add(myHash);
final_lit.add(row);

これはちょっと機能しますが、リストの最初の値を特別なものとして扱う必要があるため、見栄えがよくありません。これは一種のオブジェクトであり、残りはハッシュテーブルであるためです。

4

1 に答える 1

2

a のドキュメントからLinkedHashMap:

Map インターフェイスのハッシュ テーブルとリンク リストの実装で、反復順序が予測可能です。

したがって、次のように新しいものを作成するとMap:

Map<String, Object> myMap = new LinkedHashMap<>();

次のようにキーを順番に取得できるはずです。

Object[] keys = myMap.keySet().toArray();
Object firstItem = myMap.get(keys[0]);

具体例:

public static void main(String[] args) {
        Map<String, Object> myMap = new LinkedHashMap<>();
        myMap.put("1", "item 1");
        myMap.put("3", "item 2");
        myMap.put("4", "item 3");
        myMap.put("2", "item 4");

        Object[] keys = myMap.keySet().toArray();

        for(Object key : keys){
            System.out.println("Key: " + key + "; Value: " + myMap.get(key));
        }
    }

出力:

Key: 1; Value: item 1
Key: 3; Value: item 2
Key: 4; Value: item 3
Key: 2; Value: item 4
于 2013-11-11T16:47:16.843 に答える