java获取文件hashcode|Java语言中Object对象的hashCode取值的底层算法是怎样实现的

A. java程序读一个文本文件并用hashmap进行存储,并对其中的信息按照姓名排序

给你发一个完整的吧,反正我电脑上有,/** * 存储关联的键值对 * @param key:键 * @param value:值 * @return */ public V put(K key, V value) { //当键值为null时,调用putForNullKey(value)的方法存储, //在该方法中调用recordAccess(HashMap<K,V> m)的方法处理 if (key == null) return putForNullKey(value); //根据key的KeyCode,计算hashCode int hash = hash(key.hashCode()); //调用indexFor方法,返回hash在对应table中的索引(Entry[] table) int i = indexFor(hash, table.length); //当i索引处的Entry不为null时,遍历下一个元素 for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; //如果遍历到的hash值等于根据Key值计算出的hash值并且 //key值与需要放入的key值相等时,存放与key对应的value值 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { //覆盖oldValue的值 V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; //当i索引处的Entry为null时,将指定的key、value、hash条目放入到指定的桶i中 //如果现有HashMap的大小大于容量*负载因子时,resize(2 * table.length); addEntry(hash, key, value, i); return null; } /实例化HashMap对象 HashMap<String,String> hashMap=new HashMap<String,String>(); //1、将Map接口变为Set接口 Set<Map.Entry<String,String>> set=hashMap.entrySet(); //2、实例化Iterator接口 Iterator it=set.iterator(); while(it.hasNext()){ //3、得到存储在HashMap中的Entry对象 Map.Entry<String,String> me=(Entry<String, String>) it.next(); //4、通过Entry得到key和value System.out.println("Key="+me.getKey()+"Value="+me.getValue()); } HashMap<Student,String> map=new HashMap<Student,String>(); map.put(new Student("1608100201","Jony"), "CSU"); System.out.println(map.get(stu)); //实例化一个学生对象 Student stu=new Student("1608100201","Jony"); HashMap<Student,String> map=new HashMap<Student,String>(); map.put(stu, "CSU"); System.out.println(map.get(stu)); public class Student { //学生的学号属性 public static String ID; //学生的姓名属性 private String name; /* * 重载构造方法 */ public Student(String ID,String name){ this.ID=ID; this.name=name; } /** * 覆写equals()方法 */ public boolean equals(Object obj) { //判断地址是否相等 if(this==obj){ return true; } //传递进来用于比较的对象不是本类的对象 if (!(obj instanceof Student)) return false; //向下转型 Student stu = (Student)obj; //比较属性内容是否相等 if (this.ID.equals(stu.ID)&&this.name.equals(stu.name)) { return true; } return false; } /** * 覆写hashCode()方法 */ public int hashCode() { return this.ID.hashCode(); } } 祝你好运了!~

B. java的jvm在执行java程序的时候,会给新建的对象分配一个唯一的标识,请问这个唯一标识怎么获取阿

可以使用对象的toString()方法,回返回一个字符串,字符串后半部分的哈希码就是唯一的。toStringpublic String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。 Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + '@' + Integer.toHexString(hashCode()) 返回:该对象的字符串表示形式。

C. 请教java中的hashCode()方法 具体是什么意思作用一般用在什么地方

返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。 hashCode 的常规协定是: 在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。 如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。 如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。 实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)

D. Java语言中Object对象的hashCode取值的底层算法是怎样实现的

在JDK中看到

public native int hashCode();

这是一个本地方法,需要找源代码才能找到

然后我在Android SDK中的JDK Object类找到了这个,应该是你想要的了

publicinthashCode(){intlockWord=shadow$_monitor_;finalintlockWordStateMask=0xC0000000;//Top2bits.finalintlockWordStateHash=0x80000000;//Top2bitsarevalue2(kStateHash).finalintlockWordHashMask=0x0FFFFFFF;//Low28bits.if((lockWord&lockWordStateMask)==lockWordStateHash){returnlockWord&lockWordHashMask;}returnSystem.identityHashCode(this);}

但最后的System.identityHashCode(this)方法还是一个本地方法,还得去找源码,你折腾的话自己去搜索吧。

下面是String类的hashCode()方法,可以看下

publicinthashCode(){inth=hash;if(h==0&&value.length>0){charval[]=value;for(inti=0;i<value.length;i++){h=31*h+val[i];}hash=h;}returnh;}


赞 (0)