繁体   English   中英

Java:有没有一种方法可以从Set的克隆中检索Set中的原始对象

[英]Java: Is there a way to retrieve, in a Set, an original object from its clone

我需要在Set中从其克隆中检索原始对象。

我想做类似的事情:

Set<Object> mySet;
public void myModifyMethod(Object clone){
    if(mySet.contains(clone)){
        Object original = mySet.get(clone); // get method does not seem to exist

        // Modify original object
    }
}

我在Java SE 6 API中找不到任何方法可以做到这一点。 我能想到的唯一方法是遍历整个集合,但这根本没有效率(我希望从HashSet中获得O(1),而不是从顺序搜索中获得O(n))。

有更有效的方法吗?

我能想到的唯一解决方案是使用Map ,其中原始对象既是键又是值,然后执行诸如map.get(clone)来获取原始对象。 当然,您应该实现hashequals方法。

java集合上没有get方法

您可以重构所有元素并将其添加到哈希图中-Map具有get方法。

但是为什么您需要在Set中从其clone中检索原始对象 ,因为您已经拥有它的实例,所以您正在使用该对象来检查其是否存在-只需确保实现哈希码并适当地进行相等即可。

我有一个类似的问题。 我通过使用Map实现Set接口来解决此问题。 这是我的实现:

public final class HandleSet<E> extends AbstractSet<E> {

    private final HashMap<E, E> map;

    public HandleSet() {
        map = new HashMap<E, E>();
    }

    public E get(E o) {
        return map.get(o);
    }

    /* Implementation of Interface Set */

    @Override
    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }

    @Override
    public int size() {
        return map.size();
    }

    @Override
    public boolean isEmpty() {
        return map.isEmpty();
    }

    @Override
    public boolean contains(Object o) {
        return map.containsKey(o);
    }

    @Override
    public boolean add(E o) {
        return map.put(o, o) == null;
    }

    @Override
    public boolean remove(Object o) {
        return o.equals(map.remove(o));
    }

    @Override
    public void clear() {
        map.clear();
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM