2015-07-13 10 views
5

Ich weiß, dass HashSet<String> Datenstruktur eindeutige Zeichenfolgen speichern kann und sagen, wenn String mit O (1) Komplexität vorhanden ist, da es Hash-Code verwendet. Kann die gleiche Komplexität erreicht werden, wenn ich den Brieffall ignorieren möchte? Nächster Anwendungsfall sollte funktionieren:Datenstruktur, die Strings speichert und ignoriert Groß- und Kleinschreibung

Set<String> set = new IgnoreLetterCaseSet(); 
set.add("New York"); 
set.contains("new york") == true; 
set.contains("NEW YORK") == true; 

set.each(it -> print it) ---> prints "New York" 

Ist es möglich, eine solche Datenstruktur zu implementieren?

+0

@ Dave letzte Zeile Code - druckt New York, als sie eingeführt wurde, kann ich die Zeichenfolge nicht normalisieren Kleinbuchstaben bei Einfügen –

+0

Was passiert, wenn Sie eine neue Klasse erstellen, die 'String' erweitert und die Methoden' .equals() 'und' .hashCode() 'überschreibt? –

+1

@jameslarge String-Klasse ist endgültig, kann nicht erweitert werden. – dave

Antwort

3

Nur eine HashMap mit Original-String als Wert verwenden und Kleinschreibung einer für Schlüssel

Map<String, String> map = new HashMap<>(); 
map.add("New York".toLowerCase() ,"New York"); 
map.containsKey("new york".toLowerCase()) == true; 
map.containsKey("NEW YORK".toLowerCase()) == true; 

map.values().each(it -> print it) ---> prints "New York" 
+0

Ich muss also eine HashMap einpacken, um O (1) zu erhalten –

6

Vielleicht TreeSet ist was Sie suchen?

TreeSet<String> ts=new TreeSet<String>(String.CASE_INSENSITIVE_ORDER); 
+1

'SortedSet ts = neues TreeSet <> (String.CASE_INSENSITIVE_ORDER);' wobei 'CASE_INSENSITIVE_ORDER' ein Komparator ist. –

+0

nett, aber kann es in O (1) getan werden? –

0

Ich bin nicht vertraut mit Java, aber hier sind zwei Ideen, wie Sie dies tun könnten:

  1. einen neuen Vergleich definieren im HashSet zu verwenden, den Fall ignoriert.
  2. Lassen Sie die HashSet eine Liste von string halten, die alle denselben Schlüssel haben. Das heißt, New York und NEW YORK werden beide in der Liste unter dem Schlüssel new york sein.
Verwandte Themen