1

我正在学习 Java,并试图围绕这些数据结构进行思考。我来自 Python/PHP,所以我习惯于动态调整数组大小,并能够在一个数组中存储多种数据类型。

我将如何最好地存储这些数据?假设我不知道我将拥有多少行,但我知道每行将包含 2 列数据。一列是字符串,另一列是双精度。

如果我有 3 行,则以伪代码为例:

array(array("description1", 10.00),
      array("description2", 12.00),
      array("description3", 14.00));

然后,我想遍历数组以处理数据,例如:

foreach(rows as row){
    myStringVal = row[0]; //on first iteration would be "description1"
    myIntVal = row[1];    //on first iteration would be 10.00
    ... do something with the values ...
}

我在想我需要创建一个包含数组的arraylist,但是我不能在java数组中同时存储字符串和双精度值,那我该怎么办?我是否改用地图,并将其视为数组?例如,我是否创建一个映射,其中第一个元素是每行的数字 ID,第二个元素是字符串值,第三个元素是双精度值,然后我使用循环增加一个计数器并抓取每一行从使用数字 ID 的地图中>

真的很困惑这将如何工作。有什么建议么?谢谢!

4

3 回答 3

7

您不是在存储“不同类型的值”,而是在存储编码“元组”的语义数据,而是使用非 Java 概念将其粘贴在数组中。不要那样做,而是使用 C/C++/Java 将链接数据编码为结构/对象的概念:

// our "struct"esque class for the linked data we're handling
class MyObject {
  String description;
  float value;
  Public MyObject(String description, float value) {
    this.description = description;
    this.value = value;
  }
}

// build our list of objects
ArrayList<MyObject> mylist = new ArrayList<MyObject>();
mylist.add(new MyObject("description1", 10));
mylist.add(new MyObject("description2", 12));
mylist.add(new MyObject("description3", 14));
...

// and then we iterate
String d; float v;
for(MyObject m: mylist) {
  d = m.description;
  v = m.value;
  ...
}
于 2013-10-12T18:42:57.973 回答
2

对我来说它看起来像一个List<Map<String, BigDecimal>>

  • List将使您能够连续输入多个元素。
  • Map将为您提供String我选择表示的和浮点值之间的关联BigDecimal。如果你愿意,你可以使用Double

    List<Map<String, BigDecimal>> elements = new ArrayList<>();
    elements.add(new HashMap<String, BigDecimal>());
    elements.get(0).put("description1", BigDecimal.valueOf("10.00"));
    
于 2013-10-12T18:42:56.377 回答
0

使用类而不是数组。

public class X
{
    private final String description;
    private final double value;

    public X(final String desc,
             final double val)
    {
        decription = desc;
        value      = val;
    }

    // getters
}

如果您希望能够更改描述和值,请不要将它们设为最终版本。

您可以公开descriptionandvalue变量,但我会避免这种诱惑。

于 2013-10-12T18:42:46.143 回答