2012-05-16 4 views
5

ich mir etwasWie initialisieren ein public static final read-only LinkedMap (Richtungsunempfindlicher Karte)

public static final LinkedMap myMap; 

Irgendwo erstellen möchte ähnlich für Karten gefunden:

public class Test { 
     private static final Map<Integer, String> MY_MAP = createMap(); 

     private static Map<Integer, String> createMap() { 
      Map<Integer, String> result = new HashMap<Integer, String>(); 
      result.put(1, "one"); 
      result.put(2, "two"); 
      return Collections.unmodifiableMap(result); 
     } 
    } 

Aber ich kann nicht anwenden die 'unmodiableMap' Methode es zu einem LinkedMap. Kann mir jemand helfen? Ist es überhaupt möglich?

+1

Was ist eine 'LinkedMap'? –

+1

Benötigen Sie spezielle Methoden für 'LinkedMap'? andernfalls deklariere myMap einfach als 'Map' –

+0

Ich benötige eine LinkedMap wegen der Bidirektionalität (ich hätte erwähnen sollen, dass es von commons.apache.org.collections kommt). – July

Antwort

10

Die beliebteste Problemumgehung ist mit ziemlicher Sicherheit ein GuavaImmutableMap. (Disclosure:. I einen Beitrag zur Guava)

Map<Integer, String> map = ImmutableMap.of(
    1, "one", 
    2, "two"); 

oder

ImmutableMap<Integer, String> map = ImmutableMap 
    .<Integer, String> builder() 
    .put(1, "one") 
    .put(2, "two") 
    .build(); 

Ohne andere Bibliotheken, die einzige Abhilfe andere als die, die Sie geschrieben haben, ist

static final Map<Integer, String> CONSTANT_MAP; 
static { 
    Map<Integer, String> tmp = new LinkedHashMap<Integer, String>(); 
    tmp.put(1, "one"); 
    tmp.put(2, "two"); 
    CONSTANT_MAP = Collections.unmodifiableMap(tmp); 
} 
+0

bietet die ImmutableMap Bidirektionalität? – July

+0

Wenn Sie Bidirektionalität möchten - und meinen Sie [was ich denke, dass Sie meinen] (http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#BiMap) durch "Bidirektionalität" - dann ['ImmutableBiMap '] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableBiMap.html) wird dies tun. –

+0

also, wenn ich den Schlüssel eines bestimmten Wertes neet hätte, müsste ich zuerst die Umkehrung der Karte abrufen, richtig? – July

0

Es spielt keine‘ Es ist für mich sinnvoll, eine Variable zu deklarieren, die der Funktion Create() entspricht.

Wenn Sie eine endgültige Variable myMap Sie wie schreiben:

// = createMap(); 
private final static LinkedHashMap<Integer, String> 
              myMap = new LinkedHashMap<Integer, String>(); 
static { 
    myMap.put(1, "one"); 
    myMap.put(2, "Two"); 
}; 

public static void main(String[] args) { 

    for(String link : myMap.values()){ 
    System.out.println("Value in myMap: "+link); 
    } 

} 

oder wenn Sie erstellen verwenden möchten() Funktion, müssen Sie von myMap loswerden letzte Stichwort erhalten und nutzen myMap in Haupt wie:

public static void main(String[] args) { 

    myMap = Test.createMap(); 
Verwandte Themen