通过一个学生选课的实例学习集合Collection,Map,HashMap,List,ArrayList,Set,HashSet的使用
注意
1、构造方法中如何实例化一个对象this.courses=new HashSet();
2、用一个类把另一个类的对象封装到ArrayList里面,要注意ArrayList如果新建一个不带类型的就是object类型,set和get的时候都需要注意类型转换Course temp = (Course)coursesToSelect.get(0)
3、ArrayList的addAll方法在使用的时候如果需要类型转换就使用Array.asList 方法coursesToSelect.addAll(Arrays.asList(Courses))
4、Iterator 迭代器 next的方法可以获取list下一个下标的元素Course cr = (Course)it.next();
hasNext方法可以返回一个boolean确认下一个下标是否有元素。
5、list的增删改查方法
增:add/addAll,删:remove/removeAll,改:set,查:get
6、泛型 容器的泛型<>用于指定容器内的元素的类型
有泛型的容器可以放入指定的元素或者其子类的元素
泛型不能使用基本类型 必须使用其包装类 如 Integer,Long之类
7、Set 内部是一个无重复不排序的集合
8、Set在遍历的时候只能使用foreach方法或者iterator方法 不能使用get()方法。
9、Set中,添加某个对象,无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那一个。
10、Set中可以放置一个null
11、instanceof
的用法 比较对象 进行类型检查规则是:你属于该类吗?或者你属于该类的派生类吗?
package imook.cn.collection;
/**
* 课程类
* @author RMC
*
*/
public class Course {
public String id;//课程id
public String name;
public Course(String id, String name) {
this.id = id;
this.name = name;
}
}
package imook.cn.collection;
import java.util.HashSet;
import java.util.Set;
/*
* 学生类
*/
public class Student {
public String id;//学生id
public String name;//学生姓名
public Set courses;//课程信息
public Student(String id, String name) {
super();
this.id = id;
this.name = name;
this.courses= new HashSet();
}
}
package imook.cn.collection;
import java.util.ArrayList;
import java.util.List;
public class listTest {
public List coursesToSelect;
public listTest() {
this.coursesToSelect = new ArrayList();
}
/*
* 用于向coursesToSelect中添加备选课程
*/
public void addTest() {
Course cr = new Course("1","数据结构");//实例化一个课程
coursesToSelect.add(cr);//把课程作为实例对象添加到一个ArrayList里面
Course temp = (Course)coursesToSelect.get(0);//ArrayList中取出的元素是object类的实例需要强制转换
System.out.println(temp.id+":"+temp.name);
Course cr2 = new Course("2","C语言");
coursesToSelect.add(cr2);
Course temp2 = (Course)coursesToSelect.get(1);
System.out.println(temp2.id+":"+temp2.name);
Course[] Courses = {new Course("3","离散数学"),new Course("4","汇编语言")};
coursesToSelect.addAll(Arrays.asList(Courses));//asList方法可以把数组放到list表中
Course temp3 = (Course)coursesToSelect.get(2);
Course temp4 = (Course)coursesToSelect.get(3);
System.out.println(temp3.id+":"+temp3.name+temp4.id+":"+temp4.name);
}
/*
* 如何通过迭代器去遍历list
*/
public void testIterator() {
Iterator it = coursesToSelect.iterator();
while(it.hasNext()) {
Course cr = (Course)it.next();
System.out.println(cr.id+":"+cr.name);
}
public static void main(String[]args) {
listTest t = new listTest();
t.addTest();
}
}
增删改查 list
package imook.cn.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class listTest {
public List<Course> coursesToSelect;
public listTest() {
this.coursesToSelect = new ArrayList<Course>();
}
/*
* 增
*/
public void add() {
Course cr = new Course("1","java基础");
coursesToSelect.add(cr);
Course[] Courses = {new Course("2","javaweb"),new Course("3","java多线程")};
coursesToSelect.addAll(Arrays.asList(Courses));
}
/*
* 删
*/
public void remove() {
Course a = (Course)coursesToSelect.get(1);
coursesToSelect.remove(a);
}
/*
* 改
*/
public void set() {
Course cr = new Course("4","java虚拟机");
coursesToSelect.set(0, cr);
}
/*
* 查
*/
public void get() {
for(Object temp: coursesToSelect) {
Course a = (Course)temp;
System.out.println(a.id+":"+a.name);
}
System.out.println("Iterator 查询:");
Iterator<Course> it = coursesToSelect.iterator();
while(it.hasNext()) {
Course b =it.next();
System.out.println(b.id+":"+b.name);
}
}
public static void main(String[]args) {
listTest t = new listTest();
t.add();
t.remove();
t.set();
t.get();
}
}
HashSet 增 删 改的方法与list相同
注意:Set在遍历的时候只能使用foreach方法或者iterator方法 不能使用get()方法。
Set中,添加某个对象,无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那一个
package imook.cn.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class SetTest {
public List<Course> coursesToSelect;
public SetTest() {
coursesToSelect = new ArrayList<Course>();
}
/*
* 增
*/
public void add() {
Course cr = new Course("1","java基础");
coursesToSelect.add(cr);
Course[] Courses = {new Course("2","javaweb"),new Course("3","java多线程")};
coursesToSelect.addAll(Arrays.asList(Courses));
CourseChild cr2 = new CourseChild("5","设计模式");
coursesToSelect.add(cr2);
}
/*
* 删
*/
public void remove() {
Course a = (Course)coursesToSelect.get(1);
coursesToSelect.remove(a);
}
/*
* 改
*/
public void set() {
Course cr = new Course("4","java虚拟机");
coursesToSelect.set(0, cr);
}
/*
* 查
*/
public void get() {
System.out.println("有以下课程待选:");
for(Object temp: coursesToSelect) {
Course a = (Course)temp;
System.out.println(a.id+":"+a.name);
}
System.out.println("Iterator 查询:");
Iterator<Course> it = coursesToSelect.iterator();
while(it.hasNext()) {
Course b =it.next();
System.out.println(b.id+":"+b.name);
}
}
public void forEachTest(Student student) {
for(Course cr:student.courses) {
System.out.println( "学生:"+student.name+"已选课:"+cr.id+","+cr.name);
}
}
public static void main(String[]args) {
SetTest t = new SetTest();
t.add();
t.remove();
t.set();
t.get();
Student student = new Student("1","小米");
System.out.println("欢迎学生:"+student.name+"选课!");
Scanner input = new Scanner(System.in);
for(int i=0;i<2;i++) {
System.out.println("请输入你要选择的课程:");
String id = input.next();
for(Course cr:t.coursesToSelect) {
if(id.equals(cr.id)) {
student.courses.add(cr);
}
}
}
input.close();
t.forEachTest(student);
}
}
测试HashMap的增删改查方法
package imook.cn.collection;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
public class MapTest {
public HashMap<String, Student> Students;
/*
* 在构造器中初始化Students属性
*/
public MapTest() {
this.Students = new HashMap<String, Student>();
}
/*
* 测试添加:输入学生ID,判断是否被占用 若未被占用,则输入姓名,创建新学生对象,并且 添加到Students中
*/
public void testPut() {
// 创建一个Scanner对象,用来获取输入的学生ID和姓名
Scanner input = new Scanner(System.in);
int i = 0;
while (i < 3) {
System.out.println("请输入学生ID:");
String ID = input.next();
// 判断ID是否被占用了
Student st = Students.get(ID);
if (st == null) {
System.out.println("请输入学生姓名:");
String name = input.next();
Student newstudent = new Student(ID, name);
Students.put(ID, newstudent);
System.out.println("成功添加学生:" + Students.get(ID).name);
} else {
System.out.println("学生ID已存在");
}
i++;
}
}
/*
* 测试Map的KeySet方法
*/
public void testKeySet() {
// 通过KeySet方法,返回Map中的所有“键”的Set集合
Set<String> keySet = Students.keySet();
// 取得students的容量
System.out.println(Students.size());
// 遍历keySet,取得每一个键,再调用get方法取得每个键对应的value
for (String stuId : keySet) {
Student st = Students.get(stuId);
if (st != null) {
System.out.println("学生:" + st.id + "姓名:" + st.name);
}
}
}
/*
* 测试删除Map中的映射
*/
public void testRemove() {
Scanner in = new Scanner(System.in);
while (true) {
// 提示输入待删除的学生的ID
System.out.println("请输入要删除的学生ID:");
String I = in.next();
System.out.println(I);
// 判断该ID是否有对应的学生对象
Student st = Students.get(I);
if (st == null) {
System.out.println("该ID不存在");
continue;
}
Students.remove(I);
System.out.println("成功删除学生:" + st.name);
break;
}
}
/*
* 通过entrySey方法遍历Map
*/
public void testEntrySet() {
Set<Entry<String, Student>> entrySet = Students.entrySet();
for (Entry<String, Student> entry : entrySet) {
System.out.println("取得键:" + entry.getKey());
System.out.println("取得值:" + entry.getValue().name);
}
}
/*
* 利用put方法修改Map中的已有映射
*/
public void testModify() {
System.out.println("请输入要修改的学生ID");
Scanner input = new Scanner(System.in);
while(true) {
String stId= input.next();
Student student =Students.get(stId);
if(student == null) {
System.out.println("该ID不存在!请重新输入!");
continue;
}
//提示当前对应的学生对象的姓名
System.out.println("学生姓名为:"+student.name);
System.out.println("请输入新的学生姓名");
String stName= input.next();
Student newStudent = new Student(stId,stName);
Students.put(stId, newStudent);
System.out.println("修改成功");
break;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MapTest t = new MapTest();
t.testPut();
t.testKeySet();
t.testRemove();
t.testEntrySet();
t.testModify();
t.testEntrySet();
}
}
当比较的equals不满足需求的时候可以重写equals方法
list的contains方法是比较对象在list中是否存在
通过重写equals方法 可以拿对象的元素比较含有该元素的对象在list中是否存在
//重写equals方法
@Override
public boolean equals(Object obj) {
if(this==obj) {
return true;
}
if(obj==null) {
return false;
}
if(!(obj instanceof Course)) {
return false;
}
Course course =(Course)obj;
if(this.name ==null) {
if(course.name==null)
return true;
else
return false;
}else {
if(this.name.equals(course.name)) {
return true;
}else {
return false;
}
}
}
网友评论