数据结构用于存储具有唯一索引的数千个对象

Cho*_*hop 3 java data-structures

我正在使用Java SAX解析器读取一个巨大的xml文件:http://api.steampowered.com/IEconItems_440/GetSchema/v0001/? format = xml (2.82 MB)

此文件包含数千个"项目",每个项目都具有"名称","级别"等属性.其中一个属性是名为"defindex"的唯一整数标识符.我正在为每个项目创建POJO,上面提到的一些属性为字段(defindex就是其中之一).

  • 我需要通过搜索defindex来大量阅读这些项目对象
  • 我不会改变对象的数据字段

我的问题是:我应该如何存储这些物品?

我的第一个想法是将它们存储在一个数组中并使用defindex作为实际的数组索引,但是数组将是巨大的并且不是所有的defindex都被使用,例如它在一点上从2k跳到30k.

ame*_*eed 5

用一个Map.

Map 对象存储唯一"键"和值之间的关系.

实现MapHashMapTreeMap等等.它们是通用的,带有键和值的类型参数.

您可以使用以下内容.这是绝对的伪代码; 适应它然而你将要操纵这些对象.我没有考虑SAX API; 这只是演示如何使用Map.

Map<Integer, Item> items = new HashMap<Integer, Item>();
for (Item itemToRead : file) { // or however you iterate
    items.put(item.getDefindex(), item);
}

// data retrieval
Item itemToRetrieve = items.get(defindexToGet);
Run Code Online (Sandbox Code Playgroud)

  • 如果您的代码不是多线程的,我会使用HashMap.如果您需要某种形式的自动排序,请使用TreeMap; 一个人自动对你输入的所有键进行排序,你可以获得最大和最小键.(LinkedHashMap允许您按照放置在地图中的顺序遍历数据.)如果您的代码是多线程的,您可以尝试ConcurrentHashMap(包java.util.concurrent),但我不熟悉多线程.一般情况下,选择一个名称以"Map"结尾的人; 据我所知,其他人往往更专业. (2认同)