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

1.定义罪犯Criminal类,height(身高)/weight(体重)/blood(血型)/home(籍贯)属性。

重写hashcode和equals,使用四个属性的组合进行实现。

创建HashSet集合,里面存放20个Criminal对象,其中O型血2人,A型血3人,B型血4人,AB型血1人,其余血型不详。

注意:hashcode()方法实现时,要求身高、体重、和血型三个属性合成一个数字,实现两两比较的高效算法。

package com.it18zhang.hash.demo;

import java.util.HashSet;

import java.util.Set;

public class Criminal {

private int height;

private int weight;

private int blood;

private String home;

public Criminal(int height, int weight, int blood) {

if (height <= 0) {

System.out.println("身高不能为负数 ");

System.exit(-1);

} else if (weight <= 0) {

System.out.println("体重不能为负数 ");

System.exit(-1);

} else if (blood > 4 || blood < 1) {

System.out.println("血型,必须为1-4之间的值 ");

System.exit(-1);

} else {

this.height = height;

this.weight = weight;

this.blood = blood;

}

}

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() {

int i0 = 0 << 24;

int i1 = (ArrayTools.int2Bytes(height)[0]) & 0xff << 16;

int i2 = (ArrayTools.int2Bytes(weight)[0]) & 0xff << 8;

int i3 = (ArrayTools.int2Bytes(blood)[0]) & 0xff << 0;

int newResult = i0 | i1 | i2 | i3;

return home == null?newResult:newResult +home.hashCode();

}

public boolean equals(Object obj) {

//判断是否为空 ,是否有 同样的地址

if (obj == null || obj == this) {

return false;

}

//判断是否同一 类型

if (obj.getClass() == this.getClass()){

//1.是同一类型,判断身高,体重,血型

Criminal c = (Criminal)obj;

if(c.height == this.height&&c.weight == this.weight&&c.blood == this.blood){

return true;

}

}

return false;

}

}

public class HashTest {

public static void main(String[] args) {

Set<Criminal> cSet = new HashSet<Criminal>();

Criminal c1 = new Criminal(180, 170, 1);

Criminal c2 = new Criminal(170, 180, 1);

Criminal c3 = new Criminal(160, 180, 3);

Criminal c4 = new Criminal(150, 180, 4);

Criminal c5 = new Criminal(150, 180, 4);

cSet.add(c1);

cSet.add(c2);

cSet.add(c3);

cSet.add(c4);

System.out.println(c1.equals(c2));

System.out.println(c5.equals(c4));

for (Criminal c : cSet) {

out(c);

}

}

public static void out(Criminal c) {

String blood = "";

switch (c.getBlood()) {

case 1:

blood = "A";

break;

case 2:

blood = "B";

break;

case 3:

blood = "AB";

break;

case 4:

blood = "O";

break;

}

System.out.println("身高:" + c.getHeight() + "\t 体重: " + c.getWeight() + "\t" + "血型:" + blood);

}

}

public class ArrayTools {

/**

*

*整数转换为字节数组 ;向右移位,然后强转截断。

*/

public static byte[] int2Bytes(int i)

{

byte[] bytes = new byte[4];

bytes[0] = (byte)i; //低位

bytes[1] = (byte)(i >> 8); //次低位

bytes[2] = (byte)(i >> 16); //次高位

bytes[3] = (byte)(i >> 24); //高位

return bytes;

}

/**

*

* 字节数组 转 为整数 ,向左移位,由于向左移位,先转换为整数 ,缺的用符号位补齐,故用&0xFF去除

*/

public static int bytes2Int(byte[] bytes)

{

int i0 = bytes[3] << 24;

int i1 = (bytes[2]&0xFF) << 16;

int i2 = (bytes[1]&0xFF) << 8;

int i3 = (bytes[0]&0xFF) << 0;

return i0 | i1 | i2 | i3;

}

}

2.Map:

-----------

key(键) - value(值) :kv对.

创建HashMap,Person为key,Dog为value。

存放100元素,遍历map集合,两种方式。EntrySet + KeySet.

删除操作。remove();

package com.it18zhang.hash.demo;

import java.util.HashMap;

import java.util.Map;

import java.util.Map.Entry;

public class HashApp {

public static void main(String[] args) {

Map<Person,Dog> map = new HashMap<Person,Dog>();

for (int i = 1; i <100; i++) {

map.put(new Person("Tom" + i,i), new Dog("hei" + i,i));

}

System.out.println("-----------keySet-------------");

for (Person p:map.keySet()) {

System.out.println(map.get(p).getName());

}

System.out.println("-----------EntrySet-------------");

for (Entry<Person, Dog> entry : map.entrySet()){

System.out.println(entry.getKey().getName() +""+ entry.getValue().getName());

}

}

}

