在java中是否可以在Object list和Hashtable之间建立关系。
例如我有这段代码:
//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)
与哈希记录=&gt;相关{"1st", first}
和
list.get(1)
与哈希记录=&gt;相关{"2nd", second}
?
所以,例如稍后如果我得到list
,我可以看到它与特定的哈希记录有关?
P.S。我试过这样的方法:
List<Hashtable<Object, Hashtable<String, Object>> list = new ArrayList<>();
但后来我想,我在第一个Hashtable中的键有时可能是相同的,我的意思是例如可能存在这样的关系:
obj1 related with {"1st", first}
然后
MyClass1 obj3 = new MyClass1();
obj3 related with {"2nd", second}
那么我将为另一条记录使用相同的密钥,因此它会覆盖旧记录(并且我还覆盖了equals
和hashCode
方法,以便能够将对象用作键,但是这个问题就是因为这个原因我不能用它作为键,因为这些键会被视为相同的。)
更新
使其更清晰。 例如,我创建了两个相同的对象(相对而言)。
MyClass1 obj1 = new MyClass1("name");
MyClass1 obj2 = new MyClass1("name");
现在我需要一个对象与一个Hashtable记录相关,另一个对象与另一个Hashtable记录相关。 因此,如果我使用“obj1向我显示与你有关系的Hashtable记录”,它将返回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);
这种方法有用,但它看起来不太好看,因为我需要将list中的第一个值视为特殊值,因为它是一种Object,其余是Hashtables。
答案 0 :(得分:2)
来自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