Java-集合练习题
第一题 (Map)利用Map,完成下面的功能:
从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。
附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录
- 历届世界杯冠军
| 届数 | 举办年份 | 举办地点 | 冠军 | 
| 1930年 | 乌拉圭 | 乌拉圭 | |
| 第二届 | 1934年 | 意大利 | 意大利 | 
| 第三届 | 1938年 | 法国 | 意大利 | 
| 第四届 | 1950年 | 巴西 | 乌拉圭 | 
| 第五届 | 1954年 | 瑞士 | 西德 | 
| 第六届 | 1958年 | 瑞典 | 巴西 | 
| 第七届 | 1962年 | 智利 | 巴西 | 
| 第八届 | 1966年 | 英格兰 | 英格兰 | 
| 第九届 | 1970年 | 墨西哥 | 巴西 | 
| 第十届 | 1974年 | 前西德 | 西德 | 
| 第十一届 | 1978年 | 阿根廷 | 阿根廷 | 
| 第十二届 | 1982年 | 西班牙 | 意大利 | 
| 第十三届 | 1986年 | 墨西哥 | 阿根廷 | 
| 第十四届 | 1990年 | 意大利 | 西德 | 
| 第十五届 | 1994年 | 美国 | 巴西 | 
| 第十六届 | 1998年 | 法国 | 法国 | 
| 第十七届 | 2002年 | 韩日 | 巴西 | 
| 第十八届 | 2006年 | 德国 | 意大利 | 
| 第十九届 | 2010年 | 南非 | 西班牙 | 
| 第二十届 | 2014年 | 巴西 | 德国 | 
(Map)在原有世界杯Map 的基础上,增加如下功能: 读入一支球队的名字,输出该球队夺冠的年份列表。 例如,读入“巴西”,应当输出 1958 1962 1970 1994 2002 读入“荷兰”,应当输出 没有获得过世界杯
package com.jihelianxi;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class TestSjb {
    public static void main(String[] args) {
        Map<String,String> ma=new HashMap<>();
        ma.put("1930","乌拉圭" );
        ma.put("1934","意大利" );
        ma.put("1938","意大利" );
        ma.put("1950","乌拉圭" );
        ma.put("1954","西德" );
        ma.put("1958","巴西" );
        ma.put("1962","巴西" );
        ma.put("1966","英格兰" );
        ma.put("1970","巴西" );
        ma.put("1934","西德" );
        Scanner sc=new Scanner(System.in);
        System.out.println("输入年份:");
        String st=sc.nextLine();
        if(ma.containsKey(st)==true)
        {
            
            System.out.println(st+"得冠国家是:"+ma.get(st));
                
        }
        else
        {
            System.out.println(st+"没举办世界杯");
        }
        
        Scanner sc1 = new Scanner(System.in);
        System.out.println("请输入夺冠球队");
        String str1 = sc1.nextLine();
        if(ma.containsValue(str1)==false)
        {
            System.out.println(str1+"队没有获得过冠军");
        }
        else
        {
            System.out.println(str1+"队的夺冠年份是:");
            for(String str :ma.keySet())
            {
                if(ma.get(str).equals(str1))
                {
                    System.out.print(str+" ");
                    }
            }
            
        }
    
        //遍历keySet集合 获取value
//        for(String st:ma.keySet())
//        {
//            String b=ma.get(st);
//        }
//        
//        System.out.println("输入国家名字:");
//        String str=sc.nextLine();
//        for(int i=0;i<ma.size();i++)
//        {
//            if(b.equals(str))
//            {
//                System.out.println(st);
//            }
//            else
//            {
//                System.out.println("没有获得过世界杯");
//            }
//        }
        
        
        
    }
}
第二题 已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数
2008 北京奥运会男足参赛国家:
科特迪瓦,阿根廷,澳大利亚,塞尔维亚,荷兰,尼日利亚、日本,美国,中国,新西 兰,巴西,比利时,韩国,喀麦隆,洪都拉斯,意大利
package com.jihelianxi;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Zuqiufenlei {
    public static void main(String[] args) {
        Random ra=new Random();
        List<String> li=new ArrayList<>();
        li.add("科特迪瓦");
        li.add("阿根廷");
        li.add("澳大利亚");
        li.add("塞尔维亚");
        li.add("荷兰");
        li.add("尼日利亚");
        li.add("日本");
        li.add("美国");
        li.add("中国");
        li.add("新西 兰");
        li.add("巴西");
        li.add("比利时");
        li.add("韩国");
        li.add("喀麦隆");
        li.add("洪都拉斯");
        li.add("意大利");
        for(int i=1;i<=4;i++)
        {
            System.out.println("第"+i+"组:");
            for(int j=0;j<4;j++)
            {
            
            String str=li.get(ra.nextInt(li.size()));
            System.out.print(str+" ");
            li.remove(str);
            }
            System.out.println();
        
        }
    }
}
结果:

