使用java创建列表

时间:2016-04-26 16:18:19

标签: java collections

我是java的新手。我想创建一种复杂的数组。我认为它叫做列表/集合/地图......

我的数据看起来像

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

我不喜欢创建一个Item类并将3个实例存储在一个数组中。 我找到了一个名为Map的东西,但它真的让我感到困惑,我不明白在创建数据后如何访问这些值。你能帮我解决一下这个问题吗?

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

2 个答案:

答案 0 :(得分: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 :(得分:-1)

是的,您可以选择带有课程的地图,并将其作为前任

的关键参考
Map<String,Item> map = new HashMap<>();

假设参考是唯一的。您可以存储

之类的值
map.put(item.getReference(),item);