Java-может ли hashmap иметь 4 общих параметра вместо 2?

Это может быть трудно объяснить, но здесь идет:

Я хочу сохранить 3 целых числа и строку в Hashmap, поэтому я могу получить данные с карты, но оказывается, что hashmaps позволяют только 2 общих параметра вместо 4.

например: HashMap <String> <Integer> <Integer> <Integer> (что я хочу сделать)

но вы можете использовать только 2 параметра, как кажется: HashMap <String> <Integer>.

мое лучшее предположение, что моя идея не может быть выполнена, если так, пожалуйста, перечислите альтернативы обработке что-то вроде этого.

7 ответов


создайте новый класс, который содержит 3 Integer или, может быть,int.

class Triple {
    Integer i;
    Integer j;
    Integer k;

    Triple(Integer i,Integer j, Integer k) {
        this.i = i;
        this.j = j;
        this.k = k;
    }
}

и поместите этот класс на карту со строкой.

HashMap map = new HashMap<String, Triple>();
map.put("keyString", new Triple(new Integer(1),new Integer(2),new Integer(3)));

вы должны создать объект для хранения данных, а затем сохранить его, как это: HashMap<String, MyObject>.

кроме того, это не конструкторы. Это дженерики.


вам не нужна hashmap для хранения 4 значений. Для хранения 3 целых чисел и 1 строки:

public class MyClass {
  int a,b,c;
  String d;
}

вы можете получить ответ косвенно, например, составить три целого числа в одну символьную строку,

int val1=1;
int val2=2;
int val3=3;
Map<String,String> test = new HashMap<String,String>();
test.put("key1", val1+"_"+val2+"_"+val3);
when you wan to get the values, int[] rst = test.get("key1).split("_");

затем вы можете получить доступ к целочисленным значениям.


Мне кажется, что вы пытаетесь сохранить два разных типа вещей в качестве значений в хэш-карте. В этом нет никаких проблем. Просто создать хэш-карту с конструктором по умолчанию, а затем просто использовать объект в качестве типа значения. так что new HashMap<String, Object>()


для хранения произвольных объектов можно использовать HashMap.


Я боролся с этой же проблемой. В итоге я создал hashmap пользовательского класса. Это полностью сработало, и позволило мне поместить любые атрибуты, которые я хотел в своем классе, и вытащить эти атрибуты для любого элемента программно. Полный пример ниже.

public class Test1 {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addview);


//create the data mapping
    HashMap<Integer, myClass> hm = new HashMap<Integer, myClass>();
    hm.put(1, new myClass("Car", "Small", 3000));
    hm.put(2, new myClass("Truck", "Large", 4000));
    hm.put(3, new myClass("Motorcycle", "Small", 1000));



//pull the datastring back for a specific item.
//also can edit the data using the set methods.  this just shows getting it for display.
    myClass test1 = hm.get(1);
    String testitem = test1.getItem();
    int testprice = test1.getPrice();
    Log.i("Class Info Example",testitem+Integer.toString(testprice));

}

}








class myClass{
    private String item;
    private String type;
    private int price;


    public myClass(String itm, String ty, int pr){
        this.item = itm;
        this.price = pr;
        this.type = ty;
    }

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public String getType() {
        return item;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

}