2012-05-31 5 views
-2

Java Set에 중복 값을 사용할 수 없습니다. 이것은 내 코드입니다 :Java 세트의 중복 값

Set<String> set = new HashSet<String>(); 
Collections.addAll(set, arr); 

배열 arr에 동일한 값을 가진 요소가 있으면 set에 중복 된 문자열 값이있는 이유는 무엇입니까?

어디에 놓쳤습니까? 배열을 반복하고 add 메서드를 사용해야합니까?

============================================== ===============

죄송합니다. 위 코드가 작동합니다. 나는 배열 arr에서 실수를했다. 그것은 공백이다.

+1

'arr'에는 무엇이 들어 있습니까? – Jeffrey

+3

정말입니까? 문제를 증명할 수있는 완전한 컴파일 가능한 예가 될 수 있습니까? –

+2

'String'에 공백과 같은 보이지 않는 문자가 포함되어 있는지 확인하십시오. –

답변

1

대부분의 개체는 실제로 같지 않으므로 동일한 개체가 아닙니다. java.util.HashSet.add()에 대한 javadocs를 보면 객체가 이미 존재하는지 비교하기 위해 .equals()가 사용되는 것을 볼 수 있습니다. 2 개의 문자열이 String.equals()가 false를 반환하게하는 어떤 방식으로도 다르지 않은지 확인하십시오. 난 당신이 구현 한 문자열을 사용하고 있기 때문에 이런 일이 볼 수 없습니다

1

제대로 같습니다.

다음 코드는 두 배열 모두에 대해 "1"을 인쇄합니다. 실수하지 않았습니까? 나는 다음과 같은 코드를 실행하면

import java.util.Set; 
import java.util.HashSet; 
import java.util.Collections; 
class Main 
{ 
    public static void main(String[] args) 
    { 
     String[] arr1 = new String[]{"one","one"}; 
     Set<String> set1 = new HashSet<String>(); 
     Collections.addAll(set1, arr1); 
     System.out.println(set1.size()); 

     String[] arr2 = new String[]{"two",new String("two")}; 
     Set<String> set2 = new HashSet<String>(); 
     Collections.addAll(set2, arr2); 
     System.out.println(set2.size()); 
    } 
} 
+0

죄송합니다, 배열에 실수를하였습니다. 문제가 OP의 실수에 있다면 내 게시물에서해야 할 일은 무엇입니까? –

+0

다음은 몇 가지 제안 사항입니다. @JRGalia - http://meta.stackexchange.com/questions/17753/what-to-do-when-there-was-no-problem-at-all – Synesso

2

,이 세트에 중복 포함하지 않는 것을 보여줍니다

class FunkTest 
{ 
    public static void main (String [] args) 
    { 
     Set<String> theHash = new HashSet<String>(); 

     String[] theArray = new String[] { 
      "funky", 
      "garbage", 
      "funky", 
      "stuff", 
      "things", 
      "item", 
      "funky", 
      "funky" 
     }; 

     Collections.addAll(theHash, theArray); 

     for (String thisItem : theHash) { 
      System.out.println(thisItem); 
     } 
    } 
} 

출력 :

stuff 
funky 
item 
things 
garbage 

당신의 문자열에 대한 다른 무언가가 있어야합니다.

+0

예, 제가 실수했습니다. 배열 –

0

실수입니다. Set에는 복제물이 절대 포함되지 않습니다. 아니요, 반복하고 add 메서드를 사용할 필요가 없습니다.

돌아가서 다시 살펴보십시오. 어떤 가치가 복제됩니까? 대신 List<String>에 배열을 추가하면 어떻게됩니까?