0

プログラミングプロジェクトに取り組んでいます。いくつかのオブジェクトをリストに保存したいのですが、重複を取り除くことができません。

これは私のオブジェクトです

nd = nodeAddress16=0x10,0x03, nodeAddress64=0x00,0x13,0xa2,0x00,0x40,0x6f,0x8d,0xfc, rssi=-47, nodeIdentifier= [0x10,0x03]

コードはスレッド内にあるため、コードがループしています。

private void handleAtCommandResponse(XBeeResponse response) {
    //TODO Implement your code here, to handle particular AT command responses, if desired.
    System.out.println("NetworkNode: Received AT Response:"+((AtCommandResponse)response).getCommand());

    if (response.getApiId() == ApiId.AT_RESPONSE) {
        NodeDiscover nd = NodeDiscover.parse((AtCommandResponse)response);
        System.out.println("Node discover response is: " + nd);

        nodeDiscoverList.add(nd); //add to list, but gives duplicates of nd.

        //add to list if not already in it
        //if already in list replace that object with the new object
        //duplicate objects are not allowed ==> only one object in the list can contain a specific address.
        // Only addresses are static values, other values may change over time.


        }
    else {
        log.debug("Ignoring unexpected response: " + response); 
    }
}
4

1 に答える 1

0

が同じ応答で複数回呼び出されている理由を判断するのに役立つシステムの残りの部分を理解していなくても、List の代わりにHashSetなどのSet実装を使用して、重複したオブジェクトを保存しないようhandleAtCommandResponseにできることに注意してください。NodeDiscover がまだ実装されていない場合は、実装する必要がある場合があります。hashCode()

ASetはオブジェクトの重複を許可しません。put()同じオブジェクト (hashCode()セット内の別のオブジェクトと等しいオブジェクト) で 2 回呼び出すと、最初のインスタンスが 2 番目のインスタンスに置き換えられます。

于 2013-04-07T16:27:36.923 に答える