Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于存储具有唯一索引的数千个对象的数据结构_Java_Data Structures - Fatal编程技术网

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

Java 用于存储具有唯一索引的数千个对象的数据结构,java,data-structures,Java,Data Structures,我正在使用Java SAX解析器阅读一个巨大的xml文件: (2.82 MB) 此文件包含数千个“项”,每个项都具有“名称”、“级别”等属性。其中一个属性是名为“defindex”的唯一整数标识符。我正在为这些项中的每一项创建POJO,并将上面提到的一些属性作为字段(defindex就是其中之一) 我需要通过搜索defindex来阅读这些item对象 不过,我不会更改对象的数据字段 我的问题是:我应该如何存储这些项目对象? 我的第一个想法是将它们存储在一个数组中,并使用defindex作为实

我正在使用Java SAX解析器阅读一个巨大的xml文件: (2.82 MB)

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

  • 我需要通过搜索defindex来阅读这些item对象
  • 不过,我不会更改对象的数据字段
我的问题是:我应该如何存储这些项目对象?

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

使用一个数组

Map
对象存储唯一“键”和值之间的关系

Map
的实现包括
HashMap
TreeMap
。它们是泛型的,具有键和值的类型参数

您可以使用以下命令。这绝对是伪代码;调整它以适应您将要操纵这些对象的方式。我没有考虑SAXAPI;这只是演示如何使用
映射

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);
Map items=newhashmap();
对于(Item itemToRead:file){//或您迭代的方式
items.put(item.getDefindex(),item);
}
//数据检索
Item itemtoretrive=items.get(defindexToGet);

地图有什么问题?您可以使用单用户数据库(如或)来存储数据,然后可以使用标准SQL提取数据。这些都是可配置的,因此它们可以在内存或内存中运行disk@morgano28000个null。您命名了一些Map的实现,比如HashMap和TreeMap。是否有一个特定的Map实现特别适合于这种问题?如果您的代码不是多线程的,我就使用HashMap。如果您需要某种形式的自动排序,请使用TreeMap;这一个自动排序的所有关键,你把它,你可以得到最大和最小的关键。(LinkedHashMap允许您按照数据在映射中的顺序迭代数据。)如果您的代码是多线程的,您可以尝试ConcurrentHashMap(包java.util.concurrent),但我对多线程不太精通。通常,选择一个名称以
Map
结尾的名称;据我所知,其他人更倾向于专业化。