克隆和减法套 - 工作的呢?
-
23-08-2019 - |
题
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();
}
请注意,我不希望通过这个过程来改变AllDataObjects
。我浇铸该组AllDataObjects
密钥”(这是我想要的DataObject
参数从减去set
s)转换成一个HashSet使用克隆,据称返回一个浅拷贝,我可以然后从删除set
而不影响AllDataObjects
。
这看起来你的权利?
解决方案
创建一组新的,并给予被克隆作为参数之一。这避免了铸造,这样你就不会失去泛型。
private DataObject[] invert( Set<DataObject> set ){
Set<DataObject> keys = new HashSet<DataObject>(AllDataObjects.keySet());
keys.removeAll( set );
return keys.toArray(new DataObject[]{});
}
另外值得一提的是,你应当使用,而不是HashSet的为参数,从而不会过度负担你的客户。
其他提示
明知这些集合是由一个关系查询填充,我建议你至少权衡编写更好的SQL查询来获取你想要的东西,而不是在内存中这样做。有几个原因。首先,大多数关系型数据库进行优化,以更有效地做到这一点比你的代码。其次,你让在关系数据库运行做多,它的目的是为工作的服务器。第三,如果套的尺寸变大,你会被具有带回的结果,分配内存为他们,然后扔掉不需要的结果不必要负担的中间层。
我觉得这个环节有更好的方式来写这个方法,如果你必须:
?不隶属于 StackOverflow