【问题标题】:Which is better HashMap vs POJO ( Getter Setter , Model Class) in Java and AndroidJava和Android中的HashMap vs POJO(Getter Setter,Model Class)哪个更好
【发布时间】:2014-09-30 09:24:01
【问题描述】:

在某些情况下,我当时遭受了手术,

我们可以将 HashMap 或模型类 (POJO) 用作 ArrayList Generic,如 ArrayList<HashMap<K,V>>() OR ArrayList<ModelName>()

你能建议我从记忆的角度和性能的角度来看哪个更好。

我知道两者都更好,但我只是想知道我是否可以选择两种选择....哪个更好?

例如 假设我有 2 个变量都是 POJO 类中的字符串,并且两者都用于 HashMap。

所以我们有列表对象 Like..

  final  ArrayList<Abc> listAbc = new ArrayList<Abc>();

 for(final int i=0;i<2;i++){
    Abc modelAbc = new Abc();
    abc.setName("name");
    abc.setLastName("lastName");
    listAbc.add(modelAbc);
  }

在这种情况下,我必须采用 ABC 类的两个对象,

在带有 List 对象的 HashMap 中,它将...

final ArrayList<HashMap<String,String>> listMap = new ArrayList<HashMap<String,String>>();

for(final int i=0;i<2;i++){
 HashMap<String,String> hashAbc = new HashMap<String,String>();
 hashAbc.put("NAME","firstName");
 hashAbc.put("LASTNAME","lastName");
 listMap.add(hashAbc);
}

在这种情况下,我必须使用 HashMap 的两个对象。

现在告诉我,我必须使用哪个才能获得更好的性能? 哪个是高内存占用者?

【问题讨论】:

  • 这取决于您的用例。请说明具体任务
  • 你的问题不清楚。 HashMap 和 POJO 没有可比性。用你的用例详细说明问题。
  • 我认为您指的是 Java Bean 而不是 POJO
  • 如果您担心 POJO/Bean 与 Map 的比较性能,那么您很可能是在考虑错误的事情。它们唯一的共同属性是它们允许存储和访问许多属性/值对。它们以不同的方式存储这些“对”,因此内存消耗和访问性能会有所不同。您应该阅读 (Hash)Map 及其内部工作原理。然后您可能会意识到 Map 的性能将取决于您放入 Map 中的实际 Key...

标签: java android data-structures hashmap


【解决方案1】:

一般来说,您使用集合(ListMapSet)来存储具有相似特征的对象,这就是泛型存在的原因。因此,使用Map 存储多个类的对象会迫使您在获取时强制转换您存储的每个对象,这不是我们可以编写的最干净的代码。此外,即使使用HashMap(使用hashCode 值可以轻松获取对象),访问速度也比Java Bean 属性慢...并且您必须始终确保这些对象具有良好的hashCode()发电机。但无论如何,我无法想象这何时会成为常规应用程序的性能瓶颈。

所以我的建议是每次在编译时知道要存储多少个属性及其类时使用 Java Bean,使用 Map 来存储同一类的元素。

例如,如果您有一个包含用户的数据库表,并且您想“缓存”用户以快速访问他们中的任何人,您可以执行以下操作:

class User {
    long id;
    String name;
    ... //other attributes

   //setters and getters
}

然后将它们存储在地图中,以便通过它们的 id 快速访问它们:

Map<Long,User> usersMap= new HashMap<>();
...
usersMap.put(user.getId(),user);

【讨论】:

  • 怎么样,而不是多个原始属性(就像我们习惯在 POJO 中看到的那样),您只有一个属性,它是列表映射的映射映射?
  • 我认为这回答了我的问题:softwareengineering.stackexchange.com/a/130000
【解决方案2】:

我认为快速查找不是您的用例,因为您使用 Map 的方式无法在 O(1) 中按名称查找。

此外,您要为每个要存储的名称=值对条目创建 1 个新映射,这会浪费空间。

我宁愿建议,如果你有一些唯一可用的键(比如整数 ID),然后将你的结构存储在 HashMap 中,如下所示:

Map<Integer, Model> m = new HashMap<Integer, Model>();

现在这可以用于快速查找以及存储模型的所有属性。而且您始终可以使用 m.values(); 访问您的所有模型对象;方法。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 2013-07-09
    • 2019-12-14
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多