1.定义罪犯Criminal类,height(身高)/weight(体重)/blood(血型)/home(籍贯)属性。

重写hashcode和equals,使用四个属性的组合进行实现。

创建HashSet集合,里面存放20个Criminal对象,其中O型血2人,A型血3人,B型血4人,AB型血1人,其余血型不详。

注意:hashcode()方法实现时,要求身高、体重、和血型三个属性合成一个数字,实现两两比较的高效算法。

2.Map:

-----------

key(键) - value(值) :kv对.

创建HashMap,Person为key,Dog为value。

存放100元素,遍历map集合,两种方式。EntrySet + KeySet.

删除操作。remove();

3.HashTable:线程安全的。

---------------

1.put

2.

3.

4.

-----------------------------------------------------------------------------------------------------

keySet方法 : 返回的是键的set集合,通过get(key)方法获取value

entrySet方法 : 返回的是映射关系的set集合,通过getKey(),getValue()方法获取key,value

答:

1.

package com.it18zhang.day11;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Map;

import java.util.Set;

public class HashSetTest {

    public static void main(String[] args) {

        Set<Criminal> set = new HashSet<Criminal>();

        

        Criminal c1 = new Criminal(180,70,2,"江西");

        Criminal c2 = new Criminal(176,60,1,"北京");

        Criminal c3 = new Criminal(160,70,0,"福建");

        Criminal c4 = new Criminal(183,73,3,"湖南");

        Criminal c5 = new Criminal(183,73,3,"湖南");

        

        set.add(c1);

        set.add(c2);

        set.add(c3);

        set.add(c4);

        set.add(c5);

        

        System.out.println(c1.equals(c2));

        System.out.println(c5.equals(c4));

        for(Criminal c : set){

            out(c);

        }

    }

    

    public static void out(Criminal c){

        Map<Integer,String> map = new HashMap<Integer,String>();

        map.put(0, "A");

        map.put(1, "B");

        map.put(2, "AB");

        map.put(3, "O");

        System.out.println("身高"+c.getHeight()+"体重"+c.getWeight()+"血型"+map.get(c.getBlood())+"籍贯"+c.getHome());

        

    }

}

package com.it18zhang.day11;

public class Criminal {

    private int height;

    private int weight;

    private int blood;

    private String home;

    public Criminal(){}

    public Criminal(int height, int weight, int blood, String home) {

        if(height <= 0){

            System.out.println("身高不能为负!");

            System.exit(-1);

        }else if(weight <= 0){

            System.out.println("体重不能为负");

        }else if(blood > 3 || blood < 0){

            System.out.println("血型,必须为0-3之间的值");

            System.exit(-1);

        }else{

            this.height = height;

            this.weight = weight;

            this.blood = blood;

            this.home = home;

        }

    }

    

    public int getHeight() {

        return height;

    }

    public void setHeight(int height) {

        this.height = height;

    }

    public int getWeight() {

        return weight;

    }

    public void setWeight(int weight) {

        this.weight = weight;

    }

    public int getBlood() {

        return blood;

    }

    public void setBlood(int blood) {

        this.blood = blood;

    }

    public String getHome() {

        return home;

    }

    public void setHome(String home) {

        this.home = home;

    }

    /* 

     *重写hashcode 

     */

    public int hashCode()

    {

        return height+weight+blood+home.hashCode();

    }

    /**

     * 重写equals方法

     */

    public boolean equals(Object obj)

    {

        if(obj == null)

            return false;

        if(obj == this)

            return true;

        

        //height,weight,blood,home四个条件同时满足才相同。

        if(obj.getClass() == Criminal.class){

            Criminal c = (Criminal)obj;

            if(c.height == this.height && c.weight == this.weight && c.blood == this.blood && this.home.equals(c.home))

                return true;

        }

        

        return false;

        

    }

    

}

2.Map

package com.it18zhang.day11;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

public class HashMapTest {

    public static void main(String[] args) {

        Map<Person,Dog> map = new HashMap<Person,Dog>();

        List<Person> keys = new ArrayList<Person>();

        for(int i = 0; i < 100; i++){

            Person p = new Person("Person"+i,i);

            map.put(p, new Dog("dog"+i,i));

            keys.add(p);

        }

        System.out.println("---------------------------------keySet-----------");

        for(Person p : map.keySet()){

            System.out.println(p.getName()+"\t"+map.get(p).getName());

        }

        System.out.println("--------------------------------EntrySet----------");

        for(Entry<Person,Dog> entry : map.entrySet()){

            System.out.println(entry.getKey().getName()+"\t"+entry.getValue().getName());

        }

        System.out.println("------------remove前---------------");

        for(Person p : keys){

            map.remove(p);

        }

        

        System.out.println("------------remove后---------------");

        System.out.println("map是否为空"+map.isEmpty());

    }

}

package com.it18zhang.day11;

public class Person {

    private String name;

    private int age;

    

    public Person() {

        super();

    }

    public Person(String name, int age) {

        super();

        this.name = name;

        this.age = age;

    }

    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 hashCode(){

        return name == null ?age : name.hashCode() + age;

    }

