使用Java 7我正在寻找一种方法来比较我转换为TreeSet的字符串和另一个定义的TreeSet。
以下是一个例子:
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]
我无法理解的问题是,当我将String中的转换TreeSet与另一个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(“Intersection:(set1 - set3)”+ intersection(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 :(得分:1)
set3
只包含一个元素:一个等于“A,B,C,D”的字符串。这个字符串不等于set1
中的四个字符串中的任何一个,它们是“A”,“B”,“C”和“D”。两个集合的toString()表示恰好相同,但这并不意味着他们有相同的内容。
Arrays.asList()
上的 String
不会分裂任何内容;它总是会创建一个单元素列表。如果要将字符串拆分为多个子字符串,请使用String.split()
方法。