2012-04-18 72 views
0

我必须存储来自UDP数据包的数据,例如名称,地址和端口号。我最初使用3个数组列表来做到这一点,但这似乎太麻烦了。 相反,我认为使用Hashmap作为键值对齐,但这意味着名称将包含在它们自己的哈希映射或数组列表中。不确定如何存储数据

是否存在将所有这些数据存储在一个集合/容器/数组中的好方法?

回答

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; 
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); 
5

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

+0

嘿,你打我回答:P – 2012-04-18 14:49:05

+0

@LiorBarnea当然,但你的答案更好。 +1 – 2012-04-18 14:49:54

1

如果你有从包信息,它的结构,使用自定义对象:MyPacket。拥有你需要的所有属性。

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

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

如果您需要一些顺序访问,您可以使用TreeMap作为保存顺序的实现。但是你的密钥应该是Comparable,否则你必须提供一个比较器。

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

希望它有帮助!