2016-04-26 78 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);