在我的應用程序中,我有一些帶有唯一鍵的小表(文件)(其中大多數有兩個或更多字段 - 組成鍵)。我想爲每個小表創建一個類,並將數據加載到java集合中。該對象將讀取文件並將數據加載到Java集合中。然後,我想通過鍵值從該集合中獲取數據,以便我可以訪問所有字段。我的問題是我應該使用哪個集合或者說哪個集合支持多個鍵?一個考試的鏈接會很好。提前致謝!哪個Java集合最適合這種情況
回答
不能完全確定你的多重鍵的意思。每個'表'你可以存儲在一個集合和一個鍵/值對獲取的類表示給我的HashMap。
user181533 - 也是如此。每個表中的HashMap,其中鍵是兩個字段的組合。所以這將如下工作:在表上查詢以獲取所有行(對象)並構建查詢列表,然後構建查詢列表中的列表。然後迭代List以結束HashMap,是否正確?所以這一切都可以在構造器中完成。然後創建一個方法,該方法接受關鍵字的參數並從HasMap返回表格對象。由於我是新手,所以如果我的理解不正確,請糾正我。謝謝, – Peter 2012-03-24 04:26:44
user181533我會與你的答案和偏離當然誰擁有HashMap,但希望你確認我的方法來創建和檢索HashMap是正確的。謝謝@Louis – Peter 2012-03-24 12:38:41
假設我正確地讀你的問題(有關於「多重鍵」有些含糊不清),你想要的是定義一個類包含多個領域,並以這樣的方式將實現equals()
和hashCode()
密鑰本身對象可以用作HashMap
鍵。
這裏是一個非常簡單的實現框架(未測試,有些錯誤處理省略):
public class MyKey
{
private String part1 = null;
private Integer part2 = null;
public MyKey(String part1, int part2)
{
this.part1 = part1;
this.part2 = part2;
}
@Override
public boolean equals(Object o)
{
if (o == null || !(o instanceof MyKey)) return false;
return this.part1.equals(((MyKey)o).part1) && this.part2.equals(((MyKey)o).part2);
}
@Override
public int hashCode()
{
return this.part1.hashCode() + this.part2.hashCode();
}
}
謝謝JIm。我想創建一個對象列表,其中整個表加載到列表中。然後創建一個以FLD1和FLD2爲參數的getter方法,並返回其中FLD1和FLD2與列表中的對象匹配的Object。只需迭代器或For循環遍歷列表。但我不確定這是否是正確的做法。 – Peter 2012-03-24 01:58:46
Jim,如果我創建一個對文件運行查詢並將數據(所有對象)加載到列表中的類。該類將有一個方法,它將FLD1和FLD2作爲參數並返回匹配的實體(對象)。因此,無論何時創建該類的實例,它都會將數據加載到列表中。我一直在想這個列表,因爲我對此很熟悉。這是正確的做法還是採取另一種方法。我對Java很陌生,這就是爲什麼要確保。謝謝。 Peter @JimGarrison – Peter 2012-03-24 02:26:45
一個Hashtable可能最適合存儲每個表的內容。 Hashtable基本上允許你添加任意數量的對象,並且每個對象都有一個唯一的鍵。
我的建議是爲每個表文件執行以下操作。在我的例子,我假設你讀你的表文件到被稱爲ENTRY的目標的各行...
// Create a new Hashtable, where the contents will be a String (the unique key) and an "Entry" object for the table row of data
Hashtable<String,Entry> entriesTable = new Hashtable<String,Entry>();
for (each line in your table file){
// Generate the unique value for this row. If there are multiple columns that make up the key,
// just join them together into a single String
String key = uniqueColumn1 + uniqueColumn2 + ...;
// Create an object for your row, if you dont have one already.
Entry row = new Entry(line);
// Add the entry to the Hashtable
entriesTable.put(key,row);
}
當你想從表中獲取一行,您可以通過其獨特的價值自討苦吃...
Entry entry = entriesTable.get(uniqueColumn1 + uniqueColumn2 + ...);
如果每個對象都有唯一的密鑰,則可以根據需要添加任意數量的對象。 Hashtable支持添加和刪除值等,所以它很容易處理。
如果需要,還可以將Hashtable轉換爲數組,如果需要獲取Hashtable的全部內容,則可以獲取用於遍歷每個條目的Enumerator。
謝謝,將與此同時。基本上,我將通過查詢從大型機讀取我的表,建立查詢列表,然後從查詢列表中爲每個實體創建Hashtable。再次感謝! – Peter 2012-03-24 04:02:24
爲什麼你可能會使用'Hashtable'而不是'HashMap'和'Iterator'?這不是Java 1.2。 – 2012-03-24 10:58:32
- 1. Java - 哪種集合在性能方面最適合這種情況?
- 2. NSMutableArray或NSMutableDictionary:哪種情況最適合這種情況?
- 3. MYSQL innodb或myisam?哪一個最適合這種情況?
- 4. 哪個rpc /消息框架最適合這種情況?
- 5. 哪個進程最適合在這種情況下使用
- 6. 在這種情況下,哪種索引方式最合適?
- 7. 哪種SSO工具最適合這種情況?
- 8. 哪種設計模式最適合這種情況
- 9. 哪種算法適合情況分析?
- 10. 哪個webOS Enyo元素/組件適合這種情況?
- 11. PostgreSQL:哪種數據類型更適合這種情況?
- 12. 在這種情況下,哪種設計模式適合賬單?
- 13. 哪種設計模式適合這種情況?
- 14. 哪種方法更適合這種情況?
- 15. 哪種數據類型適合存儲這種情況?
- 16. 哪種異常最適合「你不應該在這種情況下運行這種方法」的情況?
- 17. 是否適合這種情況的PriorityQueue?
- 18. MySQL InnoDB適合這種情況嗎?
- 19. 會很適合這種情況?
- 20. 這種情況是否適合$ q?
- 21. couchdb適合這種情況嗎?
- 22. 在這種情況下應該使用哪個集合?
- 23. YAML vs GPB vs JSON vs XML,哪種情況最適合?
- 24. 哪種映射API最適合我的情況?
- 25. 以「合併」這種情況
- 26. 什麼線程安全的收集適合這種情況?
- 27. 什麼是最適合這種情況的android異常?
- 28. 這種情況下最適合的語言/技術是什麼?
- 29. 這種情況下最適合的認證技術是什麼?
- 30. 什麼是Javascript框架最適合這種情況?
不太清楚你的意思是多個鍵。你能提供一個例子嗎? – 2012-03-24 01:32:00
例如,數據記錄包含十個字段,但前兩個字段(如Fld1和Fld2)使該記錄具有唯一性。因此,要從java集合中存儲和提取數據記錄,這兩個關鍵字段應該匹配。像查詢其中xyz.FLD1 =「AA」和xyz.FLD2 =「123」。 – Peter 2012-03-24 01:40:42