IT十八掌作業_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;

    }

 

     

     

     

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章