Какой класс лучше всего подходит для неупорядоченного списка пар? Я возьму кучу (плавающих, коротких) пар и должен будет иметь возможность выполнять простую математику (например, умножая пару вместе, чтобы вернуть один поплавок и т.д.). List только принимает один аргумент, и HashMap не позволяет дублировать (насколько я знаю). Любые мысли?
Создание списка пар в java
Ответ 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
Если вы хотите множественности, вы можете поместить его на карту, которая сопоставляет пару с количеством. Таким образом, будет только одна пара заданных значений, но она может представлять собой несколько случаев.
Затем, если у вас много значений повтора и вы хотите выполнить некоторую операцию для всех значений, вы можете сэкономить массу вычислений.