java: HashMap <String, int> çalışmıyor


128

HashMap<String, int>işe yaramıyor gibi görünüyor ama HashMap<String, Integer>çalışıyor. Herhangi bir fikriniz neden?


Sorunuz için kelime seçiminiz kafa karıştırıcı, açıklayabilir misiniz? Ve tam olarak ne çalışmıyor, kodu gönderebilir misin?
Anthony Forloney

Yanıtlar:


204

Java'da ilkel türleri genel argümanlar olarak kullanamazsınız. Bunun yerine kullanın:

Map<String, Integer> myMap = new HashMap<String, Integer>();

İle otomatik boks / unboxing kodunda küçük bir fark yoktur. Otomatik kutulama, yazabileceğiniz anlamına gelir:

myMap.put("foo", 3);

onun yerine:

myMap.put("foo", new Integer(3));

Otomatik kutulama, ilk sürümün dolaylı olarak ikinciye dönüştürüldüğü anlamına gelir. Otomatik kutudan çıkarma, yazabileceğiniz anlamına gelir:

int i = myMap.get("foo");

onun yerine:

int i = myMap.get("foo").intValue();

Örtük çağrı intValue(), anahtar bulunmazsa bunun bir oluşturacağı anlamına gelir NullPointerException, örneğin:

int i = myMap.get("bar"); // NullPointerException

Nedeni, tür silme . Diyelim ki, C # 'da genel türler çalışma zamanında tutulmaz. Bunlar, sizi bunu yapmaktan kurtaracak açık döküm için sadece "sözdizimsel şekerdir":

Integer i = (Integer)myMap.get("foo");

Size bir örnek vermek gerekirse, bu kod tamamen yasaldır:

Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");

3
Son örneğiniz çalışmıyor: <Dize, Tamsayı> Haritasından <Tamsayı, Dize> Haritasına dönüştürülemiyor
T3rm1

get () yöntemini kullandığınızda bir nesne olarak değerlendirildiğinden, intValue () yöntemi kullanılmadan önce 5. satırdaki kodun yeni bir satırdaki her ayrı kod dikkate alınarak Tamsayıya dönüştürülmesi gerekir.
yeni öğrenen


2

İçinde ilkel türleri kullanamazsınız HashMap. intveya doubleçalışmıyor. Çevreleyen tipini kullanmalısınız. örnek olarak

Map<String,Integer> m = new HashMap<String,Integer>();

Şimdi ikisi de nesne, bu yüzden bu işe yarayacak.


0

int ilkel bir türdür, burada java'da ilkel bir türün ne anlama geldiğini okuyabilirsiniz ve Harita, girdi olarak nesnelere sahip bir arabirimdir:

public interface Map<K extends Object, V extends Object>

nesne bir sınıf anlamına gelir ve aynı zamanda ondan genişleyen başka bir sınıf yaratabileceğiniz anlamına gelir, ancak int'ten genişleyen bir sınıf oluşturamazsınız. Yani int değişkenini bir nesne olarak kullanamazsınız. Sorununuz için yedek çözümlerim var:

Map<String, Integer> map = new HashMap<>();

veya

Map<String, int[]> map = new HashMap<>();
int x = 1;

//put x in map
int[] x_ = new int[]{x};
map.put("x", x_);

//get the value of x
int y = map.get("x")[0];

-3

Başvuru türünü ilkel tür değil genel bağımsız değişkenlerde kullanabilirsiniz. Yani burada kullanmalısın

Map<String, Integer> myMap = new HashMap<String, Integer>();

ve değeri saklayın

myMap.put("abc", 5);

1
Bu soruya cevap vermiyor
smac89
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.