Java集合练习

  1. 定义一个 Employee 类。
    该类包含:private 成员变量 name,age,birthday,其中 birthday 为
    MyDate 类的对象;
    并为每一个属性定义 getter, setter 方法;
    并重写 toString 方法输出 name, age, birthday
    MyDate 类包含:
    private 成员变量 year,month,day;并为每一个属性定义 getter, setter
    方法;
    创建该类的 5 个对象,并把这些对象放入 TreeSet 集合中(
    TreeSet 需使用泛型来定义)
    分别按以下两种方式对集合中的元素进行排序,并遍历输出:
    1). 使 Employee 实现 Comparable 接口,并按 name 排序
    2). 创建 象,按生日日期的先后排序。
public class Employee implements Comparable<Employee>{
    private String name;
    private int age;
    private MyDate birthDay;

    public Employee() {
    }

    public Employee(String name, int age, MyDate birthDay) {
        this.name = name;
        this.age = age;
        this.birthDay = birthDay;
    }

    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 MyDate getBirthDay() {
        return birthDay;
    }

    public void setBirthDay(MyDate birthDay) {
        this.birthDay = birthDay;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", birthDay=" + birthDay +
                '}';
    }




    @Override
    public int compareTo(Employee o) {
        int result=this.getName().compareTo(o.name);
        return  result;
    }
}

//Mydate类
public class MyDate implements Comparable<MyDate>{
    private int year;
    private int month;
    private int day;

    public MyDate() {
    }

    public MyDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    @Override
    public String toString() {
        return "MyDate{" +
                "year=" + year +
                ", month=" + month +
                ", day=" + day +
                '}';
    }

    @Override
    public int compareTo(MyDate o) {
        int result=this.year-o.year;
        result=result==0?this.month-o.month:result;
        result=result==0?this.day-o.day:result;
        return result;
    }
}

public class Exam6 {
    public static void main(String[] args) {
        TreeSet<Employee> employees = new TreeSet<>();
        employees.add(new Employee("Tack", 22, new MyDate(2000, 3, 20)));
        employees.add(new Employee("Jack", 25, new MyDate(1997, 7, 21)));
        employees.add(new Employee("Mary", 22, new MyDate(2000, 5, 21)));
        employees.add(new Employee("Anna", 20, new MyDate(2002, 12, 1)));
        employees.add(new Employee("Tony", 23, new MyDate(1999, 3, 20)));
        for (Employee employee : employees) {
            System.out.println(employee);
        }

        System.out.println("+++++++++++++++++++++++++++++++++++++");

        TreeSet<Employee> employees1=new TreeSet<Employee>(new Comparator<Employee>() {

            @Override
            public int compare(Employee o1, Employee o2) {
                MyDate d1=o1.getBirthDay();
                MyDate d2=o2.getBirthDay();
                int result=0;
                if ((d1.getYear()-d2.getYear()!=0)){
                     result= d1.getYear()-d2.getYear();
                }else if ((d1.getMonth()-d2.getMonth()!=0)){
                    result= d1.getMonth()-d2.getMonth();
                }else if (d1.getDay()-d2.getDay()!=0){
                    result= d1.getDay()-d2.getDay();
                }
                return result;
            }

        });
        employees1.add(new Employee("Tack", 22, new MyDate(2000, 3, 20)));
        employees1.add(new Employee("Jack", 25, new MyDate(1997, 7, 21)));
        employees1.add(new Employee("Mary", 22, new MyDate(2000, 5, 21)));
        employees1.add(new Employee("Anna", 20, new MyDate(2002, 12, 1)));
        employees1.add(new Employee("Tony", 23, new MyDate(1999, 3, 20)));
        for (Employee employee : employees1) {
            System.out.println(employee);
        }

    }
}

2.定义个泛型类 DAO,在其中定义一个 Map 成员变量,Map 的键为 String 类型,值为 T 类型。
分别创建以下方法:
public void save(String id,T entity): 保存 T 类型的对象到 Map 成员变量中
public T get(String id):从 map 中获取 id 对应的对象
public void update(String id,T entity):替换 map 中 key 为 id 的内容,改为 entity 对象
public List list():返回 map 中存放的所有 T 对象
public void delete(String id):删除指定 id 对象
定义一个 User 类:
该类包含:private 成员变量(int 类型) id,age;(String 类型)name。
定义一个测试类:
创建 DAO 类的对象, 分别调用其 save、get、update、list、delete 方法来操作 User 对象,
创建测试类进行测试。

public class DAO<T>{
    private Map<String,T> map;

    public DAO() {
    }

    public DAO(Map<String, T> map) {
        this.map = map;
    }
    //public void save(String id,T entity): 保存 T 类型的对象到 Map 成员变量中
    public void save(String id,T entrity){
        map.put(id, entrity);
    }
    //public T get(String id):从 map 中获取 id 对应的对象
    public T get(String id){
        return map.get(id);
    }
    //public void update(String id,T entity):替换 map 中 key 为 id 的内容,改为 entity 对象
    public void update(String id,T entity){
        if (map.containsKey(id)){
            map.put(id,entity);
        }
    }
    //public List<T> list():返回 map 中存放的所有 T 对象
    public List<T> list(){
        List<T> list=new ArrayList<>();
        Set<Map.Entry<String, T>> entries = map.entrySet();
        for (Map.Entry<String, T> entry : entries) {
            list.add(entry.getValue());
        }
        return list;
    }

    //public void delete(String id):删除指定 id 对象
    public void delete(String id){
        map.remove(id);
    }
}
public class User {
    private int id;
    private int age;
    private String name;

