【发布时间】:2023-03-19 13:55:02
【问题描述】:
我需要一个可以有效地添加、删除和访问随机对象的 Java 数据结构。
这是行不通的:
ArrayList 具有高效的添加(恒定时间)和随机访问(只需使用随机整数“获取”),但删除可能需要线性时间,因为它必须潜在地搜索整个列表。
TreeSet 或 HashSet 具有高效的添加和删除功能,但我不知道如何获取随机对象。
有什么想法吗?
理论上,如果我可以自己用随机的左或右遍历树,B 树就可以工作,但我认为标准的 Java 类没有给我这种能力。
如果标准 Java 类中的任何内容都不起作用,我愿意使用第三方库。
我不需要支持重复或空值,也不需要是线程安全的。
谢谢。
【问题讨论】:
-
ArrayList.remove(int index)在摊销的常数时间内运行。据我所知,这意味着单个调用是线性时间,但一系列调用的平均时间接近恒定时间。 -
感谢 Aarowaim,但我不知道要删除的对象的索引。我想我可以将这些信息单独存储在 HashMap 或其他东西中,但是一旦我从 ArrayList 中删除了一个对象,列表中的其他对象就会更改索引,这意味着 HashMap 中的某些值是错误的,我需要线性时间来修复它们。
-
@Magmatic 你需要允许重复元素吗?
-
我不需要支持重复或空值,也不需要线程安全。
-
你说的元素有多少?数百?数千?百万?它们是简单的数字、字符串还是更复杂的对象?
标签: java search data-structures random