最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java在重載中使用Object的問題

 更新時間:2022年02月15日 10:27:44   作者:vinceLin054  
這篇文章主要介紹了Java在重載中使用Object的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在重載中使用Object

JAVA中調(diào)用重載方法都是先匹配同類型參數(shù)的方法,如沒有才會向上轉(zhuǎn)型去匹配參數(shù)。

例:

public void remove(int i) {
?? ?...
}
public void remove(Object object) {
?? ?...
}
?? ?int i = 0;
?? ?Integer it = 0;
?? ?remove(i); //調(diào)用了 remove(int i) 方法
?? ?remove(it); //調(diào)用了 remove(Object object) 方法

在開發(fā)中遇到了兩個方法

public boolean lSet(List<Object> value) {
?? ?...
}
public boolean lSet(Object) {
?? ?...
}

調(diào)用時:

?? ?List<Integer> list = new ArrayList<>();
?? ?list.add(1);
?? ?list.add(2);
?? ?lSet(list); ?//調(diào)用了lSet(Object)

調(diào)用了lSet(Object) 而不是lSet(List<Object> value)

不是說先匹配類型相同的嗎?

注意重載方法中的參數(shù)List<Object> value List指定了泛型Object,但調(diào)用時傳入的是List<Integer>此時并不算同一種類型。

解決辦法

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

Object的使用:重載equals、hashCode及實現(xiàn)compareTo

這里主要介紹Java中使用Hashtable、Arrays.sort時候如果鍵值涉及到對象、類時候的處理辦法:

1.重載equals():java中默認的對象的equals是當指向同一內(nèi)存地址時才為true;如果你現(xiàn)在需要利用對象里面的值來判斷是否相等,則重載equal方法。

2.重載hashCode():只有當類需要放在HashTable、HashMap、HashSet等等hash結(jié)構(gòu)的集合時才會重載hashCode,原因:就HashMap來說,好比HashMap就是一個大內(nèi)存塊,里面有很多小內(nèi)存塊,小內(nèi)存塊里面是一系列的對象,可以利用hashCode來查找小內(nèi)存塊hashCode%size(小內(nèi)存塊數(shù)量),所以當equal相等時,hashCode必須相等,而且如果是object對象,必須重載hashCode和equal方法。

3.實現(xiàn)接口Comparable:當需要調(diào)用sort()之類的函數(shù)要用到對象的比較的基本操作時候,就需要對Object的compareTo(Object arg0)進行實現(xiàn)。

4.binarySearch使用注意:由于Arrays.binarySearch(Object array[],Object key)中沒有給定查找數(shù)組的范圍,據(jù)我估計可能是0到length-1,因而數(shù)組最好是都能填滿對象,如果部分為空(數(shù)組開的過大)則會出錯。而且搜索前要調(diào)用sort函數(shù)排序一下。因為數(shù)組長度和對象個數(shù)相同,所以sort(Object [])也不用給定范圍而全部排序。

下面是一個簡單的例子

public class TermPOS implements Comparable{
? ? public String term;
? ? public String pos;
? ? public TermPOS(String a,String b)
? ? {
? ? ? ? term = a;
? ? ? ? pos = b;
? ? }
? ? //用于調(diào)用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、HashSet等等hash結(jié)構(gòu)的集合時才會重載hashCode
? ? public int hashCode()
? ? {
? ? ? ? return term.hashCode()*pos.hashCode();
? ? }
? ? //如果你現(xiàn)在需要利用對象里面的值來判斷是否相等,則重載equal方法
? ? public boolean equals(Object obj)
? ? {
? ? ? ? if(term.compareTo(((TermPOS)obj).term) != 0)return false;
? ? ? ? if(pos.compareTo(((TermPOS)obj).pos) != 0)return false;
? ? ? ? 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的重寫后就輸出這個
? ? ? ? else 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();
? ? }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java設計模式之裝飾模式詳解

    Java設計模式之裝飾模式詳解

    這篇文章主要介紹了Java設計模式中的裝飾者模式,裝飾者模式即Decorator Pattern,裝飾模式是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能,裝飾模式又名包裝模式。裝飾器模式以對客戶端透明的方式拓展對象的功能,是繼承關(guān)系的一種替代方案
    2022-08-08
  • Java多線程工具CompletableFuture詳解

