2012-07-10 6 views
8

당신이 자바에서 element, set, collectionrelation로 설정 이론의 개념을 구현하려는 가정 : 어떻게 당신은 빈 세트를 대표 할 수 있다고 생각하십니까?빈 세트 - ∅를 어떻게 구현합니까?

데이터베이스의 3 가지 논리로 사용되는 NULL 개념을 생각하면 자신을 속일 수 있습니까?

+4

이 질문에 대한 고유 한 대답이 확실하지 않습니다. 그것은 당신이 성취하고자하는 것에 달려 있습니다. 확실한 대답은 "빈'Set '사용"이지만, 당신이하는 일에 따라'NULL'도 적절할 수 있습니다. –

+4

의도 된 응용 프로그램에 따라 빈 세트를 표현할 수있는 수많은 방법이 있습니다. 'Set = new HashSet ()'이 가장 간단합니다. –

+4

Collections.emptySet() 마음에 온다 ... –

답변

27

사용 Collections.emptySet():

빈 세트 (불변)를 돌려줍니다. 이 세트는 직렬화 가능합니다. 같은 이름의 필드 인 과 달리이 메서드는 매개 변수화됩니다.

Set<String> s = Collections.emptySet(); 

구현상의주의 :이 예제 는 빈 세트를 취득 할 수있는 형식 안전한 방법을 보여,이 메소드의 구현은 각 호출에 대해 별도의 설정 객체 를 만들 필요가 없다. 이 방법을 사용하면 비슷한 이름의 필드를 사용하여 에 비하면 비슷한 비용이 발생할 수 있습니다. 빈 집합을 표현하기 위해 null를 사용

+0

제안 해 주셔서 감사합니다. 나는 너의 충고를 쓸 것이다. – M4TT4CK

8

(이 방법과는 달리, 필드는.하지 유형의 안전을 제공한다)를 나쁜 생각입니다. nullSet처럼 동작하지 않습니다. (분명히) 모든 작업을 수행하려고 시도하면 NullPointerException이 발생합니다. 즉, null을 사용하여 빈 세트를 나타내는 경우 코드는 null ...의 테스트로 흩어져 있습니다. 한 개를 놓치면 버그가 발생합니다.

해결할 수없는 빈 집합을 원할 경우 Collections.emptySet()을 사용하거나 공백으로 시작하는 변경 가능한 집합을 원할 경우 해당 Set 클래스의 인스턴스를 만듭니다.

+0

+1이 왜 나쁜 생각인지 설명하는 +1. –

관련 문제