2016-01-30 2 views
-1

Использование Java 7 Я ищу способ сравнения строки, которую я преобразовал в TreeSet, с другим определенным TreeSet.Сравнение преобразованного TreeSet из String с другим TreeSet Java 7

Вот пример:

public static <T> Set<T> intersection(Set<T> setA, Set<T> setB) { 
     Set<T> tmp = new TreeSet<T>(); 
     for (T x : setA) 
      if (setB.contains(x)) 
      tmp.add(x); 
     return tmp; 
     } 

public static void main(String args[]) { 

String str ="A, B, C, D"; 
Set<String> set3 = new TreeSet(Arrays.asList(str)); 
TreeSet<String> set1 = new TreeSet<String>(); 
TreeSet<String> set2 = new TreeSet<String>(); 
set1.add("A"); 
set1.add("B"); 
set1.add("C"); 
set1.add("D"); 
set2.add("A"); 
set2.add("B"); 
set2.add("C"); 
set2.add("D"); 
System.out.println("Intersection: Set 1 & 2: " + intersection(set1, set2)); 
System.out.println("Intersection: Set 1 & 3: " + intersection(set1, set3)); 


} 

Сравнивая набор на другой набор, который я использовал Set.add, чтобы добавить его элементов, входящих работает, как ожидалось:

Intersection: Set 1 & 2: [A, B, C, D] 

вопрос, который я не могу почему я не имею соответствия, когда я сравниваю преобразованный TreeSet от String с другим TreeSet.

Intersection: Set 1 & 3: [] 

Но когда я печатаю set1 и set3, я нахожу их одинаковыми ??

System.out.println("set1: " + set1); 
System.out.println("set3: " + set3); 

set1: [A, B, C, D] 
set3: [A, B, C, D] 

Затем я попытался пройти через строку и добавил каждый элемент к набору, но это тоже не сработало.

System.out.println («Пересечение: (set1 - set3)» + пересечение (set1, convertString2Set (str)));

private static Set convertString2Set(String line) { 
      List<String> linesList = new ArrayList<String>(Arrays.asList(line)); 
     Set<String> set = new TreeSet<String>(); 
     for (String elme : linesList) { 
      set.add(elme); 
     } 
     return set; 
    } 
+0

.. посмотрите на фактическое содержимое и размер вашего set3. – njzk2

ответ

1

set3 в коде содержит только один элемент: строка, которая равна «А, В, С, D». Эта строка не равна ни одной из четырех строк в set1, которые являются «A», «B», «C» и «D». Представление toString() двух наборов бывает одинаковым, но оно не означает, что они имеют одинаковое содержание

Arrays.asList() на String ничего не расщепляется;. он всегда будет создавать список из одного элемента, если вы хотите, чтобы разбить строку на несколько подстрок, используйте метод String.split()

+0

Спасибо за объяснение, я попытался разделить строку, а затем добавить ее в набор, и это не сработало. Итак, как я могу сравнить содержимое строки с содержимым набора – Moe

+0

Как именно вы пытаетесь разделить строку? – yole

+0

Я обновил вопрос о том, как я зациклился, чтобы добавить каждый элемент в набор. Благодаря! – Moe

Смежные вопросы