문제

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 클론을 사용하려면 해시 세트로 빼는 매개 변수는 얕은 사본을 반환하여 제거 할 수 있습니다. set 영향을받지 않고 AllDataObjects.

이것이 당신에게 옳게 보입니까?

도움이 되었습니까?

해결책

새 세트를 만들고 인수로 복제 할 세트를 제공하십시오. 이것은 캐스팅을 피하고 제네릭을 잃지 않습니다.

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

또한 고객에게 지나치게 부담을주지 않도록 매개 변수에 대한 해시 세트 대신 세트를 사용해야한다는 점도 주목할 가치가 있습니다.

다른 팁

이 세트가 관계형 쿼리에 의해 채워 졌다는 것을 알고, 나는 당신이 최소한 더 나은 SQL 쿼리를 작성하여 메모리에서 원하는 것을 얻기 위해 더 나은 SQL 쿼리를 작성하는 것을 제안합니다. 그 이유는 몇 가지가 있습니다. 첫째, 대부분의 관계형 데이터베이스는 코드보다 더 효율적으로 수행하도록 최적화되어 있습니다. 둘째, 관계형 데이터베이스가 실행중인 서버가 의도 한 작업을 더 많이 수행하도록합니다. 셋째, 세트의 크기가 커지면 결과를 다시 가져오고 메모리를 할당 한 다음 원치 않는 결과를 버려 불필요하게 중간 계층에 부담을 줄 수 있습니다.

이 링크는 다음과 같은 경우 해당 메소드를 작성하는 더 좋은 방법이 있다고 생각합니다.

Java : 쉽고 빠른 방법이 있거나 xor가 함께 세트가 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top