2011-12-12 12 views
6

To jest dziwne: A jest zestaw i B jest zbiorem zestawach:Jak wykryć, czy zestaw zestawów zawiera inny zestaw?

Set <String> A=new HashSet<String>(); 
Set <Set<String>> B=new HashSet<Set<String>>(); 

dodałem rzeczy do nich i wyjście

System.out.println(A) 

jest:

[evacuated, leave, prepc_behind] 

i wyjście z

System.out.println(B) 

jest:

[[leave, to, aux], [auxpass, were, forced], [leave, evacuated, prepc_behind]] 

jak można zauważyć, trzecim elementem zbioru B jest równa zbioru A. Tak hipotetycznie

if(B.contains(A)){...} 

powinien powrócić prawda, ale najwyraźniej nie. Jaki jest problem?

Szczegóły:

Pattern pattern = Pattern.compile("(.*?)\\((.*?)\\-\\d+,(.*?)\\-\\d+\\).*"); 
    for (int i = 0; i < list.size(); i++) { 
     Set <String> tp = new HashSet<String>(); 
     Matcher m = pattern.matcher(list.get(i).toString()); 
     if (m.find()) { 
      tp.add(m.group(1).toLowerCase()); 
      tp.add(m.group(2).toLowerCase()); 
      tp.add(m.group(3).toLowerCase()); 
     } 
     B.add(tp); 
    } 
    Set <String> A=new HashSet<String>(); 
    A.add("leave"); 
    A.add("evacuated"); 
    A.add("prepc_behind"); 
    System.out.println(A); 
    if(B.contains(A)){ 
    System.out.println("B contains A"); 
} 
+3

Jak dodajesz elementy? Ponieważ "B.contains (A)" zwraca mi wartość true. –

+0

Działa również zgodnie z przeznaczeniem (to znaczy zwraca wartość true). –

+0

Mam pętlę for, która utrzymuje dodawanie zestawów do B za pomocą: B.add (tp); tp jest zbiorem. – Marcus

Odpowiedz

-1

Set.contains (inne) return true czy element należy do zbioru jest równa drugiej.

A zestaw ma zastąpić equals() i hash(). Set.equals() zwróci wartość true, jeśli oba zestawy mają te same elementy.

Tak więc, jeśli A2 należy do B, a A2 ma te same elementy co A, B. contains (A) zwróci wartość true;

2

Podstawową ideą (setA.contains(setB) == true) wydaje się działać prawidłowo:

Set<String>  set1 = new HashSet<String>(); 
    Set<Set<String>> set2 = new HashSet<Set<String>>(); 
    Set<String>  tmpSet; 

    set1.add("one"); 
    set1.add("three"); 
    set1.add("two"); 

    tmpSet = new HashSet<String>(); 
    tmpSet.add("1"); 
    tmpSet.add("2"); 
    tmpSet.add("3"); 
    set2.add(tmpSet); 

    tmpSet = new HashSet<String>(); 
    tmpSet.add("one"); 
    tmpSet.add("two"); 
    tmpSet.add("three"); 
    set2.add(tmpSet); 

    System.out.println(set2.contains(set1)); // true 

chciałbym zgadywać, że są bardziej przechwytywania w wyrażeniach regularnych wtedy chciałby. Spróbuj przekonwertować zarówno dopasowanie z wyrażenia regularnego, jak i ciągu testowego na byte[] i sprawdzić je względem siebie.

Powiązane problemy