Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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_Memory_Data Structures_Structure - Fatal编程技术网

Java中的对象分组和对象组查询

Java中的对象分组和对象组查询,java,memory,data-structures,structure,Java,Memory,Data Structures,Structure,假设我的程序有一个简单的对象,Key,可以用作较大对象的键。(这超出了问题的范围)可能会有成百上千的这些键四处飞舞,因此确保这些对象的不同列表中的重复量最小是很重要的(这样我们就不会用无用的对象阻塞内存) 这里的问题是这些关键对象可能被分组,并且可能同时是多个组的一部分。让我们将这6个对象分成3个样本组: 有一个单一的、并发的列表来跟踪所有的组,并且可能会不断创建和删除几十个这样的组。但是,由于该组系统可用于查询操作,例如,该键在哪个组中?,因此我们需要某种索引来快速地从对象查询到组 这是我

假设我的程序有一个简单的对象,
Key
,可以用作较大对象的键。(这超出了问题的范围)可能会有成百上千的这些键四处飞舞,因此确保这些对象的不同列表中的重复量最小是很重要的(这样我们就不会用无用的对象阻塞内存)

这里的问题是这些关键对象可能被分组,并且可能同时是多个组的一部分。让我们将这6个对象分成3个样本组:

有一个单一的、并发的列表来跟踪所有的组,并且可能会不断创建和删除几十个这样的组。但是,由于该组系统可用于查询操作,例如,
该键在哪个组中?
,因此我们需要某种索引来快速地从对象查询到组

这是我们目前拥有的系统:

  • 一个并发映射(
    ConcurrentMap
    ,“全局映射”),它存储所有组,并使用键本身编制索引
  • 每个
    键组
    包含一组
    (组的内容)

  • 将键X添加到组G时:

  • 键X将添加到组的键集
  • 将组G添加到全局映射中,并使用键K作为索引
  • 要查询某个键所属的组,将其用作全局映射的索引(
    Set groups=globalMap.get(key)


该系统的主要问题是
对象的大量重复:

  • 全局地图具有索引地图的关键对象(即
  • 每个组包含自己的
    集合
  • 由于每个组都有自己的集合,每个键都有自己的组集合,因此会以指数方式增加
    键的数量
显然,我们正在研究优化整个过程。由于我们使用的是Java,是否有库可以更有效地管理这个系统(看起来有点像维恩图),并避免密钥的重复


我还认为,当密钥不再使用时,内置的Java垃圾收集并不能清除整个混乱。我错了吗?当我分析程序使用的内存时,内存中的密钥数量不断增加,即使没有创建“新”组/添加密钥。

您的描述有点混乱。我想您是说您希望有效地维护两个索引:一个表示每个组中包含哪些键,另一个表示每个键属于哪个组。是吗?@JimMischel是的,没错你的描述有点混乱。我想您是说您希望有效地维护两个索引:一个表示每个组中包含哪些键,另一个表示每个键属于哪个组。对吗?@JimMischel是的,对