如何实现嵌套的ArrayList并在Android Java中迭代它们

时间:2013-10-03 12:35:14

标签: java android arraylist iterator

我正在尝试创建一个结构,其中会有一个包含多个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
        {

        }
    }   
}

1 个答案:

答案 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()方法。