码迷,mamicode.com
首页 > 编程语言 > 详细

IT十八掌作业_java基础第十一天_集合

时间:2016-05-28 14:28:48      阅读:242      评论:0      收藏:0      [点我收藏+]

标签: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;

    }

 

     

     

     

}


本文出自 “菜鸟成就数据之路” 博客,转载请与作者联系!

IT十八掌作业_java基础第十一天_集合

标签:criminal   equals   java基础   血型   元素   

原文地址:http://liubx.blog.51cto.com/11235064/1784026

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!