    public boolean equals(Object obj){

        if(obj == null)

            return false;

        if(obj == this)

            return true;

        if(obj.getClass() == Person.class){

            Person p = (Person)obj;

            //name是否相同

            boolean nameEqu = false;

            if(this.name == null){

                if(p.name == null)

                    nameEqu = true;

                else{

                    nameEqu = false;

                }

            }

            else{

                nameEqu = name.equals(p.name);

            }

            

            boolean ageEqu = (this.age == p.age);

            

            return nameEqu && ageEqu;

        }

        return false;

    }

}

package com.it18zhang.day11;

public class Dog {

    private String name;

    private int age;

    public Dog() {

        

    }

    

    public Dog(String name, int age){

        this.name = name;

        this.age = age;

    }

    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;

    }

    

    

    

}

转载于:https://blog.51cto.com/liubx/1784026

IT十八掌作业_java基础第十一天_集合相关推荐

  1. IT十八掌作业_java基础第十八天_项目完善

    感谢大家对IT十八掌大数据的支持,今天的作业如下: 1.QQ完成 2.使用DatagramSocket实现屏广 Server : //完善代码,区域缩小 2.合包 客户端 : JFrame ,Imag ...

  2. IT十八掌作业_java基础第十二天_集合

    1.描述HashMap内部实现原理. 2.描述Hashset和HashMap的区别. 3.年级的集合使用Map的嵌套实现. 10班,每个班50人. 4.编程实现文本文件的复制.合理设计程序,得到缓冲区 ...

  3. IT十八掌作业_java基础第六天_接口与适配器模式、多态、内部类

    [作业1] ------------------------------------ 使用抽象类和接口实现适配器模式设计.涉及的类和接口分别为ButtonListener(接口), 其中含有click ...

  4. IT十八掌作业_java基础第二天_进制转换原理和补码存储方式

    1:负数的表现形式,为什么如此设计? 答:负数在内存中是以补码的形式存储的,补码时在原码的基础上取反加一 得到的.负数在内存中这样设计是为了互为相反数的两个数相加能够得到0的结 果. 2:-128在内 ...

  5. IT十八掌作业_java基础第八天_多线程

    /** *1. 5辆汽车过山洞,依次经过山洞.每辆车通过山洞花费10秒,使用多线程实现. */ //山洞 class Cave { } //汽车 class Car extends Thread { ...

  6. IT十八掌作业_java基础第十六天_GUI/socket

    参照视频,编写出聊天程序. 知识点分析: Socket + GUI  + IO =  简版QQ ------------------------------ 1.GUI 2.Socket Server ...

  7. java 打印三维数组_Java基础第三天_数组

    1.定义一个函数,函数功能是动态提取int[]中元素的最大值. 2.定义一个函数,从数组中查询指定的元素首次出现的位置. 3.定义函数,完成冒泡排序,大数下沉. 4.折半查找. 5.阐述 6.定义一个 ...

  8. 学大数据找IT十八掌

    <IT十八掌大数据内功修炼到企业实战2.0课程>免费自学马拉松计划   1.关于十八掌 学了大数据,还是不敢找工作?  内功不够!跟随十八掌掌门徐培成炼内功! 十八掌教育努力打造一套地表最 ...

  9. 《IT十八掌大数据内功修炼到企业实战2.0》全套视频2

    <IT十八掌大数据内功修炼到企业实战2.0课程>免费自学马拉松计划   1.关于十八掌 学了大数据,还是不敢找工作?  内功不够!跟随十八掌掌门徐培成炼内功! 十八掌教育努力打造一套地表最 ...

最新文章

  1. 基于ESP32的竞赛裁判系统功能调试-光电条检测板
  2. 搜索进一步细化 谷歌或重回大陆
  3. SQLServer数据库的表管理
  4. 2020年终总结暨组会PPT20201229《复现chen密度径向分布结果》
  5. python 全解坦克大战 辅助类 附完整代码【雏形】
  6. 华为海思年内恐超越联发科 成亚洲最大芯片设计公司
  7. AlgorithmMan,一套免费的算法演示神器(开源动画演示版)
  8. Java同步机制之Monitor监视器与syncrhoized实现原理
  9. 服务器端添加网站,服务器添加网站
  10. 华为机试HJ68:成绩排序
  11. ask调制流程图_ASK调制及解调实验报告 - 范文中心
  12. OpenCV_信用卡识别代码_唐宇迪实战项目
  13. 服务器运维监控知识体系
  14. 桌面提醒助手谷歌浏览器插件
  15. 502 bad gateway
  16. 全国5M分辨率遥感图免费下载!还有遥感卫星视频可下载
  17. Gimp 将图片中的颜色更改
  18. 2021-03-23 sgn函数
  19. 学生成绩管理系统-C语言(附源码)
  20. MDCC王戈点爆全场:Smule乐器王是怎样炼成的

热门文章

  1. 自定义控件:旋转菜单
  2. var let const声明变量的区别
  3. 鸿蒙适配倒计时,倒计时2天!首批鸿蒙OS适配名单确定,你的手机在列吗?
  4. 数据结构和算法分析:第一章 引论
  5. 计算机小键盘顺序,为什么电脑、电话数字键盘排列顺序不同?
  6. nginx运行php如何,ThinkPHP项目在Nginx上运行的配置问题
  7. 搜狗输入法怎么切换为繁体_搜狗这次太良心了,必须强推这工具!
  8. 英语 语义分割_Padlex数据处理-语义分割-分段变换,PaddleX,segtransforms
  9. 循环链表的插入和删除
  10. 6502汇编 跳转以及返回