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