从对象数组中的HashMap对象创建指针

时间:2013-01-31 20:20:56

标签: java arrays object pointers hashmap

这是我发表的第一篇文章的后续文章,假设我有两个课程:

public class Carinfo {

    private String carname;
    //The Carinfo[] value is set when making a new car
    //so for the object ford the array holds 3 null pointers
    private Carinfo [] value; 

    Carinfo (String someCar, int carValue) {
        this.carname = someCar;
        this.value = new Carinfo[carValue];
    }
}

第二节课:

public class CarPark {

    HashMap<String, Carinfo> carGarage;

    CarPark() {
        carGarage = new HashMap<String, CarInfo>();

        Carinfo ford = new Carinfo("Ford", 3);
        Carinfo audi = new Carinfo("Audi", 2);

        carGarage.put("Ford", ford);
        carGarage.put("Audi", audi);
    }
}

因此,无论出于什么原因,我想要拥有3个空指针的对象福特 在其Carinfo数组中,指向对象audi。 意思是我可以浏览Carinfo对象并列出每辆车的指针 有其他车。

把它想象成一个家庭,我想看看哪些车相互关联。 我很难创建一个指向其他对象的方法 在我的Carinfo HashMap中。

任何“指针”?如果有任何不清楚的地方,请让我改写或尝试更好地解释它。

干杯

3 个答案:

答案 0 :(得分:1)

我真的不明白你要做什么。实现这一目的的一种方法是提供添加关系的特定方法。例如,使用您的阵列,您可以这样做:

public class CarInfo {
  private Carinfo[] value;
  public void addCarInfo(CarInfo carInfo, int position) {
    value[position] = carInfo;
  }
}

无论如何,拥有一个数组并不是一个好主意,你应该使用List。

答案 1 :(得分:1)

我建议存储Carinfo对象本身内的汽车之间的关系。相反,您应该使用通用图形库(或编写您自己的通用图形库)。

您可能知道,graph是一组节点和边,每条边代表两个节点之间的关系。您当前代码描述的概念实际上只是一个有向图:每辆车都是一个节点,每辆车都可以容纳一定数量的其他车辆参考,其中每个车辆代表从该车指出的边缘。

图形是数学和计算机科学中常见的抽象概念,已经实现了大量的库来表示图形,并且有利于为使用库的任何代码解决几个常见问题(例如,找到多步关系)两辆车之间使用最少数量的边缘,或找到图表中所需的最小边数以确保所有车辆仍然间接连接)。我建议搜索已经实现的图形库,然后使用具有最佳功能的图形库来解决整体问题。但是,如果这是一项家庭作业,您应该实现自己的图形库。这不是太难:你需要以某种方式存储节点和边缘(你可以保留一个节点列表,你可以使用边缘列表或邻接矩阵来存储边缘),你需要提供你关心的算法以更为一般的形式。这可能看起来更有效,但使代码更加模块化的好处将很快得到回报。您首先会创建更少的错误,因为您的代码的每个部分只执行一个作业,并且您将能够更轻松快速地修复错误,这可能会节省您的整体时间。

答案 2 :(得分:0)

对于初学者,您需要访问CarInfo对象上的方法才能使用您设置的值数组。

public CarInfo[] getCarValue() {
  return value;
}

现在,当你正在玩一个方法时,你可以按如下方式调用它:

CarInfo[] fordValueArray = carGarage.get("Ford").getCarValue();

此数组现在指向您在CarPark()的第3个命令上创建的数组。

我们可以这样做:

fordValueArray[0] = audi;

现在,所有人都说,似乎有点不清楚为什么你要建立这样的阶级关系。 value的命名看似不直观,因为面值你所问的是我们如何让汽车的价值与其他一些汽车无关。福特的第一个价值是奥迪?另外两个值是什么?为什么我们会被限制在3?