我写了一个程序,我有4个数字。 第一个数字是ID。 (INT) 其他3个只是地图上的点。 (双)
我想在它自己的类中创建一个数组数组,理想情况是它存储这3个数字并使用第一个作为ID。
arraylist是一个好方法吗? 我真的只是在努力研究数据结构。这很简单。我只需要在一个数组数组中存储一堆数字。我能做到。然而,将其存储在不同的类中是困难的。
答案 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中的MultiMap
:See 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
您还可以在此处查看番石榴版本(最新版):
答案 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数组中的值并遍历每个键。