14

如何在java中存储一组配对数字?我使用列表或数组还是其他东西?

例如。[ (1,1) , (2,1) , (3,5)]

4

6 回答 6

14

有几个选项:

编写自定义 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容易,但对类、其字段和它的方法。

如果我们更多地了解您实际使用它的目的,我们或许能够提供更详细的建议——据我们所知,aMap可能适合这里。

于 2012-04-19T18:35:15.993 回答
1

如果您使用的是 JavaFX,则可以使用类Pair.

import javafx.util.Pair;

int x = 23;
int y = 98;
        
Pair<Integer, Integer> pair1 = new Pair<>(6, 7);
Pair <Integer, Integer> pair2 = new Pair<>(x, y);
于 2019-01-21T17:19:53.470 回答
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;

您还可以放入 getter、setter、equals、hashcode 等。

于 2012-04-19T18:34:00.773 回答
0

如果您可以使用低级结构并且迫切需要“字面”形式的“成对集”的紧凑形式——这在单元测试中发生在我身上,当我需要一组固定装置时——你可以简单地使用一个数组数组:

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

但请记住,这种类型没有语义——这完全取决于正确使用,如果您squares[0][1]在真正需要时键入,编译器不会给您警告squares[1][0]

于 2012-04-19T18:38:19.427 回答
0

如果您需要避免重复,那么 HashSet 将是一个不错的选择,但不是 ArrayList 会起作用。

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

或者

ArrayList<IntPair> list = new ArrayList<IntPair>();
于 2012-04-19T18:50:03.250 回答
0

方式 1:使用 javafx.util.Pair 类

Pair<Integer> myPair1 = new Pair<Integer>(10,20);
Pair<Integer> myPair2 = new Pair<Integer>(30,40);
HashSet<Pair<Integer>> set = new HashSet<>(); // Java 8 and above
set.add(myPair1);
set.add(myPair2);

方式 2:使用大小为 2 的 int[]

int[] myPair1 = new int[] {10,20}; // myPair1[0]=10 , myPair[1] = 20
int[] myPair2 = new int[] {30,40};
HashSet<int[]> set = new HashSet<>(); // Java 8 and above

方式3:将pair转换为单个数字

int myPair1 = 10 * 1000 + 20; 
// int first = myPair1 / 1000; second = myPair2 % 1000;
int myPair2 = 30 * 1000 + 40;
HashSet<Integer> set = new HashSet<>();
set.add(myPair1);
set.add(myPair2);

方式 4:在方式 2 中使用 ArrayList 而不是 int[]

方式 5:内部使用 HashSet 和 Pair 的自定义类

于 2021-08-01T16:37:32.020 回答