我必须存储来自UDP数据包的数据,例如名称,地址和端口号。我最初使用3个数组列表来做这个,但这似乎太麻烦了。 相反,我想到使用Hashmap作为键值 - 但是这意味着这些名称将包含在它们自己的哈希映射或数组列表中。
有没有一种好的,有效的方法将所有这些数据存储在一个集合/容器/数组中?
答案 0 :(得分:5)
使用属性名称,地址和端口号创建POJO。将它们全部添加到同一个集合中。
答案 1 :(得分:4)
尝试使用以下内容:
public class UdpData {
private String name;
private String address;
private int port;
public UdpData(String name, String address, int port) {
super();
this.name = name;
this.address = address;
this.port = port;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}
然后使用:
List<UdpData> AllData;
答案 2 :(得分:1)
如果您有来自数据包的信息并且它是结构化的,请使用自定义对象:MyPacket。拥有您需要的所有属性。
如果您需要从唯一键中检索该对象,请使用Map。通过示例Map。然后,您可以使用其标识密钥(用户代码或其他任何内容)保存/检索每个MyPacket。
如果你需要一个复杂的密钥,你应该使用一个自己的Pojo作为密钥:Map。然后为该Key类正确实现hashCode和equals。
如果您需要一些顺序访问,可以使用TreeMap作为节省顺序的实现。但是您的密钥应该是可比较的,或者您必须提供比较器。
如果您有一系列项目,请考虑使用列表。
希望它有所帮助!
答案 3 :(得分:0)
您可以使用List
而不是Map
。像这样:
List<Map<String,String>> container = new ArrayList<Map<String,String>>();
...
Map<String,String> currentEntry = new HashMap<String,String>();
currentEntry.put("name", name);
...
container.add(currentEntry);