2012-03-24 118 views
2

在我的應用程序中,我有一些帶有唯一鍵的小表(文件)(其中大多數有兩個或更多字段 - 組成鍵)。我想爲每個小表創建一個類,並將數據加載到java集合中。該對象將讀取文件並將數據加載到Java集合中。然後,我想通過鍵值從該集合中獲取數據,以便我可以訪問所有字段。我的問題是我應該使用哪個集合或者說哪個集合支持多個鍵?一個考試的鏈接會很好。提前致謝!哪個Java集合最適合這種情況

+0

不太清楚你的意思是多個鍵。你能提供一個例子嗎? – 2012-03-24 01:32:00

+0

例如,數據記錄包含十個字段,但前兩個字段(如Fld1和Fld2)使該記錄具有唯一性。因此,要從java集合中存儲和提取數據記錄,這兩個關鍵字段應該匹配。像查詢其中xyz.FLD1 =「AA」和xyz.FLD2 =「123」。 – Peter 2012-03-24 01:40:42

回答

2

不能完全確定你的多重鍵的意思。每個'表'你可以存儲在一個集合和一個鍵/值對獲取的類表示給我的HashMap。

+0

user181533 - 也是如此。每個表中的HashMap,其中鍵是兩個字段的組合。所以這將如下工作:在表上查詢以獲取所有行(對象)並構建查詢列表,然後構建查詢列表中的列表。然後迭代List以結束HashMap,是否正確?所以這一切都可以在構造器中完成。然後創建一個方法,該方法接受關鍵字的參數並從HasMap返回表格對象。由於我是新手,所以如果我的理解不正確,請糾正我。謝謝, – Peter 2012-03-24 04:26:44

+0

user181533我會與你的答案和偏離當然誰擁有HashMap,但希望你確認我的方法來創建和檢索HashMap是正確的。謝謝@Louis – Peter 2012-03-24 12:38:41

4

假設我正確地讀你的問題(有關於「多重鍵」有些含糊不清),你想要的是定義一個類包含多個領域,並以這樣的方式將實現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(); 
    } 
} 
+0

謝謝JIm。我想創建一個對象列表,其中整個表加載到列表中。然後創建一個以FLD1和FLD2爲參數的getter方法,並返回其中FLD1和FLD2與列表中的對象匹配的Object。只需迭代器或For循環遍歷列表。但我不確定這是否是正確的做法。 – Peter 2012-03-24 01:58:46

+0

Jim,如果我創建一個對文件運行查詢並將數據(所有對象)加載到列表中的類。該類將有一個方法,它將FLD1和FLD2作爲參數並返回匹配的實體(對象)。因此,無論何時創建該類的實例,它都會將數據加載到列表中。我一直在想這個列表,因爲我對此很熟悉。這是正確的做法還是採取另一種方法。我對Java很陌生,這就是爲什麼要確保。謝謝。 Peter @JimGarrison – Peter 2012-03-24 02:26:45

1

一個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。

+0

謝謝,將與此同時。基本上,我將通過查詢從大型機讀取我的表,建立查詢列表,然後從查詢列表中爲每個實體創建Hashtable。再次感謝! – Peter 2012-03-24 04:02:24

+0

爲什麼你可能會使用'Hashtable'而不是'HashMap'和'Iterator'?這不是Java 1.2。 – 2012-03-24 10:58:32

相關問題