java - List<Map<String, String>> 备选方案 (Java)

标签 java data-structures

我是 Java 新手,我正在制作一个用于包装此类数据的结构:

Object:
    name:'Obj1'
    otherAttr:'...'
Object:
    name:'Obj2'
    otherAttr:'...'
Object:
    ...

我知道我可以制作我的自定义“对象”类*,但是为了使用内置 java 结构,我使用 List<Map<String, String>> .因此,要设置新的:

List<Map<String, String>> objects = new ArrayList<Map<String, String>>();
foreach(databaseRow){
    Map<String, String> newObject = new HashMap<String, String>();
    newObject.put('name', '...');
    newObject.put('otherAttr', '...');
    objects.add(newObject);
}

我有两个问题:

1- 如果结构的初始化(作为 ArrayListHashMap)是大量 Java 结构之间的最佳选择。

2- 如果有一个内置结构不暗示所有这些初始化(对于 List 和每个 Map)。

谢谢!

(*)澄清:我在我的代码中使用了大量类似的结构,我会避免创建大量自定义类。但如果这是最好的方法,那就去做吧!

最佳答案

如果您的每个对象都只有这两个属性(name 和 otherAttr),您可以创建一个带有字段的类而不是使用 Map:

public class Data {
    private final String name;
    private final String otherAttr;
    // constructor, getters
}

即使您有更多属性,这样做也可能很有用,因为它为您提供了编译时安全性——您永远不会拼错 key 。您还可以拥有不同类型的字段,而不仅仅是必须解析的字符串。

为了使您的代码更有意义,您还可以扩展现有的数据结构,例如:

public class Data extends HashMap<String, String> {
    // extra convenience constructors
}

public class DataList extends ArrayList<Data> {
    // extra convenience constructors
}

关于您要使用哪些集合的问题,这实际上取决于您的需要。 ArrayList 通常是一个不错的选择(或线程安全的 Vector),除非您经常修改列表的开头,在这种情况下 LinkedList 将是受到推崇的。 HashMap 具有很好的性能,但如果您需要排序数据,您可以使用 TreeMap 代替。如果你需要维护插入顺序,LinkedHashMap 将是最好的。

关于java - List<Map<String, String>> 备选方案 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28741116/

相关文章:

java - Eclipse 强制执行严格的 Java 代码格式

java - 匹配的正则表达式以以下结尾

java - 随机化单选组中的单选按钮

java - Android 服务在启动/恢复时短暂为空

python - Python 中的双向链表

java - 支持删除的不相交集合数据结构

java - 如何通过 JDBC 访问 Windows 版 Blackfish?

java - 在java中存储10,000条记录的最佳数据结构

algorithm - 调度工作流的数据结构?

c++ - 在树中我得到错误没有匹配函数调用函数但是我使用模板正确地完成了它