千锋Java&Day25课后作业

努力到无能为力,拼搏到感动自己!
加油!

集合中的Set和Map

特点是无序,无下标,集合元素不重复

4.(Set,List)

 import java.util.*; 

public class TestListSet{
          public static void main(String args[]){ 
              List<String> list = new ArrayList<String>();
               list.add(“Hello”); 
               list.add(“Learn”);
               list.add(“Hello”); 
               list.add(“Welcome”);
               Set<String> set = new HashSet<String>(); 
               set.addAll(list); 
                 System.out.println(set.size());
           }
    }

     选择正确答案
     A. 编译不通过
     B. 编译通过,运行时异常
     C. 编译运行都正常,输出 3
     D. 编译运行都正常,输出 4
     C

6.(Set,Hash 算法)为上一题的 Worker 类,在添加完 equals 方法的基础上,添加一个 hashCode 方法。

public int hashCode(){
         //1
   }
   有几种写法:
   I.  return 0;.int result = 0;
      if (name != null) result = name.hashCode(); 
      return result + age;
      
   III. return super.hashCode();

       现在要把 Worker 类放入 HashSet 中,并希望在 HashSet 中没有重复元素,则下面说法正确的是:
       A.三种写法都正确
       B.I、II 写法正确,II 的效率更高
       C.II 写法正确,I、III 写法都不正确
   B

7.(Set,Hash 算法,方法覆盖)代码改错

import java.util.*;
       class Worker{
            String name;
            int age;
            double salary;
            public Worker(){}
          public Worker(String name, int age, double salary){
              this.name = name;
              this.age = age;
              this.salary = salary;
          }
          int hashCode(){
               return name.hashCode() + age + salary;
          }
          public boolean equals(Worker w){
              if (w.name == name && w.salary == salary && w.age == age){
                   return true;
               }else{
                   return false;
              }
           }
      }
      public class TestWorker{
           public static void main(String args[]){
               Set<Worker> set = new HashSet<Worker>();
               set.add(new Worker(“tom”, 18, 2000));
               set.add(new Worker(“tom”, 18, 2000));
               set.add(0, new Worker(“jerry”, 18,2000));
                  System.out.println(set.size());
            }
     }
    //1.重写父类方法,权限不能小于父类
     public int hashCode(){  
     //2.HashSet是无序的集合,不能在指定位置添加
     set.add(0, new Worker(“jerry”, 18, 2000));

8.(Set,Hash 算法)在前面的 Worker 类基础上,为 Worker 类增加相应的方法,使得 Worker 放入HashSet 中时,Set 中没有重复元素。并编写相应的测试代码。

	import java.util.HashSet;
     import java.util.Set;
class Worker{	
       String name;	
       int age;	
       double salary;	
       public Worker() {}
       
       	public Worker(String name, int age, double salary) {		
       	     this.name = name;		
       	     this.age = age;		
       	     this.salary = salary;	
       	 }
       	 	
	     @Override	
	     public String toString() {	
	     	return "Worker [name=" + name + ", age=" + age + ", salary=" + salary + "]";	
	     }
	     @Override	
	     public int hashCode() {	
	     	return name.hashCode() + age + (int)salary;
	     }
	     public boolean equals(Worker w) {		
	        if(this.name.equals(w.name) && w.salary == this.salary && w.age == this.age) {		
	        	return true;		
	        }else{			
	            return false;	
	       	}	
	     }	
	  @Override
	   //判别类型	
	    public boolean equals(Object obj) {	
	    	if (this == obj) {		
	    		return true;	
	        	}	
	       	if (obj == null) {			
	       	    return false;	
	       	}		
	       	if (this.getClass() != obj.getClass()) {		
	       		return false;	
	       	}	
	        	Worker w = (Worker) obj;		
	        	if(this.name.equals(w.name) && w.salary == this.salary && w.age == this.age) {		
	        		return true;		
	        	}else{		
	        		return false;	
	        		}	
	        	}	
	       }
	       public class TestWorker {	
	          public static void main(String[] args) {	
	          	Set<Worker> set = new HashSet<Worker>();
	          	set.add(new Worker("tom" , 18 , 2000));
	       		set.add(new Worker("mack" , 21 , 3000));		
	       		set.add(new Worker("jerry" , 18 , 2000));
	       			System.out.println(set.size());		
	       			for (Worker w : set) {	
	       				System.out.println(w.toString());	
	       			}	
	       	   }
	       }

在这里插入图片描述

9.(Map)关于下列 Map 接口中常见的方法:

1) put 方法表示放入一个键值对,如果键已存在则_**新值替换旧值**_,如果键不存在则__**创建一个键值对**_。
2)remove 方法接受__**一个**___个参数,表示__**删除一个键值对**__。
3)get 方法表示__**通过键值查找**___,get 方法的参数表示__**键名**__,返回值表示__**键的名**__。
4)要想获得 Map 中所有的键,应该使用方法__**keyset**__,该方法返回值类型为__**set**__。
5)要想获得 Map 中所有的值,应该使用方法__**value**__,该方法返回值类型为__**Collcetions**__。