3
第三题 有如下Student 对象,
private String name;
private int age;
private int score;
private String classNum;
其中,classNum 表示学生的班号,例如“class05”。 有如下List
List list = new ArrayList();
list.add(new Student(“Tom”, 18, 100, “class05”));
list.add(new Student(“Jerry”, 22, 70, “class04”));
list.add(new Student(“Owen”, 25, 90, “class05”));
list.add(new Student(“Jim”, 30,80 , “class05”));
list.add(new Student(“Steve”, 28, 66, “class06”));
list.add(new Student(“Kevin”, 24, 100, “class04”));
在这个list 的基础上,完成下列要求:
1) 计算所有学生的平均年龄
2) 计算各个班级的平均分
package com.jihelianxi;
public class Lianxi3 {
     private String name;  
     private int age;  
     private int score;  
     private String classNum;
     
     public Lianxi3(String name, int age, int score, String classNum) {
        super();
        this.name = name;
        this.age = age;
        this.score = score;
        this.classNum = classNum;
    }
     
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
    public String getClassNum() {
        return classNum;
    }
    public void setClassNum(String classNum) {
        this.classNum = classNum;
    } 
 
}
main方法:
package com.jihelianxi;
import java.util.ArrayList;
import java.util.List;
public class Lianxi31 {
    public static void main(String[] args) {
        
        List<Lianxi3> list=new ArrayList<>();
        list.add(new Lianxi3("Tom", 18, 100, "class05"));  
        list.add(new Lianxi3("Jerry", 22, 70, "class04")); 
        list.add(new Lianxi3("Owen", 25, 90, "class05")); 
        list.add(new Lianxi3("Jim", 30,80 , "class05")); 
        list.add(new Lianxi3("Steve", 28, 66, "class06"));
        list.add(new Lianxi3("Kevin", 24, 100, "class04")); 
        double pingju=0;
        
        for(int i=0;i<list.size();i++)
        {
            
            Integer in=list.get(i).getAge();
            pingju=(pingju+in);
            
        }
        double s=pingju/list.size();
        
        System.out.println("平均年龄:"+s);
             int num1=0;
            int num2=0;
            int num3=0;
            int score1=0;
            int score2=0;
            int score3=0;
            for(int i =0;i<list.size();i++)
            {                        
                Lianxi3 st =list.get(i);
                if(st.getClassNum()=="class04")
                {
                    num1++;
                    score1+=st.getScore();                
                }
                else if(st.getClassNum()=="class05")
                {
                    num2++;
                    score2+=st.getScore();    
                }
                else
                {
                    num3++;
                    score3+=st.getScore();    
                }            
            }
            System.out.println("class04的平均分:"+(score1/num1));
            System.out.println("class05的平均分:"+(score2/num2));
            System.out.println("class06的平均分:"+(score3/num3));
        
    }
}
结果:

4
第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如:
List list = new ArrayList();
list.add(“Hello”);
list.add(“World”);
list.add(“Learn”); //此时list 为Hello World Learn
reverseList(list); //调用reverseList 方法之后,list 为Learn World Hello
package com.jihelianxi;
import java.util.ArrayList;
import java.util.List;
public class Lianxi4 {
    
    public void reverseList(List<String> list)
    {
        List<String> li=new ArrayList<>();
        for(int i=list.size()-1;i>=0;i--){
            li.add(list.get(i));
        }
        System.out.println("list="+li);
    }
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(); 
        list.add("Hello"); 
        list.add("World"); 
        list.add("Learn");
        System.out.println("list="+list.toString());
        Lianxi4 lx=new Lianxi4();
        lx.reverseList(list);
        
    }
}
结果:

第五题 (Map)设计Account 对象如下:
private long id;
private double balance;
private String password;
要求完善设计,使得该Account 对象能够自动分配id。 给定一个List 如下:
List list = new ArrayList();
list.add(new Account(10.00, “1234”));
list.add(new Account(15.00, “5678”));
list.add(new Account(0, “1010”));
要求把List 中的内容放到一个Map 中,该Map 的键为id,值为相应的Account 对象。 最后遍历这个Map,打印所有Account 对象的id 和余额。
package com.jihelianxi;
import java.util.Random;
public class Lianxi5 {
    
    private long id;  
    private double balance;  
    private String password;
    Random ra=new Random();
    
   public Lianxi5(double balance, String password) {
        super();
        this.id=ra.nextInt(1000000)+1000000;
        this.balance = balance;
        this.password = password;
    }
   
    public Lianxi5() {
    super();
}
    @Override
    public String toString() {
        return "Lianxi5 [balance=" + balance + ", password=" + password + "]";
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public double getBalance() {
        return balance;
    }
    public void setBalance(double balance) {
        this.balance = balance;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
测试;
package com.jihelianxi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Lianxi51 {
    public static void main(String[] args) {
        
        Lianxi5 lx=new Lianxi5();
        
        List<Lianxi5> li=new ArrayList<Lianxi5>();
        
        
        li.add(new Lianxi5(10.00, "1234"));
        li.add(new Lianxi5(15.00, "5678"));
        li.add(new Lianxi5(0, "1010"));
        
        Map<Long, Lianxi5> ma=new HashMap<>();
        
        for(Lianxi5 l:li)
        {
            ma.put(l.getId(), l);
        }
        
        for(Long lo:ma.keySet())
        {
            System.out.println("id="+lo+" 余额="+ma.get(lo).getBalance());
        }
    }
}
结果:



 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号