克隆和减去集合 - 这是否有效?

Dad*_*box 3 java collections clone set subtraction

private HashMap<DataObject, HashSet> AllDataObjects;

...

/** Returns all DataObject elements that are NOT in the specified set. */
private DataObject[] invert( HashSet<DataObject> set )
{
    HashSet<DataObject> keys = (HashSet) AllDataObjects.keySet();
    keys = (HashSet) keys.clone();

    keys.removeAll( set );

    return (DataObject[]) keys.toArray();
}
Run Code Online (Sandbox Code Playgroud)

请注意,我不想改变AllDataObjects这个过程.我将一组AllDataObjects'键(DataObject我希望set参数减去)转换为HashSet以使用clone,它应该返回一个浅拷贝,然后我可以删除它set而不会影响AllDataObjects.

这看起来对你好吗?

iny*_*iny 10

创建一个新集合并将要克隆的集合作为参数.这样可以避免投射,因此您不会丢失泛型.

private DataObject[] invert( Set<DataObject> set ){
    Set<DataObject> keys = new HashSet<DataObject>(AllDataObjects.keySet());
    keys.removeAll( set );
    return keys.toArray(new DataObject[]{});
}
Run Code Online (Sandbox Code Playgroud)

还值得注意的是,您应该使用Set而不是HashSet作为参数,以免对客户造成过度负担.