标签:criminal equals java基础 血型 元素
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;
    }
     
     
     
}
本文出自 “菜鸟成就数据之路” 博客,转载请与作者联系!
标签:criminal equals java基础 血型 元素
原文地址:http://liubx.blog.51cto.com/11235064/1784026