2010-08-22 3 views
0

Disons que j'ai deux chaînes identiques dans une ArrayList ... y a-t-il un moyen de vérifier cela? Aussi existe-t-il un moyen de vérifier combien de fois une chaîne de la même est exacte dans ArrayList? Donc, disons que j'ai ce qui suit un ArrayString.Java ArrayList recherchant plusieurs chaînes

os.println(itemIDdropped + "|" + spawnX + "|" + spawnY + "|" + currentMap + "|drop|" + me.getUsername()); 
1. 1|3|5|1|drop|Dan 
2. 2|5|7|2|drop|Luke 
3. 1|3|5|2|drop|Dan 
4. 3|3|5|1|drop|Sally 

Voici ce que les chiffres/lettres signifient pour les 1-4 chaînes ... ID article, X pos, Y pos, la carte il est sur, chute de commande, l'utilisateur qui a laissé tomber

Ensuite, disons que je le diviser faire:

String[] itemGrnd = serverItems.get(i).split("\\|"); 

maintenant, disons que j'ai une boucle for comme celui-ci:

for (int i = 0; x < serverItems.size(); i++) { 
    System.out.println(serverItems.get(i)); 
} 

Je veux trouver où X, Y et Map ou dans ce cas itemGrnd [1], itemGrnd [2], et itemGrnd [3] sont les mêmes dans N'IMPORTE QUELLE chaîne dans le ArrayList que j'ai trouvé via serverItems.get (i) . Et si nous en trouvons ... (dans l'exemple que je donne ci-dessus ... x, y et map sont les mêmes pour 1 et 4 ... alors créez une instruction IF pour le faire UNE FOIS. .. parce que je ne veux pas faire ceci: (BTW Je garde la trace de mes variables pour le client donc ne vous inquiétez pas à ce sujet.) Oui, je sais que ça s'appelle spawnX et spawnY .. c'est juste le X actuel, Y.

if (spawnX.equals(Integer.parseInt(itemGrnd[1])) && 
    spawnY.equals(Integer.parseInt(itemGrnd[2])) && 
    currentMap.equals(Integer.parseInt(itemGrnd[3]))) { 
} 

maintenant, si je devais le faire .... 1 et 4 ont été traitées par être ici. Je veux seulement faire une seule fois .. en TOUT temps si nous trouvons multple des chaînes (comme 1 et 4)

Merci

+1

Voici de nombreuses questions en une. Essayez de vous concentrer sur un problème à la fois. – cherouvim

+0

Sérieusement. Vous avez réussi à faire paraître une question très simple très compliquée. – jvdneste

+1

Il ne semble même pas que le titre corresponde à la question. @Dan, essayez de le reformuler pour que cela ait du sens – TheLQ

Répondre

1

Eh bien, il est assez simple de savoir combien de cordes ArrayList a:

public class ArrayListExample { 
    private static final String TO_FIND = "cdt"; 

    public static void main(String[] args) { 
     ArrayList<String> al = new ArrayList<String>(); 
     al.add("abc"); 
     al.add("dde"); 
     //4 times 
     al.add(TO_FIND); 
     al.add(TO_FIND); 
     al.add(TO_FIND); 
     al.add(TO_FIND); 

     ArrayList<String> al1 = (ArrayList<String>) al.clone(); 
     int count = 0; 
     while (al1.contains(TO_FIND)) { 
      al1.remove(TO_FIND); 
      count++; 
     } 
     System.out.println(count); 
    } 
} 
+0

Imaginez à quel point cela sera terrible pour une liste avec des milliers d'éléments.Vous devez encore traverser d'énormes portions de la liste encore une fois. –

0

Une manière plus rapide serait de trier la liste de tableaux et voir combien de différents éléments sont là. La solution Denis_k est le O (n^2) et avec le tri c'est O (nlog (n)).

0

Si vous voulez ce genre de comportement, vous pouvez consulter le projet Apache Commons/Collections, qui étend les collections Java par défaut de certaines interfaces utiles, y compris the bag interface (JavaDoc), qui semble être ce que vous recherchez: une collection qui sait combien d'éléments d'un genre il contient. L'inconvénient: il n'y a pas encore de support pour les génériques, donc vous travaillez avec des collections brutes.

Ou Google Guava, qui est une bibliothèque plus moderne et a un concept similaire, appelé MultiSet qui est probablement plus convivial. La goyave n'a cependant pas encore de version, bien qu'elle soit déjà largement utilisée en production.

Oh, et il y a aussi une fonction JavaSe standard: Collections.frequency(Collection, Object), bien qu'elle soit supposée fonctionner mal.