java中调用重载方法都是先匹配同类型参数的方法,如没有才会向上转型去匹配参数。
例:
public void remove(int i) { ...}public void remove(object object) { ...}
儿童教育方法 int i = 0; integer it = 0; remove(i); //调用了 remove(int i) 方法 remove(it); //调用了 remove(object object) 方法
public boolean lt(list<object> value) { ...}public boolean lt(object) { ...}
调用时:
list<integer> list = new arraylist<>(); list.add(1); list.add(2); lt(list); //震荡波专杀调用了lt(object)
调用了lt(object) 而不是lt(list<object> value)
注意重载方法中的参数list<object> value list指定了泛型object,但调用时传入的是list<integer>此时并不算同一种类型。
//使用?通配符 或 直接不指定泛型public boolean lt(list<?> value) { ...}
这里主要介绍java中使用hashtable、arrays.sort时候如果键值涉及到对象、类时候的处理办法:
1.重载equals():java中默认的对象的equals是当指向同一内存地址时才为true;如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。
2.重载hashcode():只有当类需要放在hashtable、hashmap、hasht等等hash结构的集合时才会重载hashcode,原因:就hashmap来说,好比hashmap就是一个大内存块,里面有很多小内存块,小内存块里面是一系列的对象,可以利用hashcode来查找小内存块hashcode%size(小内存块数量),所以当equal相等时,hashcode必须相等,而且如果是object对象,必须重载hashcode和equal方法。
3.实现接口comparable:当需要调用sort()之类的函数要用到对象的比较的基本操作时候,就需要对object的compareto(object arg0)勤俭节约的故事进行实现。
4.binaryarch使用注意:由于arrays.binaryarch(object array[],object key)中没有给定查找数组的范围,据我估计可能是0到length-1,因而数组最好是都能填满对象,如果部分为空(数组开的过大)则会出错。而且搜索前要调用sort函数排序一下。因为数组长度和对象个数相同,所以sort(object [])也不用给定范围而全部排序。
public class termpos implements comparable{ publi豆瓣排行c string term; public string pos; public termpos(string a,string b) { term = a; pos = b; } //用于调用arrays.sort(object[])时的自定义大小,此时类后加上implements comparable public int compareto(object arg0) { // todo 自动生成方法存根 if(this.term.compareto(((termpos)arg0).term) != 0) return this.term.compareto(((termpos)arg0).term); return this.pos.compareto(((termpos)arg0).pos); } //当类需要放在hashtable、hashmap、hasht等等hash结构的集合时才会重载hashcode public int hashcode() { return term.hashcode()*pos.hashcode(); } //如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法 public boolean equals(object obj) { if(term.compareto(((termpos)objobey).term) != 0)return fal; if(pos.compareto(((termpos)obj).pos) != 0)return fal; return true; } public static void testhashtable() { hashtable<termpos,integer> t = new hashtable<termpos,integer>(); termpos x = new termpos("a","b"); t.put(new termpos("a","b"), 2); if(t.get(x) == null)system.out.println("wrong!"); //当去掉hashcode的重写后就输出这个 el system.out.println(t.get(x)); system.out.println(x.equals(new termpos("a","b"))); } public static void testsort() { termpos tp[] = new termpos[3]; tp[0] = new termpos("b","c"); tp[1] = new termpos("a","c"); tp[2] = new termpos("a","b"); arrays.sort(tp,0,3); for(int i = 0;i < 3;i ++) system.out.println(tp[i].term+"\t"+tp[i].pos); } /** * @param args * @throws ioexception */ public static void main(string[] args) throws ioexception { // todo 自动生成方法存根 testhashtable(); testsort(); }}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-05 00:55:43,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/7a6e6093e5ea157cf918eb010a51e41e.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java在重载中使用Object的问题.doc
本文 PDF 下载地址:Java在重载中使用Object的问题.pdf
留言与评论(共有 0 条评论) |