准备数据
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) );
//定义的这个方法,显示所有学生的信息,带学号,用了一个迭代的方法
}