java实现(具有不同数据类型的列表)

时间:2011-10-05 13:46:24

标签: java list types

我还不太熟悉Java。我有一个应该包含List的类。可以想象这个列表代表表中的一行(列名,某种类型的值):

Name - "Oskar",
Age - 28,
weight - 75.5,
weightUnit - "kilogram",
...

由于列表的内容应该灵活,我不能使用类成员变量。 基本上,程序员对内容视而不见。但是,在某些时候 - 我必须用双值提取所有条目。你会如何实现这样的东西?

4 个答案:

答案 0 :(得分:3)

将信息封装在对象中,然后获得所述对象的列表。例如,

public final class TableRow{
    private final String name;
    private final int age;
    private final double weight;
    private final String weightUnit;

    public TableRow(String name, int age, double weight, String weightUnit){
        ...
    }

    // include accessors
}

然后另一个类中的列表声明就是这样,

List<TableRow> list = new ArrayList<TableRow>();

答案 1 :(得分:1)

您可以创建一个表示列的类,然后将一行表示为列列表:

public class Column {
    private String name;
    private Class clazz;
    private Object value;

    public Column(String name, Class clazz, Object value) {
        this.name = name;
        this.clazz = clazz;
        this.value = value;
    }

    // ...
}

您的数据将是:

List<Column> row = new ArrayList<Column>();
row.add(new Column("Name", String.class, "Oskar"));
row.add(new Column("Age", Integer.class, 28));
row.add(new Column("weight", Double.class, 75.5));
row.add(new Column("weightUnit", String.class, "kilogram"));

但是,您似乎正在尝试创建数据库,因此您可能希望Table类具有List<ColumnDescriptor>,其中ColumnDescriptor就像高于Column类,只有没有值 - 只是名称和类型。然后可能有一个TableRow类,其中包含所有值的List<Object>。向表中添加行时,您需要验证这些值是否与该表的列类型兼容。

您可能希望了解JDBC为灵感而设计的方式。支持所有必需的通用性,功能性以及使其全部类型安全是很多工作。除非您真的需要ORM工具,自定义报告解决方案或实际数据库,否则您可能需要重新考虑设计并询问是否需要这么多的通用性。 (“做最简单的事可能有用。”)

答案 2 :(得分:0)

您可以使用HashMap

 Map<String, String> m = new HashMap<String, String>();

答案 3 :(得分:0)

如果您不想创建一个类。尝试这样的事情。

ArrayList<List> arrayList = new ArrayList<>();
arrayList.add(Arrays.asList("String 1", 2011.57, 5));
arrayList.add(Arrays.asList("String 2", 201.01, 16));
arrayList.add(Arrays.asList("String 3", 2012, NULL));
arrayList.add(Arrays.asList("String 4", 20.1, 19));

for (List list : arrayList) {
    System.out.println(
             list.get(0) + " " + list.get(1) + " " + list.get(2));
}

在上面的示例中。您可以创建一个ArrayList来存储分别具有{String,Double,Integer}数据类型的List集合。

注意:在Java中创建不同类型的列表是不明智的做法