zoukankan      html  css  js  c++  java
  • 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 + "]
    ";
    	}
    
    	@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) );
    			//定义的这个方法,显示所有学生的信息,带学号,用了一个迭代的方法
    				
    	}	
    
  • 相关阅读:
    Generator函数执行器-co函数库源码解析
    前端解读Webview
    javascript设计模式详解之策略模式
    javascript设计模式详解之命令模式
    【VBA】标准Sub/Function定义,带ScreenUpdating、On Error GoTo
    【VBA】全局数组定义
    【VBA】全局常量定义
    调试Java代码(Eclipse)汇总
    为Eclipse添加反编译插件,更好的调试
    Eclipse图标含义
  • 原文地址:https://www.cnblogs.com/zuo72/p/7931961.html
Copyright © 2011-2022 走看看