如何在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
容易,但对类、其字段和它的方法。
如果我们更多地了解您实际使用它的目的,我们或许能够提供更详细的建议——据我们所知,aMap
可能适合这里。
如果您使用的是 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);
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 等。
如果您可以使用低级结构并且迫切需要“字面”形式的“成对集”的紧凑形式——这在单元测试中发生在我身上,当我需要一组固定装置时——你可以简单地使用一个数组数组:
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>();
方式 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 的自定义类