我正在尝试创建一个结构,其中会有一个包含多个String值的列表,例如“0212”我希望有三个ArrayLists。第一个ArrayList将取值“02”的第一部分,第二个取第二个部分“1”,第三个取第三个值“2”。然后,我希望能够遍历值列表,以便我可以更快地找到特定值,因为多个值对于值的第一部分和第二部分将具有相同的值。然后我想将它链接到一个值为“0212”的对象。我希望有人理解我要解释的内容,如果有人能帮助我,我会非常感激。提前谢谢。
这是我目前的代码,它将字符串值与ArrayList中的DataObject地址值相匹配:
public void setUpValues()
{
String otherString = "4210";
Iterator<DataObject> it = dataObjects.iterator();
while(it.hasNext())
{
DataObject currentDataObject = it.next();
if(currentDataObject.getAddress().equals(otherString))
{
System.out.println("IT WORKSSSSSS!");
currentDataObject.setValue("AHHHHHHHHH");
System.out.println("Data Object Address: " + currentDataObject.getAddress());
System.out.println("Data Object Type: " + currentDataObject.getType());
System.out.println("Data Object Value: " + currentDataObject.getValue());
System.out.println("Data Object Range: " + currentDataObject.getRange());
}
else
{
}
}
}
答案 0 :(得分:0)
由于值的定义非常严格(三个部分,每个部分由一个字节表示),我认为您可以基于Map
构建轻量级解决方案:
Map<Byte, ArrayList<Byte>> firstSegments;
Map<Byte, ArrayList<Byte>> secondSegments;
Map<Byte, FinalObject> thirdSegments;
其中FinalObject
是完全汇编的数据类型(例如,Byte[3]
)。这提供了有效的分段查找,但是您需要迭代数组以找到要检查的“下一组”分段。大致是:
Byte[3] needle = ...;
Byte firstSeg = ...;
Byte secondSeg = ...;
Byte thirdSeg = ...;
for (Byte b1 : firstSegments.get(firstSeg)) {
if (b1.equals(secondSeg)) {
for (Byte b2 : secondSegments.get(b1)) {
if (b2.equals(thirdSeg)) {
return thirdSegments.get(b2); // found a match
}
}
}
}
您的问题并不清楚,但如果您正在尝试确定给定的Byte
段是否在其中一个数组中并且不关心迭代它们,那么它将更清晰,更高效使用Set<Byte>
代替ArrayList<Byte>
。 Set
为此目的提供了快速contains()
方法。