2012-04-19 3 views
8

Как сохранить набор парных чисел в java? Использую ли я списки или массивы или что-то еще?Сохранение пар номеров в java

например. [(1,1), (2,1), (3,5)]

+1

Вы можете использовать все выше, но нет никакого способа угадать от того, что вы сказали. –

+0

@ Erwald: use '[desc] (link)', чтобы опубликовать ссылку в комментариях – amit

+0

@ Erwald Это одно решение, но это может быть не самое лучшее для того, что делает OP. –

ответ

8

Есть несколько вариантов :

написать собственный 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 может быть уместным.

+0

У меня есть 2D массив символов. И я хочу хранить определенные посты отдельно. Помогает? – saviok

+0

Сохраняете ли вы позиции в 2D-массиве? (В этом случае варианты, описанные выше, вероятно, являются лучшими из доступных.) –

+0

На самом деле вопрос в том, как сохранить позиции? – saviok

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

Вы также можете поместить в добытчиками, сеттеров, равных, хэш-код и т.д.

+2

Я бы сделал 'p1',' p2' 'private final', а также переопределить' equals() 'и' hashCode() ' – amit

+0

@amit: Хорошие очки. Я добавил комментарий после кода. –

0

Если вы можете жить с низкоуровневыми структурами и отчаянно нуждаться в компактной форме «буквальной» формы «набора пар» - это происходит со мной в модульном тесте, когда мне нужен набор светильников - вы можете просто использовать массив массивов:

int[][] squares = { 
    { 1, 1 }, 
    { 2, 4 }, 
    { 3, 9 } 
}; 

Но имейте в виду, что не существует семантическая к такому типу - все это зависит от правильного использования, компилятор не даст вам предупреждение, если вы наберете squares[0][1], когда вы на самом деле хотел squares[1][0].

0

Если вам нужно избегать дубликатов, то HashSet будет хорошим выбором, но это не будет работать с ArrayList.

Class IntPair(){ 
    int i; 
    int j; 
} 
HashSet<IntPair> set = new HashSet<IntPair>(); 

или

ArrayList<IntPair> list = new ArrayList<IntPair>(); 
+0

Если вы хотите избежать дубликатов, вам нужно будет также переопределить значения equals и hashCode. http://stackoverflow.com/a/7520464/3215004 – gmatht

Смежные вопросы