繁体   English   中英

如何在Android Java中实现嵌套的ArrayList并对其进行迭代

[英]How do I implement a nested ArrayList and iterate through them in Android Java

我正在尝试创建一个结构,其中将有多个String值的列表,例如“ 0212”,并且我想具有三个ArrayList。 第一个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
        {

        }
    }   
}

由于值的定义非常严格(三个部分,每个部分由一个字节表示),我认为您可以基于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()方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM