0

我必须存储来自 UDP 数据包的数据,例如名称、地址和端口号。我最初使用 3 个数组列表来执行此操作,但这似乎太麻烦了。相反,我想使用 Hashmap 作为键值列,但这意味着名称将包含在它们自己的哈希映射或数组列表中。

有没有一种很好、有效的方法将所有这些数据存储在一个集合/容器/数组中?

4

4 回答 4

5

使用属性名称、地址和端口号创建一个 POJO。将它们全部添加到同一个集合中。

于 2012-04-18T14:46:33.753 回答
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;
于 2012-04-18T14:48:17.183 回答
1

如果您有来自数据包的信息并且它是结构化的,请使用自定义对象:MyPacket。拥有您需要的所有属性。

如果您需要从唯一键中检索该对象,请使用 Map。以地图为例。然后,您可以使用其标识密钥(例如用户代码或其他)保存/检索每个 MyPacket。

如果您需要一个复杂的密钥,您应该使用自己的 Pojo 作为密钥:Map。然后为该 Key 类正确实现 hashCode 和 equals。

如果您需要一些顺序访问,您可以使用 TreeMap 作为保存顺序的实现。但是您的密钥应该由 Comparable 提供,或者您必须提供一个 Comparator。

如果您有一系列项目,请考虑使用列表。

希望能帮助到你!

于 2012-04-18T14:49:03.620 回答
0

您可以使用 a Listthan contains a 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);
于 2012-04-18T14:44:15.080 回答