相关疑难解决方法(0)

如何在Java中实现规范化映射?

我目前正在编写自己的小ORM,并发现自己面临着创建规范化映射的任务,以防止从数据库中多次加载同一个实体.

我目前的做法是使用a HashMap<Object, WeakReference<Object>>.密钥是映射的数据库实体的主键(ArrayList<Object>如果它是复合键),则值为WeakReference<Object>.

我的主要问题是如何清理地图?当一个对象不再使用时,地图中的弱引用将会出现null,我只会在下一次查找时发现这一点(或者,如果我不再查看该对象,则永远不会发现).ReferenceQueue当它们被清除时,我可以使弱引用注册为a ,然后每次查看时检查该队列.清除的引用不会给我任何关于哪个对象被清除的提示,所以我想我必须子类WeakReference将该键存储在地图中,所以我可以在清除引用后将其删除.

这是要走的路,还是有更简单的方法来实现它?

java orm weak-references canonicalization

10
推荐指数
1
解决办法
5404
查看次数

如何从HashSet中获取()特定元素?科特林

认为 myHashSet = HashSet<SomeClass>

在哪里 SomeClass.hashcode() = someField.hashcode()

如何返回具有指定哈希码的元素,即:

myHashSet.getElementWithHashCode((other as SomeClass).someField.hashcode())
Run Code Online (Sandbox Code Playgroud)

other并且里面的对象HashSet是不同的对象,除了值之外,具有不同的属性值someField。换句话说,这两种不同类型的对象具有可能具有相同值的公共字段。

很奇怪,HashSet 中没有这样的函数。以前没人需要吗?最快的方法是什么?

android hashset kotlin

5
推荐指数
1
解决办法
1291
查看次数

从Set <T>中检索"规范值",其中T具有自定义等于()

我有一个class Foo覆盖equals()hashCode()正确.

我想也想用一个HashSet<Foo>跟踪"规范值",例如我有,我会一类喜欢写这样的,所以,如果我有一个是等价的两个不同的对象,我可以合并他们进入到引用同一个对象:

class Canonicalizer<T>
{
    final private Set<T> values = new HashSet<T>(); 

    public T findCanonicalValue(T value)
    {
        T canonical = this.values.get(value);
        if (canonical == null)
        {
           // not in the set, so put it there for the future
           this.values.add(value);
           return value;
        }
        else
        {
           return canonical;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

除了Set没有"get"方法,它将返回存储在集合中的实际值,只返回返回true或false的"contains"方法.(我猜它假设如果你的对象等于集合中的单独对象,你不需要检索集合中的对象)

有没有方便的方法来做到这一点?我唯一能想到的是使用地图和列表:

class Canonicalizer<T>
{
    // warning: neglects concurrency issues

    final private Map<T, Integer> valueIndex = new HashMap<T, …
Run Code Online (Sandbox Code Playgroud)

java set

2
推荐指数
1
解决办法
1891
查看次数

标签 统计

java ×2

android ×1

canonicalization ×1

hashset ×1

kotlin ×1

orm ×1

set ×1

weak-references ×1