Java:如何创建包含数组的对象数组?

时间:2010-01-01 19:23:30

标签: java android arrays list collections

我想创建一个名为Product(Listproducts)的列表对象,其中Product包含以下成员:

public class Product {

private Double price;
private String title;
private String description;
private List<Point>points;
...
}

Point是另一个包含纬度和经度的对象:

public class Point{
Double lat;
Double lng;
...
}

在应用程序中,我首先必须从XML文件创建列表列表产品,然后在地图上显示产品。一个产品可以位于多个位置。 有谁知道什么是最合适的方式来创建结构(列表或链表),这是最容易迭代并能够链接列表?

逻辑应该按以下方式工作: 1.从列表中读取每个点 2.检查哪个产品属于该点 3.在地图上显示产品信息

谢谢!

5 个答案:

答案 0 :(得分:3)

为什么不创建一个Map,其中键是产品,值是Points列表。

Map<Product, List<Point>> productPoints = new HashMap<Product, List<Point>>();

for (Product prod: productPoints) {
  for (Point point : productPoints.get(prod)) {
     // construct the point and add the product info to the point
  }   
}

如果需要,您还可以按产品轻松过滤地图上的点。

或者如上所述使用List接口,以便稍后可以使用最少的代码更改来更改实现。

List<Product> products = new ArrayList<Product>();
for (Product prod : products) {
  for (Point point : prod.getPoints()) {
     // construct the point and add the product info
  }
}

答案 1 :(得分:2)

ArrayList的{​​{1}}就足够了。

但您的算法最好以Product为中心,而不是以Product为中心。

  1. 遍历所有产品
  2. 迭代当前产品中的所有点
  3. 将产品信息添加到点

答案 2 :(得分:1)

任何实现Iterable的类(从Iterator返回Collections Framework)都可以使用Java 1.5中引入的for-each语法方便地进行迭代。您的顶级系列将是

List<Product> products = new ArrayList<Product>();

你可以像这样迭代它:

for (Product p : products) { ... }

通过使用接口类型List,您可以根据需要更改为另一个List实现。

答案 3 :(得分:0)

其中任何一个都完全没问题:

List<Product> products = new ArrayList<Product>();

int numProducts = DEFAULT_VALUE; // Have to know this in advance.
Product [] products = new Product[numProducts];

您在这里真正要求的是“如何将XML绑定到Java对象?”

查看javax.xml.bind Marshaller和Unmarshaller接口。

答案 4 :(得分:0)

如果我理解正确,您需要能够找到给定产品的所有积分,反之亦然?我认为你应该在这种情况下添加List to Point。如果您只是要迭代它们,我会使用LinkedList。