为了账号安全,请及时绑定邮箱和手机立即绑定

java集合问题

java集合问题

慕粉4353249 2016-12-13 19:17:46
Student类代码如下:import java.util.Arrays;import java.util.HashSet;import java.util.Set;public class Student { private String id; private String name; public Set<Course> courses; public Student(String id,String name){ this.id=id; this.name=name; this.courses = new HashSet<Course>();  //等价于HashSet courses = new HashSet();  } public Student(){ this.courses = new HashSet<Course>(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}Test类代码import java.util.Arrays;import java.util.Iterator;public class Test { public void TestAdd2() { Student stu = new Student(); Course[] course = { new Course("1", "大学数学"), new Course("2", "大学英语"), new Course("3", "大学语文"), new Course("4", "汇编语言") , new Course("5", "大学数学"), new Course("6", "大学英语"), new Course("7", "大学语文"), new Course("8", "汇编语言")}; stu.courses.addAll(Arrays.asList(course)); System.out.println(stu.courses.size()); } public void TestForEach2() { Student stu = new Student(); for (Course c : stu.courses) { System.out.println("课程:" + c.getId() + ":" + c.getName()); } } public void testIterator(){ Student stu = new Student(); Iterator it = stu.courses.iterator(); System.out.println("有待选课程如下:(通过迭代器访问)"); while(it.hasNext()){ Course c = (Course)it.next(); System.out.println(c.getId()+":"+c.getName()); } } public void testRemove(){ Student stu = new Student(); Course[] course={new Course("1", "大学数学"), new Course("2", "大学英语")}; stu.courses.removeAll(Arrays.asList(course)); System.out.println("成功删除!"); } public static void main(String[] args) { TestSet ts = new TestSet(); ts.TestAdd2(); ts.TestForEach2(); ts.testIterator(); ts.testRemove(); }}为什么Student中的courses集合没有成功的添加数据,得出courses集合长度是1,为什么???????输出结果为:1有待选课程如下:(通过迭代器访问)成功删除!
查看完整描述

1 回答

已采纳
?
慕粉3291149

TA贡献71条经验 获得超52个赞

你把Student stu = new Student();定义为Test类的成员变量

不然你每个方法中创建一个Student对象 ,操作的是不同的Student对象啊

查看完整回答
反对 回复 2016-12-13
  • 慕粉4353249
    慕粉4353249
    这个解决了,为什么testRemove()删除集合中的元素不成功。
  • 慕粉3291149
    慕粉3291149
    不是删除没成功,只是你删除之后没有再次输出,所以你看不到删除后的结果,你在最后随便加个输出的函数,如:ts.TestForEach2();
  • 慕粉3291149
    慕粉3291149
    重写Course的equals方法 因为removeAll这个方法 首先要找到其中的元素与要删除的元素进行比较,如果相等把它删掉,如果不想等,继续比较下一个元素,默认的equals方法是比较两个引用所指向的对象是否相同,很明显是不同的,所以没有删除掉, 因此你需要重写equals方法,右键点击代码 选中sourse--> general hasCode() and equals() ,点击ok, 重写后的equals方法只需要比较两个引用的id和name是否相同就行了
点击展开后面2
  • 1 回答
  • 0 关注
  • 1363 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信