public class Person {

private String name;

private int age;

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 (this == obj){return true;}

//精准判断

boolean nameEqu;

if(obj.getClass() == this.getClass()){

Person p = (Person)obj;

//name

if (this.name == null)

{

if(p.name == null){

nameEqu = true;

}else {

nameEqu = false;

}

}else{

nameEqu = this.name.equals(p.name);

}

//age

boolean ageEqu = (this.age == p.age);

//sex

return nameEqu&&ageEqu;

}

return false;

}

}

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;

}

}

时间: 2024-12-14 18:48:02

IT十八掌作业_java基础第十一天_集合.txt的相关文章

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

1.定义罪犯Criminal类,height(身高)/weight(体重)/blood(血型)/home(籍贯)属性. 重写hashcode和equals,使用四个属性的组合进行实现. 创建HashSet集合,里面存放20个Criminal对象,其中O型血2人,A型血3人,B型血4人,AB型血1人,其余血型不详. 注意:hashcode()方法实现时,要求身高.体重.和血型三个属性合成一个数字,实现两两比较的高效算法. 2.Map: -------------------------------

IT十八掌作业_java基础第23天_数据库连接池\反射

感谢大家对IT十八掌大数据的支持,今天的作业如下: 1.属性赋值 ------------- 1.Man{50+ } Man man = new Man(); man.setXxx1(...); man.setXxx2(...); ... 50 Man copy = new Man(); copy = man ; copy.setXxx1(man.getXxx1()); copy.setXxx1(man.getXxx1()); copy.setXxx1(man.getXxx1()); copy.

IT十八掌作业_java基础第三天_数组

/* 1.定义一个函数,函数功能是动态提取int[]中元素的最大值. 2.定义一个函数,从数组中查询指定的元素首次出现的位置. 3.定义函数,完成冒泡排序,大数下沉. 4.折半查找. 5.阐述 6.定义一个函数,实现矩阵的转置.arr[i][j] == arr[j][i];//前提条件是正方的. 7.遍历三维组数,横向输出三维数组的每一个层. 8.定义一个类:Dog 有名称 color age cry(); 9.阐述出来堆区,栈区,何时出现溢出,如何解决. 10.oop ------------

IT十八掌作业_java基础第七天_匿名内部类、异常、包和jar

利用白富美接口案例,土豪征婚使用匿名内部类对象实现. 2.定义三角形类Trianle,里面包含三个int类型属性,分别表示三条边的长度, 构造三角形对象时,任意两边之和是否大于第三边,如若不成立,抛出自定义异常. 3.Person类中增加birthday属性,对setBirthday(int ,int , int )方法进行异常处理, 要求年有效.月有效.日有效.年月日指定的具体日期有效,对不同情况分别抛出不同的异常. 4.将类定义到指定的包下.com.it18zhang,编译之后,打成jar文

IT十八掌作业_java基础第五天_静态代码块、类的继承和接口

1.文字阐述静态代码块的作用. A:静态代码块常用来执行类属性的初始化,且只被执行一次. 2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么? 执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 和位置无关. 构造代码块在每次创建对象是都会执行. 3.类加载时,是否一定会执行静态代码块?如何手动控制类加载? 类加载时默认加载静态代码块,class.forName(String name) 或 class.forNa

IT十八掌作业_java基础第四天_复习运算符、进制转化和数组

1.将按位运算操作,尤其是左移和右移(有无符号)整理到自己的博客中. 重点说明清晰负数的运算过程. 2.byte数到十六进制字符串表现形式程序设计原理和实现方式整理到博客中. 3.定义函数,计算一位整型数组所有元素的和. 4.数组的拷贝. 5.堆内存默认是1/4, ---------------------------------------- java -Xmx//设置堆内存最大值 -Xms//设置堆内存初始值 className//类名 ---------------------- 1,答:

IT十八掌作业_java基础第26天_Java基础总结/虚拟机基础

感谢大家对IT十八掌大数据的支持,今天的作业如下: 巩固java基础知识,安装虚拟机! --------------------------------------------------------------------------------------------------------答案略,自行练习

IT十八掌作业_java基础第八天_多线程

感觉大家对IT十八掌大数据的支持,今天的作业如下 1. 5辆汽车过山洞,依次经过山洞.每辆车通过山洞花费10秒,使用多线程实现. 2. 用多线程模拟蜜蜂和熊的关系. 蜜蜂是生产者,熊是消费者.蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程. 生产者和消费者之间使用通知方式告知对方.注意不能出现死锁的现象.

IT十八掌作业_java基础第25天_NIO

感谢大家对IT十八掌大数据的支持,今天的作业如下: 1.将NIO中的Socket通信过程使用图形进行描述和说明. 2.画图说明Runtime data area的内部结构. 3.阐述class的类加载过程. 4.反射和内省的异同,以及各自的优缺点. 5.阐述jvm中从堆和非堆的角度阐述jvm的内存结构.