版权声明:071623 https://blog.csdn.net/weixin_43584220/article/details/88804066
package cn.BST.Ravanla;
/**
*
* @author Ravanla
* 我们只要看哈希表(HashTable)里的各种方法就可以知道哈希表需要什么样的类,类里又需要有什么方法
*
* 1.我们需要学生信息类
* 1.在这个类里需要两个属性field,年龄和信息
* 2.还有构造方法(给这两个属性赋值的方法)
public class TestHashTable {
public static void main(String[] args) {
StuInfo h1 = new StuInfo("20001", 14);
StuInfo h2 = new StuInfo("20002", 15);
StuInfo h3 = new StuInfo("20003", 16);
StuInfo h4 = new StuInfo("20004", 17);
StuInfo h5 = new StuInfo("20005", 18);
2.还需要哈希表类(HashTable)
*
* 1.需要put方法
* 2.从方法中可以看出这个方法是用转载StuInfo对象的数组,
* 这个数组的长度可以是用Arrays包里的可变长度数组class,也可以自己手动输入数组长度(我就是手动输入的)
HashTable ht = new HashTable();
ht.put(h1);
ht.put(h2);
ht.put(h3);
ht.put(h4);
ht.put(h5);
3.在System.out.println中可以看出这个类里还有get方法
*
* 形参类型也可以看出,多次调用一个方法里的不同对象可以看出类里有转载对象的容器(数组)
* 但是问题在于这个console的结果,结果表明HashTable类中的数组不是按下标顺序存储的
* 而是按照学生信息的年龄存储到相应下标的
* 所以这个get方法取出与这个对象的年龄相应的下标里的值,这个值还很特殊
* (但从这看不出,要去HashTable类里看)
* 放回类型是StuInfo对象,所以StuInfo中需要toString方法,使打印这个对象时不是打印它的地址值
* ,而是打印对象里的属性值
* get方法该完了我们的put方法也需要该,因为按照年龄取就要按照年龄存,这个思想就是哈希的浅内容,
* 精华在于你是想怎么存完全取决于你,使你数组的存储空间高效利用
System.out.println(ht.get(h4));
System.out.println(ht.get(h1));
System.out.println(ht.get(h3));
System.out.println(ht.getData(4));
System.out.println(ht.getData(1));
System.out.println(ht.getData(3));
System.out.println(ht.getData(17));
System.out.println(ht.getData(14));
System.out.println(ht.getData(16));
}
}
结果
StuInfo [age=17, count=20004]
StuInfo [age=14, count=20001]
StuInfo [age=16, count=20003]
null
null
null
StuInfo [age=17, count=20004]
StuInfo [age=14, count=20001]
StuInfo [age=16, count=20003]
哈希表(HashTable)类
package cn.BST.Ravanla;
public class HashTable {
private StuInfo[] data = new StuInfo[100];
public void put(StuInfo stuInfo) {
int index = stuInfo.hashCode(stuInfo);
data[index] = stuInfo;
}
public StuInfo getData(int index) {
return data[index];
}
public void setData(StuInfo[] data) {
this.data = data;
}
public StuInfo get(StuInfo stuInfo) {
return data[stuInfo.hashCode(stuInfo)];
}
// public StuInfo get(StuInfo stuInfo) {
// return stuInfo;
// }
}
学生信息(StuInfo)类
package cn.BST.Ravanla;
/**
*
* @author Ravanla
* 学生信息
*
*/
public class StuInfo {
private int age;
private String count;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
@Override
public String toString() {
return "StuInfo [age=" + age + ", count=" + count + "]";
}
//哈希表
public int hashCode(StuInfo stuinfo) {
return stuinfo.age;
}
public StuInfo(String count, int age) {
super();
this.age = age;
this.count = count;
}
}
最后,这些构造方法,年龄学号等属性的封装,还有toString方法都可以通过右键->source->Generate …
快捷创造(Alt + Shift + s)