2016-04-26 80 views
1

我在java中很新。我想創建一種複雜的數組。我認爲,其所謂的列表/收集/地圖...用java創建列表

我的數據看起來像

-item 
    ref:GH987 
    size:22 
    date:1992 
-item 
    ref:98KJ 
    size:27 
    date:2000 
-item 
    ref:ZXJ212 
    size:24 
    date:1999 

我不希望創建一個項目類和3實例存儲在數組中。 我發現了一個叫做Map的東西,但它讓我很困惑,我不明白我在創建數據後如何訪問這些值。你能幫我開始這個嗎?

final Map<String, List<String>> data = new LinkedHashMap<String, List<String>>(); 
data.put("item", new LinkedList<String>()); 
+1

_I不希望創建一個項目類和3實例存儲在一個array._爲什麼不?什麼是你的代碼片段中的「-item」?這是一個關鍵嗎?如果是這樣,你如何期待'Map'使用重複鍵?它只是一種信息類型的標籤嗎? – Savior

+2

閱讀此http://beginnersbook.com/java-collections-tutorials/地圖上的部分列出了不同的類型。地圖基本上是對的集合。如果你不關心你的元素的順序,你可以使用HashMap。有關於如何存儲和獲取元素的示例 – FearlessHyena

+2

您應該創建一個項目類。之後,您可以根據需要使用列表或地圖。 – yogidilip

回答

2

值您必須創建Item類,這是OOP的整點!

很小的例子:

public class Item { 
    public String ref; 
    public int size; 
    public int date; 
    public Item(String ref, int size, int date) { 
     this.ref = ref; 
     this.size = size; 
     this.date = date; 
    } 
} 

然後,它只是一個List<Item>,您可以用myList.get(i).ref等訪問每個部分:

List<Item> l = new ArrayList<>(); 
l.add(new Item("GH987", 22, 1992)); 
l.add(new Item("98KJ", 27, 2000)); 
... 
for (Item it : l) 
    System.out.println("Ref: "+item.ref+", size: "+item.size+", date: "+item.date); 

現在,如果你真的想用一個Map來存儲每個屬性,你必須考慮將你的唯一密鑰。讓我們假設它是ref,這是一個String

Map<String,Integer> sizes = new LinkedHashMap<>(); // LinkedHashMap keeps the insert order 
Map<String,Integer> dates = new LinkedHashMap<>(); 

sizes.put("GH987", 22); 
dates.put("GH987", 1992); 
sizes.put("98KJ", 27); 
dates.put("98KJ", 2000); 

那麼就很難訪問所有成員他們不是在單個實例綁定:

String ref = "GH987"; 
System.out.println("Ref: "+ref+", size: "+sizes.get(ref)+", date: "+dates.get(ref)) 

在這裏,你應該認識到,如果一個Map尚未更新,它將返回值null,您必須自己處理一致性。創建這麼多對象只是爲了存儲單個屬性也很痛苦,在您的情況下,這些屬性是Number的子類(例如Integer),而不是本地類型,效率更高。

所以你自己幫忙,並創建你的Item類。然後你可以使用一個Map基於其鍵,它看起來像ref成員可以快速訪問特定項目:

myMap.put(ref, new Item(ref, size, date)); 
Item it = myMap.get(ref); 
... 
-1

是的,你可以用一個類選擇地圖和有它引用的一個關鍵的前

Map<String,Item> map = new HashMap<>(); 

假設基準是獨一無二的。你可以存儲像

map.put(item.getReference(),item);