使用Map作为复杂键

时间:2013-06-14 11:45:34

标签: java

我是Java的初学者。我在java中有以下方法:

public void filter(Long time_start, Long time_stop){
     ArrayList<Long> time = new ArrayList<Long>();
     ArrayList<Integer> stream = new ArrayList<Integer>();
     ArrayList<Integer> cpuid = new ArrayList<Integer>();
     ArrayList<Integer> token = new ArrayList<Integer>();
}

我从用户那里获得了传递给此方法的time_starttime_stop的输入。 ArrayList时间包含用户输入的值(time_starttime_stop)。我想要做的是:对于每个给定的开始和结束时间......查看时间ArrayList并从time_start开始返回time, stream, cpuid and token直到time_end。时间ArrayList中的每个值都是唯一的。

我该怎么做?我知道Java中有Map接口,但只能接受一个键作为输入。我想查找一系列值并输出与该范围对应的所有字段。

有人能告诉我这样做的最佳方法吗?时间,cpuid等的ArrayLists有时会非常大。

2 个答案:

答案 0 :(得分:3)

您可以使用java.util.NavigableMap。它有一些方法可以检索范围,接近匹配以及你需要的一切。

您应该定义一个类来表示一个对象中每个事件的时间,流,cpuid和标记值的元组,而不是使用并行列表。我现在要打电话给这个班级Data

要获取包含time_starttime_stop范围内键的条目,您可以这样做:

NavigableMap<Long,Data> myMap;

public NavigableMap filter(Long time_start, Long time_stop){
    return myMap.subMap(time_start, time_stop);
}

答案 1 :(得分:3)

使用Java优秀的OO功能并创建类似

的内容
public class DataPoint {
   startTime;
   endTime;
   stream;
   cpuId;
   token;
}

并将其存储在您的列表中。是的,那将无法编译,我将实际的实现留给您。

相关问题