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