2011-12-12 24 views
6

Đó là kỳ lạ: A là một Set và B là một tập hợp các Bộ:Làm cách nào để phát hiện xem Tập hợp các bộ chứa Tập hợp khác?

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

tôi thêm những thứ đối với họ và đầu ra của

System.out.println(A) 

là:

[evacuated, leave, prepc_behind] 

và đầu ra của

System.out.println(B) 
.210

là:

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

vì nó có thể được nhìn thấy, yếu tố thứ ba của bộ B bằng thiết A. Vì vậy, giả thuyết

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

nên trở thành sự thật, nhưng dường như nó không. Vấn đề là gì?

Xem chi tiết:

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

Bạn đang thêm các phần tử như thế nào? Bởi vì 'B.contains (A)' trả về true cho tôi. –

+0

Hoạt động như dự định (ví dụ: trả về true) cho tôi. –

+0

Tôi có một vòng lặp for mà giữ thêm bộ B bằng cách sử dụng: B.add (tp); tp là một tập hợp. – Marcus

Trả lời

-1

Set.contains (khác) trả về true nếu một yếu tố thuộc về các thiết lập là tương đương với khác.

Và đặt có ghi đè bằng() và hàm băm(). Set.equals() sẽ trả về true nếu cả hai tập hợp có cùng phần tử.

Vì vậy, nếu A2 thuộc về B và A2 có cùng các thành phần như A, B.contains (A) sẽ trả về true;

2

Ý tưởng cơ bản (setA.contains(setB) == true) dường như làm việc tốt:

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 

tôi sẽ đánh bạo đoán rằng bạn đang nắm bắt thêm trong biểu thức chính quy của bạn sau đó bạn muốn. Hãy thử chuyển đổi cả kết hợp từ regex và chuỗi thử thành byte[] và kiểm tra chúng với nhau.

Các vấn đề liên quan