从Java Set获取项目

Wil*_*ill 6 java collections

我有一些Set昂贵的物品.

这些对象具有ID,并equals使用这些ID进行相等.

这些对象的类型有两个构造函数; 一个用于昂贵的对象,另一个用于设置ID.

所以我可以检查特定ID是否在Set使用中Set.contains(new Object(ID)).

但是,确定对象在集合中后,我无法获取集合中的对象实例.

如何获取该集合包含的确切对象?

Pet*_*rey 6

如果你想get从集合中获取,你应该使用 Map。

(请注意,大多数 Set 实现都是 Map 的包装器)

Map<Key, Value> map = new ....

Value value = map.get(new Key(ID));
Run Code Online (Sandbox Code Playgroud)

在您的情况下,键和值可以是相同的类型,但这通常是一个坏主意,因为键(如集合的元素)应该是不可变的。


Don*_*aab 5

考虑使用Eclipse Collections 中UnifiedSet类。它实现了除接口。为 put 和 get添加类似 API。比因为它不为值保留内存而只为键保留内存效率更高。PoolSetPoolMapPoolMap

UnifiedSet<Integer> pool = UnifiedSet.newSet();

Integer integer = 1;
pool.add(integer);

Assert.assertSame(integer, pool.get(new Integer(integer)));
Run Code Online (Sandbox Code Playgroud)

注意:我是 Eclipse Collections 的提交者。