    Java多線程工具CompletableFuture詳解

    這篇文章主要介紹了Java多線程工具CompletableFuture詳解,CompletableFuture?是?java?1.8?追加的新特性,通俗的話來說,是一個函數(shù)式的,用于控制多任務同步、異步組合操作的工具,需要的朋友可以參考下
    2024-01-01
  • 使用SQL保留兩位小數(shù)的實現(xiàn)方式

    使用SQL保留兩位小數(shù)的實現(xiàn)方式

    SQL中保留兩位小數(shù)有三種方法:1、使用ROUND()函數(shù)進行四舍五入;2、使用CONVERT()函數(shù)和3、CAST()函數(shù)進行強制類型轉(zhuǎn)換,這兩種方法會截斷多余的位數(shù),ROUND()函數(shù)會保留0位,而CONVERT()和CAST()會刪除多余的0
    2024-11-11
  • SpringMVC框架使用jackson封裝數(shù)據(jù)過程中遇到的問題及解決

    SpringMVC框架使用jackson封裝數(shù)據(jù)過程中遇到的問題及解決

    這篇文章主要介紹了SpringMVC框架使用jackson封裝數(shù)據(jù)過程中遇到的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java實現(xiàn)從數(shù)據(jù)庫導出大量數(shù)據(jù)記錄并保存到文件的方法

    Java實現(xiàn)從數(shù)據(jù)庫導出大量數(shù)據(jù)記錄并保存到文件的方法

    這篇文章主要介紹了Java實現(xiàn)從數(shù)據(jù)庫導出大量數(shù)據(jù)記錄并保存到文件的方法,涉及Java針對數(shù)據(jù)庫的讀取及文件寫入等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Java爬取網(wǎng)站源代碼和鏈接代碼實例

    Java爬取網(wǎng)站源代碼和鏈接代碼實例

    這篇文章主要介紹了Java爬取網(wǎng)站源代碼和鏈接代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • uploadify上傳及后臺文件合法性驗證的代碼解析

    uploadify上傳及后臺文件合法性驗證的代碼解析

    這篇文章主要介紹了uploadify上傳及后臺文件合法性驗證的代碼解析,整段代碼分為后臺上傳方法,文件合法性驗證類,前端上傳js,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • Spring使用xml方式整合第三方框架流程詳解

    Spring使用xml方式整合第三方框架流程詳解

    這篇文章主要介紹了Spring使用xml方式整合第三方框架流程,Spring會在應用上下文中為某個bean尋找其依賴的bean,Spring中bean有三種裝配機制,分別是:在xml中顯式配置、在java中顯式配置、隱式的bean發(fā)現(xiàn)機制和自動裝配
    2023-02-02
  • 淺談java IO流——四大抽象類

    淺談java IO流——四大抽象類

    這篇文章主要介紹了java IO流——四大抽象類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • ES結(jié)合java代碼聚合查詢詳細示例

    ES結(jié)合java代碼聚合查詢詳細示例

    es查詢有一個很常用的一種叫聚合查詢,相當于mysql中的分組group by 后拿各組數(shù)量進行統(tǒng)計,實現(xiàn)起來也是很簡單,下面這篇文章主要給大家介紹了關(guān)于ES結(jié)合java代碼聚合查詢的相關(guān)資料,需要的朋友可以參考下
    2023-05-05

最新評論

岫岩| 稷山县| 新绛县| 锡林浩特市| 仁布县| 株洲市| 武安市| 仙桃市| 剑河县| 榆树市| 台安县| 岱山县| 临澧县| 奎屯市| 新巴尔虎左旗| 青河县| 益阳市| 罗源县| 蒲江县| 金沙县| 舒城县| 遂宁市| 汨罗市| 瑞金市| 福泉市| 铜山县| 临夏县| 迭部县| 南岸区| 丰顺县| 沙洋县| 子洲县| 谢通门县| 宁夏| 上饶市| 南川市| 罗江县| 习水县| 西丰县| 绿春县| 文登市|