在自己的类中存储数组数组?

时间:2012-10-22 15:27:56

标签: java arrays class data-structures

我写了一个程序,我有4个数字。 第一个数字是ID。 (INT) 其他3个只是地图上的点。 (双)

我想在它自己的类中创建一个数组数组,理想情况是它存储这3个数字并使用第一个作为ID。

arraylist是一个好方法吗? 我真的只是在努力研究数据结构。这很简单。我只需要在一个数组数组中存储一堆数字。我能做到。然而,将其存储在不同的类中是困难的。

11 个答案:

答案 0 :(得分:3)

由于Java是面向对象的语言,因此只需使用自定义类:

class MyPoint {
  double x, y, z;
}

或者如果你真的需要一个数组

class MyPoint {
  double[] coords;
}

然后它取决于你的id是什么,如果它是一个没有“漏洞”的自动增量值,如果你需要随机访问,你可以拥有ArrayList<MyPoint>

如果它是稀疏索引并且您仍然需要随机访问,那么请使用HashMap<Integer, MyPoint>。如果您需要订购它们(按ID或按位置),您可以使用TreeMap<Integer, MyPoint>

答案 1 :(得分:1)

如果这三个点彼此相关,请考虑为它们引入类型,例如MyPoints并将它们存储在地图中以便查找:

Map<Integer, MyPoints> myMap = new HashMap<Integer, MyPoints>

请务必覆盖hashCode的{​​{1}}和equals方法,以使地图按预期运行,即考虑两个内容相同的MyPoints个实例。

答案 2 :(得分:1)

您还可以使用Map并将您的ID用作Key,然后使用带有积分的数组。

Map<Integer,Double[]> map = new HashMap<Integer,Double[]>();

答案 3 :(得分:0)

无需创建新的类4。

Number[][] lst = {{1, 3.0, 4.0, 11.0, 443.f}};

或类似的东西:

HashSet<Integer, <ArrayList<Double>> items = new HashSet<Integer, <ArrayList<Double>>();

答案 4 :(得分:0)

我的解决方案就是这样。

class MyPoint {
    int id;
    double[] coordinate= new double[3];
    MyPoint(int id, double x,double y, double z) {
        this.id = id;
        coordinate[0]= x;
        coordinate[1]= y;
        coordinate[2]= z;
    }

    public int getId() {
        return id;
    }

    public double[] getCoordinate() {
        return coordinate;
    }
}

class MyPoints extends ArrayList<MyPoint> {
    public void addPoint(int id, double x,double y, double z) {
        super.add(new MyPoint(id,x,y,z));
    }
}

注意: 如果你需要找到带有id的MyPoint,那么你可以使用HashMap;

class MyPointWithHashMap extends HashMap<Integer,MyPoint> {
    public void addPoint(int id, double x,double y, double z) {
        super.put(id,new MyPoint(id,x,y,z));
    }
}

答案 5 :(得分:0)

我可能会为你的三点坐标系创建一个包装类,但不会为包括ID在内的整个东西创建一个包装类。 ID可能应该是分开的,因为它是一个高于坐标本身的抽象级别。

public class Point {

    double x, y, z;

    //standard constructors, getters, setters

}

然后,无论你在哪里使用它,你都可以......

HashMap<Integer, Point> map = new HashMap<Integer, Point>();
int id = 0;

......并为你的每一点......

map.put(id++, point);

这使得每个坐标集都具有唯一的ID,而不会使ID成为对象的固有部分。

答案 6 :(得分:0)

为什么不在控制器类中创建模型类并使用它?我认为这会更容易。

class SomeModel {
    // getters and setters }


class Controller {
   public SomeModel model;

   //getter and setter for model
   }

答案 7 :(得分:0)

为什么不使用Apache Commons Collections中的MultiMapSee here

MultiMap关联同一个键的多个值。 (这是透明的,这就是MultiMap在这种情况下有用的原因。)

MultiMap idWithDoubles = new MultiHashMap();
 idWithDoubles.put(1, 1.1);
 idWithDoubles.put(1, 1.2);
 idWithDoubles.put(1, 1.3);

然后,您可以检索特定ID的双打列表:

 List list = (List) idWithDoubles.get(1);

默认返回ArrayList,其值为:1.1,1.2,1.3

您还可以在此处查看番石榴版本(最新版):

http://guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/collect/Multimap.html

答案 8 :(得分:0)

如果需要混合类型(int / double),那么你需要一个类。像这样:

public class MapPoints {
    private int id;

    private double point1;

    private double point2;

    private double point3;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setPoint1(double point1) {
        this.point1 = point1;
    }

    public double getPoint1() {
        return point1;
    }

    public void setPoint2(double point2) {
        this.point2 = point2;
    }

    public double getPoint2() {
        return point2;
    }

    public void setPoint3(double point3) {
        this.point3 = point3;
    }

    public double getPoint3() {
        return point3;
    }

}

如果你只有3分,我不明白为什么你甚至不愿意使用数组。这只是引入ArrayIndexOutOfBoundsException的可能性。

之后,你可以拥有一个ArrayList对象来保存所有这些。

但是,如果ID可以是浮点数,那么Peter的回答更有意义。

答案 9 :(得分:0)

正弦java是OO

public class MyPoint extends Point.Double{

    private double z;

    public MyPoint(double x, doubley, doublez) {
        super(x, y);
        this.setZ(z);
    }

    public double getZ() {
        return z;
    }

    public void setZ(double z) {
        this.z = z;
    }

    public String toString() {
        return "MyPoint[" + x + ", " + y + ", " + z + "]";
    }

}

答案 10 :(得分:0)

使用Map

Map<Integer, Double[]> map = new HashMap<Integer, Double[]>();

因此,对于每个Integer IF,您都有一组关联的值。

遍历HashMap

Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry hashValues = (Map.Entry)it.next();
    System.out.println(hashValues.getKey() + " = " + hashValues.getValue());
}

获取Double数组中的值并遍历每个键。