1

「0212」などの複数の文字列値のリストが存在する構造を作成しようとしていますが、3 つの ArrayList が必要です。最初の ArrayList は値の最初の部分「02」を取り、2 番目は 2 番目の部分「1」を取り、3 番目は 3 番目の値「2」を取ります。次に、値のリストを反復処理して、複数の値が値の最初と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
        {

        }
    }   
}
4

1 に答える 1

0

値は非常に厳密に定義されているため (それぞれが 1 バイトで表される 3 つのセクション)、以下に基づいて軽量のソリューションを構築できると思います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ありませんが、特定のセグメントが配列の 1 つにあるかどうかを判断しようとしていて、それらを反復することを気にしない場合は、Set<Byte>代わりに a を使用する方がクリーンで効率的ですArrayList<Byte>。この目的のためSetの高速な方法を提供します。contains()

于 2013-10-04T13:29:48.920 に答える