我的JAVA初学之路----List集合和Set集合(上)
2016-10-04 22:41
375 查看
好悲催啊,国庆不想回家,就只有宅在寝室跟自己玩了。空间里朋友圈里都在秀旅游,有去重庆的,有去上海的。
不过还好我这几天是有准备的—-跟代码一起玩耍呗。哈哈哈哈哈~
我是真的感觉自己好菜,大学也没学,只是感觉要毕业了,有了点外面不好混的感觉,就赶紧努力学习了,不想去外面做苦力啊呵呵呵。
以前一直没搞懂集合,今天跟着视频学了学,再在博客上写出来,也算是一种积累吧~
下图是JAVA集合框架中的两大家族以及子类的关系:
*Q:那么我们为什么要使用集合呢?
A:因为数组只能存放基本数据类型的数据,然而JAVA可不止那么简单,当我们要存放具体的对象时,就必须要使用集合了。
Q:那么List和Set有什么区别?
A:List中存放的是有序的对象;Set中存放的都是无序的对象,并且不允许同样的元素存在。
Q:在使用集合的过程中要注意哪些问题?
A:在目前我的学习当中,要注意的就是不能使用int这些基本类型作为泛型类型,如要使用就必须使用它们的包装类,比如
接下来我就用刚学到的学生选课实例来演示怎样使用List和Set集合实现增删改查:
首先我们新建两个封装类Student和Course:
要在Student类里写一个Set集合用来存放学生选好的课程,它的泛型是Course,也就是说它不接受除了Course和Course子类以外的任何类型,这里需要注意:
然后我们新建一个测试类用来创建我们的添加课程和选择课程:
首先在构造方法中初始化我们的List以便使用
新建一个方法添加课程
新建选课方法:
在main方法中测试:
集合的删除调用
测试下Set元素的不可重复性:
不出意外,结果只有三次
我们来测试下Set的无序性:
同样的课,两次输出的顺序是一样的。这是由于JDK在新版中更改了这个特性。
好了,今天的巩固就到这里了。
PS:刚刚犯了一个无比低级的错误,就因为添加课程的时候把id写成1. 然后选课的时候一直遍历不出来选好的课。。。尴尬啊哈哈哈。
不过还好我这几天是有准备的—-跟代码一起玩耍呗。哈哈哈哈哈~
我是真的感觉自己好菜,大学也没学,只是感觉要毕业了,有了点外面不好混的感觉,就赶紧努力学习了,不想去外面做苦力啊呵呵呵。
以前一直没搞懂集合,今天跟着视频学了学,再在博客上写出来,也算是一种积累吧~
下图是JAVA集合框架中的两大家族以及子类的关系:
*Q:那么我们为什么要使用集合呢?
A:因为数组只能存放基本数据类型的数据,然而JAVA可不止那么简单,当我们要存放具体的对象时,就必须要使用集合了。
Q:那么List和Set有什么区别?
A:List中存放的是有序的对象;Set中存放的都是无序的对象,并且不允许同样的元素存在。
Q:在使用集合的过程中要注意哪些问题?
A:在目前我的学习当中,要注意的就是不能使用int这些基本类型作为泛型类型,如要使用就必须使用它们的包装类,比如
List<Integer> list;。
接下来我就用刚学到的学生选课实例来演示怎样使用List和Set集合实现增删改查:
首先我们新建两个封装类Student和Course:
public class Course { private String id; private String name; public Course(String id, String name) { super(); this.id = id; this.name = name; } 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; }
要在Student类里写一个Set集合用来存放学生选好的课程,它的泛型是Course,也就是说它不接受除了Course和Course子类以外的任何类型,这里需要注意:
public class Student { private String id; private String name; public Set<Course> courses; public Student(String id, String name, Set courses) { super(); this.id = id; this.name = name; this.courses = new HashSet<>(); } 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; } public Set getCourses() { return courses; } public void setCourses(Set courses) { this.courses = courses; } }
然后我们新建一个测试类用来创建我们的添加课程和选择课程:
首先在构造方法中初始化我们的List以便使用
public class Test { public List<Course> courseList; public Test(){ //初始化List courseList = new ArrayList<>(); }
新建一个方法添加课程
public void addCourse(){ //新建Course对象作为List的数据源 Course c1 = new Course("1", "JAVA基础"); Course c2 = new Course("2", "JAVA进阶"); Course c3 = new Course("3", "JAVA WEB"); Course c4 = new Course("4", "JAVA高级"); Course c5 = new Course("5", "Android入门"); Course c6 = new Course("6", "Android高级"); //添加新建好的Course对象到List中 courseList.add(c1); courseList.add(c2); courseList.add(c3); courseList.add(c4); courseList.add(c5); courseList.add(c6); }
新建选课方法:
public void chooseCourse() { // 添加学生 Student student = new Student("A001", "JoeGreen"); System.out.println("欢迎" + student.getName()); // 接收用户输入 Scanner sc = new Scanner(System.in); // 这里我设定每个学生选三门课 for (int i = 0; i < 3; i++) { System.out.println("请输入课程Id:"); String chooseId = sc.next(); // 使用for each循环(增强型)遍历出每门课程 for (Course course : courseList) { // 如果得到的课程Id和选中的课程Id一样就添加进Set集合里 if (course.getId().equals(chooseId)) { student.courses.add(course); } } } //遍历Set集合,打印出已选好的课程 for (Course course : student.courses) { System.out.println("你选择了:" + course.getName()); } }
在main方法中测试:
public static void main(String[] args) { Test t = new Test(); t.addCourse(); t.foreachCourse(); t.chooseCourse(); }
集合的删除调用
remove(int index);方法,插入调用set(int index, Eelement);方法。详细可以去查看官方API文档。
测试下Set元素的不可重复性:
for (int i = 0; i < 3; i++) { System.out.println("请输入课程Id:"); String chooseId = sc.next(); // 使用for each循环(增强型)遍历出每门课程 for (Course course : courseList) { // 如果得到的课程Id和选中的课程Id一样就添加进Set集合里 if (course.getId().equals(chooseId)) { student.courses.add(course); student.courses.add(course); //添加两次 } } } //遍历Set集合,打印出已选好的课程 for (Course course : student.courses) { System.out.println("你选择了:" + course.getName()); } System.out.println("你总共选择了" + student.courses.size() + "门课"); //打印Set的长度 }
不出意外,结果只有三次
我们来测试下Set的无序性:
同样的课,两次输出的顺序是一样的。这是由于JDK在新版中更改了这个特性。
好了,今天的巩固就到这里了。
PS:刚刚犯了一个无比低级的错误,就因为添加课程的时候把id写成1. 然后选课的时候一直遍历不出来选好的课。。。尴尬啊哈哈哈。
HashMap<Student, String> studentlist = new HashMap<Test1.Student, String>(); TreeSet<Course> courseList = new TreeSet<Test1.Course>(); Scanner sc = new Scanner(System.in); public static void main(String[] args) { Test1 t1 = new Test1(); t1.addStudent(); t1.addCourse(); t1.chooseCourse(); } public void addStudent() { System.out.println("这里是选课系统,请输入学号:"); int id = sc.nextInt(); System.out.println("请输入姓名:"); String name = sc.next(); Student st = new Student(id, name); studentlist.put(st, name); System.out.println("欢迎你" + st.getName()); } public void addCourse() { System.out.println("下面是可选课程:"); Course c1 = new Course(1, "JAVA基础"); Course c2 = new Course(2, "JAVA入门"); Course c3 = new Course(3, "JAVA进阶"); Course c4 = new Course(4, "JAVA高级"); Course c5 = new Course(5, "JAVAWEB"); courseList.add(c1); courseList.add(c2); courseList.add(c3); courseList.add(c4); courseList.add(c5); for (Course course : courseList) { String name = course.getName(); System.out.println(course.id + ":" + name); } } public void chooseCourse() { Student s = new Student(); for (int i = 0; i < 3; i++) { System.out.println("请输入要选的课程Id(重复id只会添加一项):"); int id = sc.nextInt(); //必须通过for each或者iterator迭代出来每个元素,因为Set集合是无序的。 for (Course course : courseList) { if(course.id == id){ s.courses.add(course); } } } for (Course course : s.courses) { System.out.println("选择了课程" + course.id + ":" + course.name); } } class Course implements Comparable<Course> { private int id; private String name; public List<Course> coursel = new ArrayList<Test1.Course>(); @Override public String toString() { return "Course [id=" + id + ", name=" + name + "]"; } public Course() { } public Course(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + getOuterType().hashCode(); result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Course other = (Course) obj; if (!getOuterType().equals(other.getOuterType())) return false; if (id != other.id) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } private Test1 getOuterType() { return Test1.this; } public int compareTo(Course o) { if (this.id > o.id) { return 1; } else if (this.id == o.id) { return 0; } else { return -1; } } } class Student { private int id; private String name; //添加课程到学生表 public Set<Course> courses = new TreeSet<Course>(); public Student(){ } public Student(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + getOuterType().hashCode(); result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (!getOuterType().equals(other.getOuterType())) return false; if (id != other.id) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } private Test1 getOuterType() { return Test1.this; } }
相关文章推荐
- map,set,list,等JAVA中集合解析(了解)
- Java中集合容器类List和Set的用法
- Java中集合容器类List和Set的用法
- JAVA Set与List集合区别
- Java中集合容器类List和Set的用法
- java集合map,set,list区别
- 浅谈JAVA集合 Map List Set等java集合类
- java集合 set list map
- JAVA Set与List集合区别
- Java集合架构(一、List、Set)
- java 中 各种集合(List Set Map) 去除重复项
- java中 set,list,array(集合与数组)相互转换
- java集合map,set,list区别
- 【转帖】map,set,list,等JAVA中集合解析 - Java - cjw的资料
- map,set,list,等JAVA中集合解析【转载 http://zhaosoft.javaeye.com/blog/243586】
- java中List 、 Set、Map 集合类的区别
- map,set,list,等JAVA中集合解析
- 初学Java,LinkedList功能最全的集合类(二十九)
- map,set,list,等JAVA中集合解析
- map,set,list,等JAVA中集合解析(了解)