List,Map的练习2
准备数据
1. 定义一个Student类, 有两个属性, name和age
2. 定义一个DataSourceModel类, 分别定义三个方法,
这三个方法分别可以获取到含有内容的List<Student>, Set<Student>, Map<Integer, Student>
3.Map中的key值, 作为Student的学号, 学号采用自增的方式:从1001开始
import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; public class DataSourceModel { public static List<Student> getStuList() { //获取List的方法 List<Student> list = new ArrayList<Student>(); Student stu1 = new Student("Jim", 22); Student stu2 = new Student("Jack", 21); Student stu3 = new Student("Tom", 23); Student stu4 = new Student("Amy", 26); Student stu5 = new Student("Shelldon", 30); Student stu6 = new Student("Raj", 19); Student stu7 = new Student("Lily", 27); Student stu8 = new Student("Lucy", 20); Student stu9 = new Student("Odom", 23); Student stu10 = new Student("James", 23); Student stu11 = new Student("Jardon", 23); Student stu12 = new Student("Rollin", 23); Student stu13 = new Student("Odom", 23); Student stu14 = new Student("Paulo",29); list.add(stu1); list.add(stu2); list.add(stu3); list.add(stu4); list.add(stu5); list.add(stu6); list.add(stu7); list.add(stu8); list.add(stu9); list.add(stu10); list.add(stu11); list.add(stu12); list.add(stu13); list.add(stu14); return list; } public static Set<Student> getStuSet() { //获取Set的方法 Set<Student> set = new HashSet<Student>(getStuList()); return set; } public static Map<Integer, Student> getStuMap() { //获取Map的方法 Map<Integer,Student> map = new HashMap<Integer,Student>(); List<Student> list2 = getStuList() ; //为了获取上面的List里面的内容 int xu = 1001; // Map中的key值, 作为Student的学号, 学号采用自增的方式:从1001开始 for (Student s : list2) { //添加进Map里面 map.put(xu++,s ); } return map; } }
public class Student implements Comparable<Student> { private String name; private Integer age; public Student() { super(); } public Student(String name, Integer age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((age == null) ? 0 : age.hashCode()); 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 (age == null) { if (other.age != null) return false; } else if (!age.equals(other.age)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } @Override public String toString() { //重写toString return " [name=" + name + ", age=" + age + "]\n"; } @Override public int compareTo(Student o) { //Comparable接口的方法 return this.age.compareTo(o.age); } }
List练习:
1. 添加一个学生, 姓名为"Paulo", 年龄为29, 并显示出所有学生姓名
2. 删除Jim的信息
3.将所有学生信息按照年龄排序, 由大到小显示出来
4.写一个方法, 将学生分为三组, 并将每组信息显示出来
5.写一个方法, 在数据源中删除重复的学生信息
6.显示出姓名以J开头的学生信息
7.显示出年龄大于25的学生信息
import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class Practise { public static void main(String[] args) { List <Student> list = DataSourceModel.getStuList();//因为是一个静态的方法,所以直接拿类名.取 list.add(new Student("Paulo",29) ); Student stu = null; for (Student s2 : list) { if(s2.getName().equals("Jim")) { stu = s2; //这里不能直接用remove } } list.remove(stu); //移除Jim的信息 //删除重复信息,可以直接Set方法,也可以自己定义一个方法CheckRepeat. Set<Student> set = DataSourceModel.getStuSet(); p(set); Collections.sort(list); //按年龄由大到小,需要先给Student一个Comparable的一个接口 Collections. reverse(list); // 逆序排列,就从大到小了 for (Student s3 : list) { //遍历 if( s3.getName().startsWith("J")) { //显示出姓名以J开头的学生信息 System.out.println(s3); } } System.out.println("=========="); for (Student s4 : list) { if( s4.getAge() > 25 ) { System.out.println(s4); } }
p(list); //输出信息要在Student类ToString CheckRepeat(list); } public static void CheckRepeat(List<Student> list) { for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.size(); j++) { Student s1 = list.get(i); Student s2 = list.get(j); if( s1.getName().equals( s2.getName())&& s1.getAge().equals(s2.getAge())&& i != j) { //注意自身和自身的情况 list.remove(s1); } } } } public static void p(Collection<Student> c) { //定义一个方法是用来显示集合里面的信息 for (Student s : c) { System.out.println(s); } } } }
Map练习
1. 显示所有学生信息, 带学号
2. 将第二个Odom更名为Tomson, 并将更名后的学生信息再显示出来,只是把名字改了,年龄不变
3. 将学号为1007的学生删除, 并将删除的学生信息显示
public class Practise {
public static void main(String[] args) {
//将第二个Odom更名为Tomson, 并将更名后的学生信息再显示出来,只是把名字改了,年龄不变 /*总结:这个问题的关键是取第二个Odom,要找到这个名字,就要先找到他的Key值,就要用到setkey这个方法,此时虽然找到 了这个Key值,但是要找到第二个出现的Odom,要把取出来的那个Key值放在一个新的集合里面,再去里面取*/ Set<Integer> setkey = map.keySet(); List <Integer> keylist = new ArrayList(); for (Integer i : setkey) { //遍历的是Key值 Student s = map.get(i); //获取 if(s.getName().equals("Odom")) { //判断是否是这个Odom这个名字 keylist.add(i); //添加名字为Odom的key到一个keylist } } Integer updatekey = keylist.get(1); //把第二个Odom里面的Key值取出来 Student s2 = map.get(updatekey); //取出 s2.setName("Tomson"); //改名 p2(map); System.out.println(map.remove(1007));//将学号为1007的学生删除, 并将删除的学生信息显示
} public static void p2(Map<Integer, Student> map) { Set<Integer> setkey = map.keySet(); //取出Map里面的键值,keySet这个方法 Iterator<Integer> i = setkey.iterator(); // while (i.hasNext()) { Integer key = i.next(); System.out.println(key+":"+ map.get(key) ); //定义的这个方法,显示所有学生的信息,带学号,用了一个迭代的方法 } } }
Iterator练习
1. 取出所有的学号, 迭代之后显示学号为1004-1009
2. 并将1005学号的信息删除, 删除之后再显示出所有学生信息
Map<Integer, Student> map = DataSourceModel.getStuMap(); Set<Integer> setkey = map.keySet(); Iterator<Integer> i = setkey.iterator(); while (i.hasNext()) { //仍有元素迭代,返回true Integer sno = i.next(); //返回迭代的下一个元素,取的是Key值 if( sno >= 1004&& sno <= 1009) { if(sno.equals(1005) ) { i.remove(); //此处迭代器里的remove属性不要与接口里的混淆 } else { System.out.println(sno); } } } p2(map); public static void p2(Map<Integer, Student> map) { Set<Integer> setkey = map.keySet(); //取出Map里面的键值,keySet这个方法 Iterator<Integer> i = setkey.iterator(); // while (i.hasNext()) { Integer key = i.next(); System.out.println(key+":"+ map.get(key) ); //定义的这个方法,显示所有学生的信息,带学号,用了一个迭代的方法 }