如何在java中存储一组配对数字?我是使用列表或数组还是其他东西?
例如。 [(1,1),(2,1),(3,5)]
答案 0 :(得分:10)
有几个选择:
编写自定义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
可能适用于此。
答案 1 :(得分: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等。
答案 2 :(得分:0)
如果您可以使用低级结构并且迫切需要紧凑形式的“文字”形式的“一对” - 在单元测试中我会遇到这种情况,当我需要一套灯具时 - 您可以简单地使用一个数组数组:
int[][] squares = {
{ 1, 1 },
{ 2, 4 },
{ 3, 9 }
};
但请记住,这种类型没有语义 - 这一切都取决于正确使用,如果您在真正想要squares[0][1]
时键入squares[1][0]
,编译器不会给您一个警告
答案 3 :(得分:0)
如果你需要避免重复,那么HashSet将是一个不错的选择,但它不会起作用。
Class IntPair(){
int i;
int j;
}
HashSet<IntPair> set = new HashSet<IntPair>();
或
ArrayList<IntPair> list = new ArrayList<IntPair>();
答案 4 :(得分:0)
您可以使用配对类!
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);
希望对您有所帮助!
答案 5 :(得分:0)
方式一:使用 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:将配对转换为单个数字
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 的自定义类