    public User() {
    }

    public User(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
public class Exam7 {
    public static void main(String[] args) {

        User user4=new User(1,10,"jane");
        User user1=new User(2,12,"jack");
        User user2=new User(3,10,"jenny");
        User user3=new User(4,11,"joe");

        DAO<User> userDAO=new DAO<>(new HashMap<>());
        userDAO.save("101",user1);
        userDAO.save("102",user2);
        userDAO.save("103",user3);
        userDAO.save("104",user4);

        //修改
        userDAO.update("101",new User(5,15,"Marry"));

        userDAO.get("104");

        List<User> list= userDAO.list();
        System.out.println(list);

        userDAO.delete("102");

        List<User> list2= userDAO.list();
        System.out.println(list2);
    }
}

3.开发一个泛型Apple类,要求有一个重量属性weight
在测试类中实例化不同的泛型对象,
要求
对象a1的这一属性是String类型,
对象a2的这一属性是Integer型,
对象a3的这一属性是Double型。
分别为a1,a2,a3的重量属性赋值为:”500克”,500,500.0,在测试类中通过对象调用访问器得到属性值并输出。
另外思考,为什么a2和a3的属性需要是Integer和Double而不是int和double?

public class Apple<T>{
    private T weight;

    public Apple() {
    }

    public Apple(T weight) {
        this.weight = weight;
    }

    public T getWeight() {
        return weight;
    }

    public void setWeight(T weight) {
        this.weight = weight;
    }

    @Override
    public String toString() {
        return "Apple{" +
                "weight=" + weight +
                '}';
    }
}
public class Test {
    public static void main(String[] args) {
        Apple<Integer> apple1=new Apple<>(200);
        Apple<Double> apple2=new Apple<>(200d);
        Apple<String> apple3=new Apple<>("200");
        System.out.println(apple1);
        System.out.println(apple2);
        System.out.println(apple3);


    }
}

4.按要求完成下列任务
(1. 使用HashMap类实例化一个Map类型的对象m1,键(String类型)和值(int型)分别用于存储员工的姓名和工资,存入数据如下: 张三——800元;李四——1500元;王五——3000元;
(2. 将张三的工资更改为2600元
(3. 为所有员工工资加薪100元;
(4. 遍历集合中所有的员工
(5. 遍历集合中所有的工资

public static void main(String[] args) {
        Map<String,Integer> m1=new HashMap<String,Integer>();
        m1.put("张三",800);
        m1.put("李四",1500);
        m1.put("王五",3000);
        m1.put("张三",2600);
        System.out.println(m1);
        Collection<Integer> values = m1.values();
        Set<String> keys = m1.keySet();
        for (String key : keys) {
            Integer value= m1.get(key)+100;
            m1.put(key,value);
        }

        System.out.println(m1);
        //遍历所有的员工
        for (String s : keys) {
            System.out.println(s);
        }
        //遍历所有的工资
        for (Integer value : values) {
            System.out.println(value);

        }
    }
  1. (Map)利用Map,完成下面的功能:
    从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。
    附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录
  2. 历届世界杯冠军

届数 举办年份 举办地点 冠军
第一届 1930年 乌拉圭 乌拉圭
第二届 1934年 意大利 意大利
第三届 1938年 法国 意大利
第四届 1950年 巴西 乌拉圭
第五届 1954年 瑞士 西德
第六届 1958年 瑞典 巴西
第七届 1962年 智利 巴西
第八届 1966年 英格兰 英格兰
第九届 1970年 墨西哥 巴西
第十届 1974年 前西德 西德
第十一届 1978年 阿根廷 阿根廷
第十二届 1982年 西班牙 意大利
第十三届 1986年 墨西哥 阿根廷
第十四届 1990年 意大利 西德
第十五届 1994年 美国 巴西
第十六届 1998年 法国 法国
第十七届 2002年 韩日 巴西
第十八届 2006年 德国 意大利
第十九届 2010年 南非 西班牙
第二十届 2014年 巴西 德国

public class Exam10 {
    public static void main(String[] args) {
        //创建集合
        TreeMap<Integer,String> mess=new TreeMap<Integer,String>();
        String [] winners={"第一届 1930年 乌拉圭 乌拉圭",
                "第二届	1934年	意大利	意大利",
                "第三届	1938年	法国	意大利",
                "第四届	1950年	巴西	乌拉圭",
                "第五届	1954年	瑞士	西德",
                "第六届	1958年	瑞典	巴西",
                "第七届	1962年	智利	巴西",
                "第八届	1966年	英格兰	英格兰",
                "第九届	1970年	墨西哥	巴西",
                "第十届	1974年	前西德	西德",
                "第十一届	1978年	阿根廷	阿根廷",
                "第十二届	1982年	西班牙	意大利",
                "第十三届	1986年	墨西哥	阿根廷",
                "第十四届	1990年	意大利	西德",
                "第十五届	1994年	美国	巴西",
                "第十六届	1998年	法国	法国",
                "第十七届	2002年	韩日	巴西",
                "第十八届	2006年	德国	意大利",
                "第十九届	2010年	南非	西班牙",
                "第二十届	2014年	巴西	德国"
        };
        int index=1930;
        for (int i = 0; i < winners.length; i++) {
            String value=winners[i];
            mess.put(index,value);
            index+=4;
        }

        System.out.println("请输入年份:");
        Scanner sc=new Scanner(System.in);
        int year=sc.nextInt();
        if (mess.containsKey(year)){
            System.out.println(mess.get(year));
        }else{
            System.out.println("该年没有举办世界杯!");
        }

    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值