亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java在重載中如何使用Object

發布時間:2022-02-15 13:38:28 來源:億速云 閱讀:152 作者:小新 欄目:開發技術

小編給大家分享一下Java在重載中如何使用Object,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在重載中使用Object

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 lSet(List<Object> value) {
    ...
}
public boolean lSet(Object) {
    ...
}

調用時:

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

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

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

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

解決辦法

//使用?通配符 或 直接不指定泛型
public boolean lSet(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 [])也不用給定范圍而全部排序。

下面是一個簡單的例子

public class TermPOS implements Comparable{
    public 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、HashSet等等hash結構的集合時才會重載hashCode
    public int hashCode()
    {
        return term.hashCode()*pos.hashCode();
    }
    //如果你現在需要利用對象里面的值來判斷是否相等,則重載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();
    }
}

以上是“Java在重載中如何使用Object”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新昌县| 南江县| 江永县| 澎湖县| 灯塔市| 凤山市| 德兴市| 卢龙县| 忻城县| 满城县| 玉林市| 特克斯县| 梓潼县| 股票| 桦甸市| 新邵县| 玉龙| 延边| 霍林郭勒市| 桐梓县| 增城市| 大方县| 台山市| 南阳市| 余干县| 泉州市| 武安市| 新龙县| 莱阳市| 阿鲁科尔沁旗| 柘城县| 阳泉市| 大足县| 博湖县| 江川县| 三门峡市| 南皮县| 泸州市| 贡觉县| 正定县| 蒙阴县|