首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中存储成对数组?

问如何在Java中存储成对数组?
EN

Stack Overflow用户
提问于 2012-03-05 22:35:35
回答 10查看 91.2K关注 0票数 18

我是Java新手,我想存储一对双精度数组。我的代码如下所示:

代码语言:javascript
复制
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);

如何初始化pair变量?有没有更好的结构来存储我的双精度数组?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-03-05 22:37:18

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

代码语言:javascript
复制
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; }
}

有关Pair在Java中不存在的原因,请参阅此答案:What is the equivalent of the C++ Pair in Java?

票数 17
EN

Stack Overflow用户

发布于 2012-03-05 23:01:58

你不想使用Entry,它是一个接口,而不是一个类。当您在实现映射的类上调用entrySet()时,Set的实现将使用该接口。它基本上允许您操作实现的Map,就好像它是一个集合。

你会做的(但不能)是这样的。如果你尝试这样做,你会看到一个编译器错误"Cannot instantiate the type Map.Entry“。这是因为Map.Entry是一个接口,而不是一个类。接口不包含任何真正的代码,所以这里没有真正的构造函数可以运行。

代码语言:javascript
复制
Entry<Double, Double> pair = new Entry<Double, Double>();

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

您应该做的是创建自己的类Pair,而不是尝试实例化一个接口,这是不可能的。就像这样。如果您使用下面的代码,请记住更改包。

代码语言:javascript
复制
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;
    }


}

在编写了您的Pair类之后,您的代码现在将如下所示。

代码语言:javascript
复制
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);
    }

}
票数 6
EN

Stack Overflow用户

发布于 2013-10-30 08:04:40

你就不能直接用

代码语言:javascript
复制
public class MyClass<A,B> extends ArrayList{
private A first;
private B second;
public MyClass(A first, B second){
super();
this.first = first;
this.second = second;}
}

然后添加某种形式的add方法,以及第一个和第二个访问器&赋值器方法?我是一个编程新手,但是这种方式似乎可以工作,并且除了DOUBLE之外,还可以访问其他东西(以防以后您想要使用其他类型,如Integer,甚至String)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9568403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档