我在另一个论坛上问过同样的问题,但是得到任何合适的答案......所以我在这里发帖。我有以下程序:
public void execute(){
public static ArrayList<Long> time = new ArrayList<Long>();
public static ArrayList<Integer> state = new ArrayList<Integer>();
public static ArrayList<Integer> cpu = new ArrayList<Integer>();
for(int i=0; i<time.size(); i++){
if(cpu.get(i).equals(get)){
Long next_time = time.get(i);
Integer next_func = state.get(i);
Integer next_proc = cpu.get(i);
if(next_time.equals(g) && (next_func.equals(test1.func_num))){
Integer func_next = stt.get(i+1);
if(func_next.equals(0)||(func_next.equals(next_func))) {
System.out.println("here");
}
else
System.out.println("here");
if(cpu.get(i+2).equals(get))
if(stt.get(i+2).equals(func_next) || (stt.get(i+2).equals(0)))
System.out.println(stt.get(i+2));
}
}
}
我想要做的是:我从用户那里得到时间,cpu和状态的值。在arraylist中找到相应值的匹配,然后我想遍历arraylists 仅用于那些匹配'cpu'的值。所有ArrayLists都具有相同的大小,并且包含在任何给定索引处相互对应的值。我怎么能这样做?
实施例: ArrayLists包含各种值,如下所示:
time = 1 cpu = 12 state = 24
time = 2 cpu = 12 state = 4
time = 5 cpu = 13 state = 23
time = 6 cpu = 13 state = 26
time = 8 cpu = 11 state = 34
time = 11 cpu = 12 state = 54
time = 13 cpu = 12 state = 56
time = 14 cpu = 11 state = 58
time = 15 cpu = 15 state = 46
就是这种情况。我得到了用户的价值,因为时间= 2 cpu = 12 state = 4 ....我找到了匹配,之后我想查找对应于cpu = 12的所有值..
答案 0 :(得分:2)
更多地基于描述然后代码示例
您以时间,cpu和状态形式用户的形式获得输入。 您想要找到这些输入条件的匹配项。
为了能够轻松地做到这一点,您应该为此创建一个类型。
public class Data {
private final int cpu;
private final long time;
private final int state;
public Data(int cpu, long time, int state) {
this.cpu = cpu;
this.time = time;
this.state = state;
}
//add implementation for equals and hashcode methods.
}
equals和hash code方法负责定义object的唯一值。因此,当您使用相同的输入创建对象时,应生成相同的哈希码。
您使用这些元素创建集合
Set<Data> storage = new HashSet<Data>();
在此storage
中,您应该存储要执行搜索的所有数据。
搜索很简单。您创建了一个搜索项
Data searchItem = new Data(user.getCpu(), user.getTime(), user.getState());
if(storage.contains(searchItem)) {
// action on true
} else {
// action on false
}
编辑:
问:如何对给定的CPU执行所有项目?
要支持此类操作,您必须在代码中具有可根据决策为您提供某种数据的结构。通常对于此操作使用类型Map。此类型允许在值的关键引用下收集。该值可以是对象的集合。
地图&GT; dataMap = new HashMap&lt;&gt;(); // Java钻石符号。
或者你可以使用番石榴的[Multimap]。
答案 1 :(得分:0)
Java是纯粹的oo语言。这意味着你不仅必须用面向对象的风格写作,还要把所有东西都想象成现实世界的对象。在找到如何解决这个问题之前,我想建议您在Java中仔细阅读OOP和Connections框架。
答案 2 :(得分:0)
这样的事情应该有效:
bool matchFound = false;
for (int i = 0; i < time.size(); i++) {
long thisTime = time.get(i);
int thisState = state.get(i);
int thisCpu = cpu.get(i);
if (matchFound) {
if (thisCpu == userCpu) {
System.out.println("Time: " + thisTime + " "
+ "State: " + thisState + " "
+ "Cpu: " + thisCpu);
}
} else {
matchFound = (thisTime == userTime
&& thisState == userState
&& thisCpu == userCpu);
}
}
答案 3 :(得分:0)
当您找到匹配项时,请执行以下操作:
//once you have the index in a Integer var called myVal
Set<Integer> indexes = new HashSet<Integer>();
for(int i=0; i<time.size(); i++){
if (cpu.get(i) == myVal) {
indexes.add(i);
}
}
现在您可以使用索引集:
for (Integer index: indexes) {
//do whatever
}
这是O(time.size())。希望这有帮助