Mit HashMaps In Java
Ich Schreibe eine Methode, die es erlaubt mir, zu zählen, wie oft ein element vom Typ String zeigt, in eine LinkedList vom Typ Strings. mein code unten funktioniert nicht. Ich bekomme den index außerhalb des gültigen Bereichs in der Zeile, die ich kommentiert unten. Kann nicht scheinen zu finden, die Fehler
public int findDuplicate (LinkedList<String> e) {
int j = 1;
LinkedList<String> test = e;
while (!test.isEmpty()){
test = e;
String value = test.pop();
//Screws up here when i = 6
for(int i =0; i<=test.size() && test.get(i)!=null; i++){
String value3 = test.get(i);
if(e.get(i).equals(value) && i<=test.size()){
String value2 = test.get(i);
j++;
String Duplicate = e.get(i);
e.remove(i);
}
}
System.out.println(value + " is listed " + j + " times");
}
return j;
}
Verwendung von hashmaps.. funktioniert immer noch nicht
public void findDuplicate (LinkedList e) {
Map<String,Integer> counts = new HashMap<String,Integer>();
while(!e.isEmpty()){
String value = e.pop();
for(int i =0; i<e.size(); i++){
counts.put(value, i);
}
}
System.out.println(counts.toString());
}
Mein code sollte gehen Sie durch die Link-Liste finden heraus, wie oft ein element in der Liste erscheint und löscht Duplikate aus der Liste zur gleichen Zeit. Dann druckt das element und die Anzahl der Zeiten, die er in der Liste erscheint. Ich habe geschrieben über diese Letzte Nacht, aber habe keine Antwort bekommen noch. Sorry für den repost.
InformationsquelleAutor Ali | 2013-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bezüglich Ihrer hashmap Beispiel zum zählen der Duplikate:
Wenn Sie möchten, dass die original-Saiten-Liste erhalten, die Sie tun könnten
InformationsquelleAutor Mike Hogan
Sie laufen vom Ende der Liste. Ändern
zu
Gültigen Indizes für eine
List
(oder ein array) sind0
durchsize() - 1
.InformationsquelleAutor rgettman
Check-out-google guava Sammlungen, die hat eine perfekte Klasse für die Aufrechterhaltung einer Karte und einem count:
https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#BiMap
InformationsquelleAutor bsautner
Ich hoffe, dass Sie erkennen, was die
test = e
- Anweisung tun. Nachdem diese Anweisung ausgeführt, die sowohltest
unde
beziehen sich auf die gleichen Objekt.Wenn jemand von Ihnen ändert sich die Liste, der andere sieht es, wie Sie beide schauen auf das gleiche Objekt.
Ist dies nicht beabsichtigt, müssen Sie Klon der Liste, bevor die Zuordnung zu einer anderen Liste verweisen.
InformationsquelleAutor Nishant Shreshth
Dies hat keine Auswirkungen auf Ihre out-of-bounds Problem, aber Sie sind zu entfernen Elemente aus Ihrer Liste, während Sie noch zu bewerten. Wenn Sie ein element entfernen, sollten Sie rufen
i--
danach, oder Sie überspringen die nächste Einheit (die re-indexiert) für die Bewertung.Auch der Hinweis zu deinem code, ich sehe, Sie versuchen, machen Sie eine Kopie Ihrer Liste, aber die standard-Belegung bedeutet
test
unde
verweisen beide auf die gleiche Instanz. Sie benötigenCollections.copy()
siehe das SO in diesem thread, wie um die Klasse zu verwenden.InformationsquelleAutor JoshDM