如何在java中存储一对数组?

Ben*_*ier 16 java arrays

我是java的新手,我想存储一对双打的数组.我的代码看起来像这样:

import java.util.ArrayList;
import java.util.Map.Entry;

List<Entry<Double, Double>> values = new ArrayList<>();
Entry<Double, Double> pair;
// set pair values:
// pair.setKey(0.5); // this method does not exists
// pair.setValue(3.6);
values.add(pair);
Run Code Online (Sandbox Code Playgroud)

如何初始化pair变量?是否有更好的结构来存储我的双打数组?

hmj*_*mjd 15

创建自己的类来表示一对,并添加一个带有两个参数的构造函数:

public class MyPair
{
    private final Double key;
    private final Double value;

    public MyPair(Double aKey, Double aValue)
    {
        key   = aKey;
        value = aValue;
    }

    public Double key()   { return key; }
    public Double value() { return value; }
}
Run Code Online (Sandbox Code Playgroud)

请参阅此答案,了解PairJava中不存在的原因:Java 中的C++ Pair <L,R>的等价物是什么?

  • 请参阅此答案,了解为什么不存在这样的"配对":http://stackoverflow.com/questions/156275/what-is-the-equivalent-of-the-c-pairl-r-in-java (4认同)
  • 我很惊讶没有什么东西可以在标准的java库中用于这么简单的事情 (2认同)

Jaz*_*epi 5

你不想使用Entry这是一个INTERFACE,而不是CLASS.当您在实现Map的类上调用entrySet()时,该接口由Set的实现使用.它基本上允许您操作实现的Map,就好像它是一个Set.

你会做什么(但不能)就是这样.如果您尝试这样做,您将看到编译器错误的行"无法实例化Map.Entry类型".那是因为Map.Entry是一个接口,而不是一个类.接口不包含任何实际代码,因此这里没有真正的构造函数.

Entry<Double, Double> pair = new Entry<Double, Double>();
Run Code Online (Sandbox Code Playgroud)

如果你看下面的文档,你可以在顶部清楚地看到它是一个"Interface Map.Entry",这意味着它是一个界面. http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Map.Entry.html

您应该做什么而不是尝试实例化一个接口,这是不可能的,就是创建一个名为Pair的类.像这样的东西.如果您使用以下代码,请记得更改包.

package org.mike.test;

public class Pair {
    private double x = 0.0;
    private double y = 0.0;

    public Pair(double x, double y)
    {
        this.x = x;
        this.y = y;
    }

    public Pair()
    {

    }

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }


}
Run Code Online (Sandbox Code Playgroud)

编写Pair类后,您的代码现在看起来像这样.

package org.mike.test;

import java.util.ArrayList;
import org.mike.test.Pair; //You don't need this if the Pair class is in the same package as the class using it

public class tester {

    /**
     * @param args
     */
    public static void main(String[] args) {
        ArrayList<Pair> values = new ArrayList<Pair>();
        Pair pair = new Pair();
        // set pair values:
        pair.setY(3.6);
        pair.setX(3.6);
        values.add(pair);
    }

}
Run Code Online (Sandbox Code Playgroud)