如何在java中用两列定义一个arrayList?

时间:2010-08-14 10:42:29

标签: java arraylist

我有一个hashMap。每个“值”将成为一个列表,稍后将使用我的“密钥”进行映射。希望列表如下所示:

[长度,时间] [长度,时间] [长度,时间]

例如: 键{srcAddr = x,dstAddr = y,srcPort = 12345,dstPort = 80} 值{(6523,0.001),(124,0.05),(),(),...}

我只是想知道如何才能拥有双列数组列表。

package myclassifier;
import java.util.ArrayList;

public class FlowStatics {
int packetLength;
double timeArrival;
public FlowStatics(int pLength, double tArrival)
{
    this.packetLength = pLength;
    this.timeArrival = tArrival;


}

} 以下是我如何使用它:

final ArrayList<FlowStatics> staticsArray = new ArrayList<FlowStatics>();
final HashMap<Flows, ArrayList> myHashMap = new HashMap<Flows, ArrayList>();

FlowStatics flowStatics = new FlowStatics(packetLength,timeArrival);
staticsArray.add(flowStatics);
myHashMap.put(flows, staticsArray);

以下是我正在阅读的部分:

Iterator<Flows> iterator =  myHashMap.keySet().iterator();
while(iterator.hasNext()){
    Flows key = iterator.next();
    ArrayList value = myHashMap.get(key);
    System.out.println("Fows"+key+"----------"+"Statics"+ value);

2 个答案:

答案 0 :(得分:4)

嗯,您的FlowStatics是正确的解决方案

List<FlowStatics>将为您提供“双列数组列表”。

更新:从您的更新开始,myHashMap.put(flows, flowStatics);错误。你这是一个单独的对,而不是地图中的列表。你应该使用:

staticsArray.add(flowStatics);
myHashMap.put(flows, staticsArray);

答案 1 :(得分:3)

List<E>是类型为E的同类元素列表的抽象。有一些限制(例如没有原语),但从概念上讲,类型E可以定义为你想要的任何内容。

假设有Pair<L,R>的抽象。然后,List<Pair<L,R>>仍然是某些E的列表,但现在EPair<L,R>。所以它仍然是一个“单列”列表,但列表中的每个元素都是“对”,所以它就是一个“两列”列表。

请注意,您并不总是需要通用Pair<L,R>。正确封装所有信息的任何类型E都可以在List<E>中使用。

顺便说一下,你也可以List<List<E>>

另见

相关问题


返回值类比

人们经常会问“如何在Java中返回两个值?”。答案是类似的。您返回一个值,一个封装了这两个信息的新类型。

所以而不是:

// attempt to return two values
// DOES NOT COMPILE

return "James Bond";
return "007";

你这样做:

return new SecretAgent("James Bond", "007");

相关问题