【问题标题】:Java create object of two parametersJava创建两个参数的对象
【发布时间】:2017-07-27 06:59:06
【问题描述】:

我想知道是否可以创建一个具有两个参数的类对象。实际上,我希望在我的 hashmap 中存储两个具有相同键的值(double,int),如下所示:

{1 = (4.0, 5),.... }

所以,我做了类似的事情,但我不知道如何得到上面的结果:

public class Dijkstra{
private final List<Integer> L;
private final int V;
private final int P;
private final double C;

  public Dijkstra(){
      L = new ArrayList<>();
  }

//Create my object to put after in my hashmap
public Dijkstra(int P, double C){
this.P = P;
this.C = C;
}
.....
public Map mymethod() {
Map<Integer, Object> m = new HashMap<Integer, Object>();
}
}

所以,我想用我的两个参数创建我的类的一个对象,把它放在我的哈希图中。 我怎样才能在java中做到这一点?

谢谢。

【问题讨论】:

  • Map&lt;Key, Dijkstra&gt; ...?
  • 但 Djkstra 有其他参数
  • 你想达到什么目的?
  • 您定义了一个包含两个元素的类,getter 和 setter。然后创建一个从 Integer 到该类的映射。
  • 是否可以用具有更多元素的同一个类来定义它?

标签: java object hashmap


【解决方案1】:

您需要为此创建一个恰好包含这两个值的类:

import java.util.*;

class MyValuePair {
    private int intValue;
    private double doubleValue;

    MyValuePair(double doubleValue, int intValue) {
        this.intValue = intValue;
        this.doubleValue = doubleValue;
    }

    //Getter and Setter as well as constructor(s) as needed
    public String toString() {
        return "(" + doubleValue + ", " + intValue + ")";
    }

}

public class Dijkstra {

    static Map<Integer, MyValuePair> map = new HashMap<>();

    public static void main(String[] args) {
        MyValuePair pair = new MyValuePair(4.0, 5);
        map.put(1, pair);
        System.out.println(map);
    }

}

因此,您的值对进入 MyValuePair,而该类的对象将进入 Map。如果需要,您可以为它创建一个新的公共类(= 在带有 public 关键字的新文件中)或将其作为内部类保留在那里。

Lists 的任何其他内容以及您需要的任何内容都将放在 Dijkstra 类中。

评论后:

如前所述,这是可能的!但你不想那样做。然而,这将是一个在 Dijkstra 类也保存值的情况下执行相同操作的代码:

public class Dijkstra {

    static Map<Integer, Dijkstra> map = new HashMap<>();

    private double doubleValue;
    private int intValue;

    public Dijkstra(int intValue, double doubleValue) {
        this.intValue = intValue;
        this.doubleValue = doubleValue;
    }

    public String toString() {
        return "(" + doubleValue + ", " + intValue + ")";
    }

    public static void main(String[] args) {
        Dijkstra pair = new Dijkstra(4.0, 5);
        map.put(1, pair);
        System.out.println(map);
    }

}

【讨论】:

  • 好的。我的问题是为什么不在同一个类中创建一个具有两个参数的对象,即使它有两个以上的参数。为什么在java中不可能?
  • 有可能。那么问题是你会浪费很多内存,而且你的课程不止一个目的。您通常希望一个类是为一件事设计的。在您的情况下,Dijkstra 应该保存当前路径的收集值(我假设)并提供计算路径的方法。它不应该有为自己持有价值的第二个目的。
  • 我添加了一种方法来做我认为你在想的事情,但是再次......我建议不要这样做。
  • 非常感谢您的解释。我更喜欢第一个解决方案,因为它将是同一个文件并且不会浪费内存。事实上,这个对象只适用于 Dijkstra 类。
【解决方案2】:

您应该创建一个新类来表示您的 intdouble 参数表示为:

public class MyRepresentaion{
    private int myInt;
    private double myDouble;

    public MyRepresentation(int myInt, double myDouble){
        this.myInt = myInt;
        this.myDouble = myDouble;
    }

    public int getMyInt(){
        return myInt;
    }
    public double getMyDouble(){
        return myDouble;
    }
    public void setMyInt(int value){
        myInt = value;
    }
    public void setMyDouble(double value){
        myDouble = value;
    }
}

然后您应该将您的 MyRepresentaion 对象放入地图中:

public Map mymethod() {
    Map<Integer, MyRepresentaion> m = new HashMap<Integer, MyRepresentaion>();
}

【讨论】:

  • Dijkstra 没有声明为一个类,而是两个方法。
  • 但是 Dijkstra 的元素比我的两个元素 (P,C) 多
猜你喜欢
  • 2021-07-20
  • 2014-09-22
  • 2011-09-29
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多