【问题标题】:Java: How to create an array of objects which include arrays?Java:如何创建包含数组的对象数组?
【发布时间】:2010-12-31 15:42:44
【问题描述】:

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

public class Product {

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

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

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

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

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

谢谢!

【问题讨论】:

  • 事实证明,很多人都以不同的方式提出了您的问题,所以也许澄清一下是件好事。

标签: java android arrays list collections


【解决方案1】:

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

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

你可以像这样迭代它:

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

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

【讨论】:

  • 噢,谢谢,丹尼尔! “所有已知的实现类”部分似乎有点短。 :-)
【解决方案2】:

为什么不创建一个地图,其中键是产品,值是点列表。

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
  }
}

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      以下任何一个都可以:

      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 接口。

      【讨论】:

        【解决方案5】:

        Product 中的 ArrayList 就足够了。

        但你的算法最好是Product-centric,而不是Point-centric。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-20
          • 1970-01-01
          相关资源
          最近更新 更多