Подтвердить что ты не робот

Создание списка пар в java

Какой класс лучше всего подходит для неупорядоченного списка пар? Я возьму кучу (плавающих, коротких) пар и должен будет иметь возможность выполнять простую математику (например, умножая пару вместе, чтобы вернуть один поплавок и т.д.). List только принимает один аргумент, и HashMap не позволяет дублировать (насколько я знаю). Любые мысли?

4b9b3361

Ответ 1

Вы можете использовать класс Entry<U,V>, который использует HashMap, но вы будете придерживаться его семантики getKey и getValue:

List<Entry<Float,Short>> pairList = //...

Мое предпочтение было бы создать ваш собственный простой класс Pair:

public class Pair<L,R> {
    private L l;
    private R r;
    public Pair(L l, R r){
        this.l = l;
        this.r = r;
    }
    public L getL(){ return l; }
    public R getR(){ return r; }
    public void setL(L l){ this.l = l; }
    public void setR(R r){ this.r = r; }
}

Затем, конечно, сделайте List с помощью этого нового класса, например:

List<Pair<Float,Short>> pairList = new ArrayList<Pair<Float,Short>>();

Вы также можете всегда делать List из List s, но становится сложно обеспечить размер (у вас есть только пары), и вам потребуется, как и массивы, иметь последовательную типизацию.

Ответ 2

Используйте список экземпляров пользовательского класса. Пользовательский класс - это своего рода пара или координата или что-то еще. Тогда просто

List<Coordinate> = new YourFavoriteListImplHere<Coordinate>()

Этот подход имеет то преимущество, что он удовлетворяет этому требованию "выполнить простую математику (например, умножить пару вместе на возврат одного плавающего и т.д.)", поскольку ваш собственный класс может иметь методы для любых математических действий, которые вам нужно выполнить...

Ответ 3

просто исправление некоторых небольших ошибок в коде Марка Эллиота:

public class Pair<L,R> {
    private L l;
    private R r;
    public Pair(L l, R r){
        this.l = l;
        this.r = r;
    }
    public L getL(){ return l; }
    public R getR(){ return r; }
    public void setL(L l){ this.l = l; }
    public void setR(R r){ this.r = r; }
}

Ответ 4

Похоже, вам нужно создать свой собственный парный класс (см. обсуждение здесь). Затем создайте список созданного вами парного класса

Ответ 5

Подобно тому, что предложил Марк Е, вы должны придумать свои собственные. Чтобы немного помочь вам, есть аккуратная статья http://gleichmann.wordpress.com/2008/01/15/building-your-own-literals-in-java-tuples-and-maps/, которая дает вам действительно опрятный способ создания кортежей и карт, которые могут быть чем-то вы можете рассмотреть.

Ответ 6

Если вы хотите множественности, вы можете поместить его на карту, которая сопоставляет пару с количеством. Таким образом, будет только одна пара заданных значений, но она может представлять собой несколько случаев.

Затем, если у вас много значений повтора и вы хотите выполнить некоторую операцию для всех значений, вы можете сэкономить массу вычислений.