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

 

转载于:https://www.cnblogs.com/zuo72/p/7931961.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值