Java - Может ли хэш-карта иметь 4 общих параметра вместо 2? - PullRequest
10 голосов
/ 30 августа 2011

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

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

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

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

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

Ответы [ 7 ]

15 голосов
/ 30 августа 2011

Создайте новый класс, который содержит 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)));
3 голосов
/ 30 августа 2011

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

public class MyClass {
  int a,b,c;
  String d;
}
3 голосов
/ 30 августа 2011

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

Кроме того, это не конструкторы.Они являются дженериками.

1 голос
/ 30 августа 2011

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

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("_");

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

0 голосов
/ 09 февраля 2017

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

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;
    }

}
0 голосов
/ 30 августа 2011

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

0 голосов
/ 30 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...