10.(Map)利用 Map,完成下面的功能:
从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该年没有举办世界杯,则输出:没有举办世界杯。
附录:截止 2009 年,历届世界杯冠军、世界杯冠军以及对应的夺冠年份:
在这里插入图片描述

public class TestWorldCup {
	public static void main(String[] args) {	
		Map<String, String> map = new HashMap<String, String>();	
			map.put("2006", "意大利");		
			map.put("2002", "巴西");		
			map.put("1998", "法国");		
			map.put("1994", "巴西");		
			map.put("1990", "德国");		
			map.put("1986", "阿根廷");		
			map.put("1982", "意大利");		
			map.put("1978", "阿根廷");		
			map.put("1974", "德国");		
			map.put("1970", "巴西");		
			map.put("1966", "英格兰");		
			map.put("1962", "巴西");		
			map.put("1958", "巴西");		
			map.put("1954", "德国");		
			map.put("1950", "乌拉圭");		
			map.put("1938", "意大利");		
			map.put("1934", "意大利");		
			map.put("1930", "乌拉圭");		
			Scanner input = new Scanner(System.in);
		    System.out.print("输入一个年份:");		
		    String str = input.next();		
		       if (map.containsKey(str)) {			
		           System.out.println("该年世界杯冠军是:" + map.get(str));		
		        } else {	
		        		System.out.println("没有举办世界杯");		
		        	}	
		        }
}

11.(Map)已知某学校的教学课程内容安排如下:

老师课程
TomCoreJava
 John	    Oracle
 Susan	Oracle
 Jerry	    JDBC
 Jim	     Unix
 Kevin	 JSP
 Lucy	     JSP
 
  完成下列要求:
  1)使用 Map,以老师的名字作为键,教授的课程名作为值,表示上述课程安排。
  2)增加了一位新老师 Allen 教 JDBC 
  3)Lucy 改为教 CoreJava
  4)遍历 Map,输出所有的老师及老师教授的课程 
  5)利用 Map,输出所有教 JSP 的老师。
public class TestMap {
	public static void main(String[] args) {		
	   Map<String,String> map = new HashMap<String, String>();		
	   //1.使用Map,以老师名字作为键,教授的课程名作为值,表示上述课程安排	
		map.put("Tom","CoreJava");		
		map.put("John","Oracle");		
		map.put("Susan","Oracle");		
		map.put("Jerry","JDBC");		
		map.put("Jim","Unix");		
		map.put("Kevin","JSP");		
		map.put("Lucy","JSP");	
			
		//2.增加一位新教师Allen教JDBC		
		map.put("Allen", "JDBC");		
		
		//3.Lucy改为教CoreJava		
		map.put("Lucy", "CoreJava");	
		
		//4.输出所有老师及老师教授的课程		
		Set<String> keySet = map.keySet();		
		Iterator<String> iterator = keySet.iterator();	
	     	System.out.println("老师"+"\t"+"课程");       
	     	 while (iterator.hasNext()) {         
	     	    String key = (String) iterator.next();  
	     	        System.out.println(key+"\t"+map.get(key));     
	     	     }    
	     	     
         //5.输出所有教JSP的老师        
         System.out.println("教JSP的老师");        
            for(String key:keySet) {        	
               if(map.get(key).equals("JSP")) { 
                    	System.out.println(key);        	
                  }     
               }
          	}
     }

12.(Set,HashSet,空指针)有下面代码

