Как сохранить набор парных чисел в java? Использую ли я списки или массивы или что-то еще?Сохранение пар номеров в java
например. [(1,1), (2,1), (3,5)]
Как сохранить набор парных чисел в java? Использую ли я списки или массивы или что-то еще?Сохранение пар номеров в java
например. [(1,1), (2,1), (3,5)]
Есть несколько вариантов :
написать собственный IntPair класс
class IntPair {
// Ideally, name the class after whatever you're actually using
// the int pairs *for.*
final int x;
final int y;
IntPair(int x, int y) {this.x=x;this.y=y;}
// depending on your use case, equals? hashCode? More methods?
}
, а затем создать IntPair[]
или List<IntPair>
.
В качестве альтернативы создайте двумерный массив new int[n][2]
и обработайте строки как пары.
Java не имеет встроенной в Pair
классе по нескольким причинам, но наиболее заметным является то, что это достаточно просто написать класс, который имеет ту же функцию, но имеет много более поучительных, полезных имен класс, его поля и его методы.
Если бы мы знали больше о том, что вы на самом деле используете для этого, мы могли бы предоставить более подробные предложения. Насколько нам известно, Map
может быть уместным.
class Pair<T> {
T p1, p2;
Pair(T p1, T p2) {
this.p1 = p1;
this.p2 = p2;
}
Pair<Integer> pair = new Pair<Integer>(1,2);
int i1 = pair.p1;
int i2 = pair.p2;
Вы также можете поместить в добытчиками, сеттеров, равных, хэш-код и т.д.
Я бы сделал 'p1',' p2' 'private final', а также переопределить' equals() 'и' hashCode() ' – amit
@amit: Хорошие очки. Я добавил комментарий после кода. –
Если вы можете жить с низкоуровневыми структурами и отчаянно нуждаться в компактной форме «буквальной» формы «набора пар» - это происходит со мной в модульном тесте, когда мне нужен набор светильников - вы можете просто использовать массив массивов:
int[][] squares = {
{ 1, 1 },
{ 2, 4 },
{ 3, 9 }
};
Но имейте в виду, что не существует семантическая к такому типу - все это зависит от правильного использования, компилятор не даст вам предупреждение, если вы наберете squares[0][1]
, когда вы на самом деле хотел squares[1][0]
.
Если вам нужно избегать дубликатов, то HashSet будет хорошим выбором, но это не будет работать с ArrayList.
Class IntPair(){
int i;
int j;
}
HashSet<IntPair> set = new HashSet<IntPair>();
или
ArrayList<IntPair> list = new ArrayList<IntPair>();
Если вы хотите избежать дубликатов, вам нужно будет также переопределить значения equals и hashCode. http://stackoverflow.com/a/7520464/3215004 – gmatht
Вы можете использовать все выше, но нет никакого способа угадать от того, что вы сказали. –
@ Erwald: use '[desc] (link)', чтобы опубликовать ссылку в комментариях – amit
@ Erwald Это одно решение, но это может быть не самое лучшее для того, что делает OP. –