我是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_start
和time_stop
的输入。 ArrayList时间包含用户输入的值(time_start
和time_stop
)。我想要做的是:对于每个给定的开始和结束时间......查看时间ArrayList并从time_start开始返回time, stream, cpuid and token
直到time_end。时间ArrayList中的每个值都是唯一的。
我该怎么做?我知道Java中有Map接口,但只能接受一个键作为输入。我想查找一系列值并输出与该范围对应的所有字段。
有人能告诉我这样做的最佳方法吗?时间,cpuid等的ArrayLists有时会非常大。
答案 0 :(得分:3)
您可以使用java.util.NavigableMap
。它有一些方法可以检索范围,接近匹配以及你需要的一切。
您应该定义一个类来表示一个对象中每个事件的时间,流,cpuid和标记值的元组,而不是使用并行列表。我现在要打电话给这个班级Data
。
要获取包含time_start
到time_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;
}
并将其存储在您的列表中。是的,那将无法编译,我将实际的实现留给您。