java - 存储 POJO 数组 - java 中更好的选择是什么?

标签 java android collections pojo

我有从 JSON 解析的 POJO。

Account [] accounts; 

class Account {
  Integer number;
  String name;
  String location;
  Date started;
}

我从 JSON API 调用获取帐户列表。 Jackson 映射器将生成的 JSON 映射到上面的 POJO。 我需要对这些对象进行搜索和其他操作。

我不知道如何存储这些来进行搜索并显示它们(在 Android 中)。

ArrayList
Map
HashTable
...

等等。搜索应该很快。我平均拥有大约 500 个帐户。映射已完成,我现在将对象放在数组中。但不知道如何从这里开始。

此外,我对 Java 集合和泛型相当陌生。因此任何带有方向的代码示例都会有所帮助。

谢谢!

最佳答案

五百个帐户实际上并不是一个巨大的数字,如果您的应用程序很小并且很少使用(这意味着它不是一个具有数千个同时查询的网络服务),您也许可以摆脱线性搜索。

假设情况并非如此,而且这似乎是一个不错的假设,您应该为那些您希望经常查询的字段构建索引。如果您主要搜索名称,您可以使用名称的小写版本构建一个 HashMap

nameIndex = new HashMap<String, Account>();
for (Account a : accountArray) {
    nameIndex.put(a.name.toLowerCase(), a);
}

然后,对于“确切名称”搜索,您将搜索查询小写,然后调用 nameIndex.get

也可以按日期搜索,但在这里我希望您按日期范围搜索。在这种情况下,您可能想要构建排序列表索引或树索引。然后,您可以导航列表或树以找到所需的范围。

您还可以通过名称正则表达式或我的名字邻近度(二元组、三元组)进行查找,有很多选项。

顺便说一句,数据库在这种事情上做得很好。您可能会考虑只填充嵌入式数据库,例如 H2 ,尽管这可能有点过分了?不过,学习很有趣。除了数据库之外,您还可以免费获得并发控制和缓存!

TL;DR:为您将经常使用的查询构建 HashMap 或树形图或普通排序列表索引,并对复杂的自定义查询进行线性搜索。或者,这可能是首选:使用嵌入式数据库。

关于java - 存储 POJO 数组 - java 中更好的选择是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12469108/

相关文章:

java - 使用 JAXB 映射包含父类(super class)型和子类型的 Java 集合

java - android中字符串的 Camel 大小写验证

android - 从 DialogFragment 中的 EditText 获取文本

java - 如何在 Controller 类中引用 Stage?

android - Canvas : trying to draw too large(151099200bytes) bitmap

Android:即使指定了 duplicateParentState,子元素也会与其父元素共享按下状态

django - 如何在 Django 中加载主干的引导模型

c# - 如何向 SqlParameter[ ] 集合添加新参数?

java - 一个在某个网站上搜索的java程序

java - GridView getView 问题