import java.util.*;
         class Student { 
               int age; 
               String name;
               public Student(){}
               public Student(String name, int age){ 
                     this.name = name;
                     this.age = age;
               }
               public int hashCode(){
                    return name.hashCode() + age;
               }
               public boolean equals(Object o){
                    if (o == null) return false; 
                    if (o == this) return true;
                    if (o.getClass() != this.getClass()) 
                        return false; 
                         Student stu = (Student) o;
                     if (stu.name.equals(name) && stu.age == age) 
                        return true;else return false;
                      }
                     }
                 public class TestHashSet{
                     public static void main(String args[]){ 
                        Set<Student> set = new HashSet<Student>();
                        Student stu1 = new Student();
                        Student stu2 = new Student(“Tom”, 18);
                        Student stu3 = new Student(“Tom”, 18);
                        set.add(stu1);
                        set.add(stu2);
                        set.add(stu3);
                          System.out.println(set.size());
                      }
                 }
                 
         下列说法正确的是:
         A.编译错误
         B.编译正确,运行时异常
         C.编译运行都正确,输出结果为 3
         D.编译运行都正确,输出结果为 2
      B 空指针异常

13.(Map)在原有世界杯 Map 的基础上,增加如下功能:读入一支球队的名字,输出该球队夺冠的年份列表。
例如:
1)读入“巴西”,应当输出 1958、1962、1970、1994、2002
2)读入“荷兰”,应当输出”没有获得过世界杯”。

//思路:每一年只能有一个冠军,所以用年份来做key,用冠军来做value
 import java.util.HashMap;
 import java.util.Scanner;
  public class Map {    
      public static void main(String[] args) {   
             java.util.Map<String, String> m1 = new HashMap<>(); 
                    m1.put("1930", "乌拉圭");        
                    m1.put("1934", "意大利");        
                    m1.put("1938", "意大利");        
                    m1.put("1950", "乌拉圭");        
                    m1.put("1954", "西德");        
                    m1.put("1958", "巴西");        
                    m1.put("1962", "巴西");        
                    m1.put("1966", "英格兰");        
                    m1.put("1970", "巴西");        
                    m1.put("1974", "西德");        
                    m1.put("1978", "阿根廷");        
                    m1.put("1982", "意大利");        
                    m1.put("1986", "阿根廷");        
                    m1.put("1990", "西德");        
                    m1.put("1994", "巴西");        
                    m1.put("1998", "法国");        
                    m1.put("2002", "巴西");        
                    m1.put("2006", "意大利");        
                    m1.put("2010", "西班牙");        
                    m1.put("2014", "德国");     
                     Scanner sc = new Scanner(System.in); 
                           System.out.println("请输入年份");    
                      String str = sc.nextLine();   
                      if(m1.containsKey(str)==false){       
                            System.out.println(str+"年没有举办世界杯"); 
                         } else {     
                            System.out.println(str+"年的夺冠球队是:"+m1.get(str));      
                         }       
                       Scanner sc1 = new Scanner(System.in);     
                          System.out.println("请输入夺冠球队");       
                           String str1 = sc1.nextLine();   
                       if(m1.containsValue(str1)==false)  {    
                           System.out.println(str1+"队没有获得过冠军");  
                         } else {        
                            System.out.println(str1+"队的夺冠年份是:");   
                       for(String k :m1.keySet()) {    
                         if(m1.get(k).equals(str1)){                 
                             System.out.print(" "+k);              
                          }          
                      }      
                 }    
          } 
 }

14.(Map) 给定一个字符串,请输出该字符串由哪些字符组成,每个字符出现几次?

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
     public class TestMap {	
        public static void main(String[] args) {	
        	Scanner scanner = new Scanner(System.in);	
        		System.out.println("请输入字符串:");	
          	String str = scanner.next();		
          	Map<Character , Integer> map = new HashMap<Character , Integer>();		
          	for (int i = 0; i < str.length(); i++) {			
          	      Character ch = str.charAt(i);			
          	  if(map.get(ch) == null) {			
          	      	map.put(ch, 1);		
          	   	}else {	
          	     	int in = map.get(ch);				
          	       map.put(ch, in + 1);		
          	     	}		
          	   }
       		System.out.println(map.entrySet());	
       }
 }

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值