Imbriqués pour-chacun sur la même liste en Java?

J'ai une liste de listes d'Entiers que je suis à l'aide de chaînes de build basé sur un fichier d'entrée. L'entrée spécifie paires (par exemple, "3 en 1" indique que 1 remplace 3 dans l'application), et il y a des chevauchements dans les paires (par exemple, "3 en 1" et "1 à 4" signifie que 1 remplace les 3 et 4 remplace 1, donc en fin de compte, 4 remplace 3).

Afin de réduire toutes les paires dans leurs dernières chaînes, j'ai une liste contenant des listes de toutes les paires, puis-je trouver les entrées dans la liste de chevauchement et de les ajouter à la les chaînes que nécessaire, le retrait de la paire qui a été jointe à une autre. C'est ainsi que je suis tenter de faire cela, mais je sais que l'échec est en doublant l'itérateur références:

    for (ArrayList<Integer> outerChain : chains) {
        for (ArrayList<Integer> innerChain : chains) {
            if (outerChain.get(0).equals(innerChain.get(innerChain.size() - 1))) {
                outerChain.remove(0);
                innerChain.addAll(outerChain);
                chains.remove(outerChain);
                break;
            }
        }
    }

Comme un exemple de l'entrée/de la sortie souhaitée de cette opération:

    {<1,3>,<2,7>,<7,9>,<8,12>,<9,1>,<6,8>}

individuels des listes correspondant à des paires d'entrée, la sortie serait:

    {<2,7,9,1,3>,<6,8,12>}

Est-il une manière que je peux nid itérateurs comme ça, telles que les références à l'intérieur de chaque itérateur sont mis à jour lors de la suppression ou de mise à jour pour l'un ou l'autre?

Merci d'avance pour l'aide!

  • Je sais que c'est pas ce que vous avez demandé, mais pourquoi ne pas le faire avec linéaire de la complexité? Vous pourriez juste faire un tableau de "qui est mon remplacement direct", de trouver les éléments de démarrage des chaînes (ne pas remplacer quoi que ce soit) et de suivre leurs chaînes à l'aide des valeurs du tableau.
  • Être prudent en comparant Integers avec ==, en dehors d'une gamme étroite (je pense que jusqu'à 128 ou 256?) il n'aura plus de retour que vous en attendez (tout comme les comparaisons de chaînes).
  • il y aura plusieurs paires de balise sur la fin d'une seule chaîne à la fois, donc si je le conserver hors de séparer et de ne pas mettre à jour la liste, alors je peut trouver (à partir de l'exemple ci-dessus) que je reçois des <2,7,9> et <9,1,3>, mais j'aurais alors besoin de revenir sur ce que je sors de trouver que <2,7,9,1,3>.
  • J'ai juste mis que là-haut pour mettre un exemple de code, mais merci pour le heads up. Je vais le mettre à jour, donc il n'est pas fait d'un problème.
InformationsquelleAutor Belizzle | 2013-04-29