Java在重载中如何使用Object

Java在重载中如何使用Object

小编给大家分享一下Java在重载中如何使用Object,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

在重载中使用Object

JAVA中调用重载方法都是先匹配同类型参数的方法,如没有才会向上转型去匹配参数。

Java在重载中如何使用Object

例:

publicvoidremove(inti){...}publicvoidremove(Objectobject){...}

inti=0;Integerit=0;remove(i);//调用了remove(inti)方法remove(it);//调用了remove(Objectobject)方法

在开发中遇到了两个方法

publicbooleanlSet(List<Object>value){...}publicbooleanlSet(Object){...}

调用时:

List<Integer>list=newArrayList<>();list.add(1);list.add(2);lSet(list);//调用了lSet(Object)

调用了lSet(Object) 而不是lSet(List<Object> value)

不是说先匹配类型相同的吗?

注意重载方法中的参数List<Object> value List指定了泛型Object,但调用时传入的是List<Integer>此时并不算同一种类型。

解决办法

//使用?通配符或直接不指定泛型publicbooleanlSet(List<?>value){...}

Object的使用:重载equals、hashCode及实现compareTo

这里主要介绍Java中使用Hashtable、Arrays.sort时候如果键值涉及到对象、类时候的处理办法:

1.重载equals():java中默认的对象的equals是当指向同一内存地址时才为true;如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。

2.重载hashCode():只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode,原因:就HashMap来说,好比HashMap就是一个大内存块,里面有很多小内存块,小内存块里面是一系列的对象,可以利用hashCode来查找小内存块hashCode%size(小内存块数量),所以当equal相等时,hashCode必须相等,而且如果是object对象,必须重载hashCode和equal方法。

3.实现接口Comparable:当需要调用sort()之类的函数要用到对象的比较的基本操作时候,就需要对Object的compareTo(Object arg0)进行实现。

4.binarySearch使用注意:由于Arrays.binarySearch(Object array[],Object key)中没有给定查找数组的范围,据我估计可能是0到length-1,因而数组最好是都能填满对象,如果部分为空(数组开的过大)则会出错。而且搜索前要调用sort函数排序一下。因为数组长度和对象个数相同,所以sort(Object [])也不用给定范围而全部排序。

下面是一个简单的例子

publicclassTermPOSimplementsComparable{publicStringterm;publicStringpos;publicTermPOS(Stringa,Stringb){term=a;pos=b;}//用于调用Arrays.sort(Object[])时的自定义大小,此时类后加上implementsComparablepublicintcompareTo(Objectarg0){//TODO自动生成方法存根if(this.term.compareTo(((TermPOS)arg0).term)!=0)returnthis.term.compareTo(((TermPOS)arg0).term);returnthis.pos.compareTo(((TermPOS)arg0).pos);}//当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCodepublicinthashCode(){returnterm.hashCode()*pos.hashCode();}//如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法publicbooleanequals(Objectobj){if(term.compareTo(((TermPOS)obj).term)!=0)returnfalse;if(pos.compareTo(((TermPOS)obj).pos)!=0)returnfalse;returntrue;}publicstaticvoidtestHashtable(){Hashtable<TermPOS,Integer>t=newHashtable<TermPOS,Integer>();TermPOSx=newTermPOS("a","b");t.put(newTermPOS("a","b"),2);if(t.get(x)==null)System.out.println("wrong!");//当去掉hashCode的重写后就输出这个elseSystem.out.println(t.get(x));System.out.println(x.equals(newTermPOS("a","b")));}publicstaticvoidtestSort(){TermPOStp[]=newTermPOS[3];tp[0]=newTermPOS("b","c");tp[1]=newTermPOS("a","c");tp[2]=newTermPOS("a","b");Arrays.sort(tp,0,3);for(inti=0;i<3;i++)System.out.println(tp[i].term+"\t"+tp[i].pos);}/***@paramargs*@throwsIOException*/publicstaticvoidmain(String[]args)throwsIOException{//TODO自动生成方法存根testHashtable();testSort();}}

以上是“Java在重载中如何使用Object”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2022-02-15 20:42:03
收藏
分享
海报
0 条评论
27
上一篇:ASP.NET Core Zero模块系统的示例分析 下一篇:vue中Axios如何添加拦截器刷新token
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码