我是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>());
答案 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);