以下是源码 可是最后打印输出的结果是
第一个集合
George Jim John Blake Kevin Micheal
第二个集合
George Jim John Blake Kevin Micheal
两个集合的交
George Kevin Micheal
两个集合的并
George Kevin Micheal George Katie Micheal Kevin Ryan
两个集合的差
为什么“两个集合的差”后面没有显示???!
import java.util.*;
public class ListTest {
public static void main(String[] args) {
List<String> ls = new ArrayList<String>();
List<String> ls2 = new ArrayList<String>();
ls.add("George");
ls.add("Jim");
ls.add("John");
ls.add("Blake");
ls.add("Kevin");
ls.add("Micheal");
ls2.add("George");
ls2.add("Katie");
ls2.add("Micheal");
ls2.add("Kevin");
ls2.add("Ryan");
System.out.println("第一个集合");//打印输出第一个集合
ListIterator lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
System.out.println("第二个集合");//打印输出第二个集合
lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
ls.retainAll(ls2);
System.out.println("两个集合的交");
lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
ls.addAll(ls2);// 两个集合的并
System.out.println("两个集合的并");
lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
ls.removeAll(ls2);// 两个集合的差
System.out.println("两个集合的差");
lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
第一个集合
George Jim John Blake Kevin Micheal
第二个集合
George Jim John Blake Kevin Micheal
两个集合的交
George Kevin Micheal
两个集合的并
George Kevin Micheal George Katie Micheal Kevin Ryan
两个集合的差
为什么“两个集合的差”后面没有显示???!
import java.util.*;
public class ListTest {
public static void main(String[] args) {
List<String> ls = new ArrayList<String>();
List<String> ls2 = new ArrayList<String>();
ls.add("George");
ls.add("Jim");
ls.add("John");
ls.add("Blake");
ls.add("Kevin");
ls.add("Micheal");
ls2.add("George");
ls2.add("Katie");
ls2.add("Micheal");
ls2.add("Kevin");
ls2.add("Ryan");
System.out.println("第一个集合");//打印输出第一个集合
ListIterator lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
System.out.println("第二个集合");//打印输出第二个集合
lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
ls.retainAll(ls2);
System.out.println("两个集合的交");
lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
ls.addAll(ls2);// 两个集合的并
System.out.println("两个集合的并");
lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
ls.removeAll(ls2);// 两个集合的差
System.out.println("两个集合的差");
lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
import java.util.*;public class ListTest {
public static void main(String[] args) {
List<String> ls = new ArrayList<String>();
List<String> ls2 = new ArrayList<String>();
ls.add("George");
ls.add("Jim");
ls.add("John");
ls.add("Blake");
ls.add("Kevin");
ls.add("Micheal");
ls2.add("George");
ls2.add("Katie");
ls2.add("Micheal");
ls2.add("Kevin");
ls2.add("Ryan");
System.out.println("第一个集合");// 打印输出第一个集合
ListIterator lit0 = ls.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
System.out.println("第二个集合");// 打印输出第二个集合
lit0 = ls2.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
jiao(ls, ls2);
System.out.println();
System.out.println("两个集合的并");
lit0 = bing(ls, ls2).listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
System.out.println();
cha(ls,ls2);
}
public static void jiao(List ls, List ls2) {
System.out.println("两个集合的交");
List list = new ArrayList(Arrays.asList(new Object[ls.size()]));
Collections.copy(list, ls);
list.retainAll(ls2);
Iterator lit0 = list.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
}
public static List bing(List ls, List ls2) {
List list = new ArrayList(Arrays.asList(new Object[ls.size()]));
Collections.copy(list, ls);
list.addAll(ls2);// 两个集合的并
return list;
}
public static void cha(List ls, List ls2) {
ls = bing(ls, ls2);
List list = new ArrayList(Arrays.asList(new Object[ls.size()]));
Collections.copy(list, ls);
list.removeAll(ls2);// 两个集合的差
System.out.println("两个集合的差");
Iterator lit0 = list.listIterator();
while (lit0.hasNext()) {
System.out.print(" " + lit0.next());
}
}
}程序做了一些改动,你可以看看
刚才应该是因为 ls用了多次,导致了结果不对
List list = new ArrayList(Arrays.asList(new Object[ls.size()]));
//初始化一个list 它的长度与Object.length一致并且元素初值为空
Collections.copy(list, ls);//将ls里的元素复制到list里
请问这样的分析对吗?
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
这样操作下来,ls里面的元素其实就都是 ls2里面的元素了,然后再取并,元素也全部是ls2里面的元素,再removeAll(ls2)里面肯定是全部都删除了,空了
import java.util.TreeSet;public class SetTest {
public static void main(String[] args) {
Set<Integer> ss1 = new TreeSet<Integer>();
Set<Integer> ss2 = new TreeSet<Integer>();
ss1.add(0);
ss1.add(1);
ss1.add(2);
ss1.add(3);
ss1.add(4);
ss1.add(5);
ss1.add(6);
ss1.add(7);
ss1.add(8);
ss1.add(9);
ss1.add(10);
ss2.add(1);
ss2.add(3);
ss2.add(5);
ss2.add(7);
ss2.add(9);
ss2.add(11); System.out.println("第一个集合");// 打印输出第一个集合
for (Integer s1 : ss1) {
System.out.print(s1 + ",");
}
System.out.println();
System.out.println("第二个集合");// 打印输出第二个集合
for (Integer s2 : ss2) {
System.out.print(s2 + ",");
}
System.out.println(); System.out.println("两个集合的交");
for (Integer s1 : ss1) {
if (ss2.contains(s1)) {
System.out.print(s1 + ",");
}
}
System.out.println();
System.out.println("两个集合的并");
for (Integer s1 : ss1) {
System.out.print(s1 + ",");
}
for (Integer s2 : ss2) {
if (!ss1.contains(s2)) {
System.out.print(s2 + ",");
}
}
System.out.println();
System.out.println("两个集合的差ss1-ss2");
for (Integer s1 : ss1) {
if (!ss2.contains(s1)) {
System.out.print(s1 + ",");
}
}
System.out.println();
}
}