中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Java判斷對象值是否相等

發布時間:2020-05-25 15:37:55 來源:億速云 閱讀:252 作者:鴿子 欄目:編程語言

1. 關于對象值相等的比較
1.1      == vs equals
p == q 表示的是 p 和 q 兩個引用指向同一個對象
p.equals(q) 表示 p 指向的對象 和 q 指向的對象是否是值語義相等的
1.2 示例
覆寫 equals 前
public class Card { public int rank; // 數值 public String suit; // 花色 public Card(int rank, String suit) { this.rank = rank; this.suit = suit; } }Card p = new Card(1, "?"); Card q = new Card(1, "?"); Card o = p; p == o; // true p == q; // false p.equals(o); // true 因為如果不覆寫 equals,默認的 equals 邏輯就是引用比較 p.equals(q); // false 因為如果不覆寫 equals,默認的 equals 邏輯就是引用比較

覆寫 equals 后
public class Card { public int rank; // 數值 public String suit; // 花色 public Card(int rank, String suit) { this.rank = rank; this.suit = suit; } }Card p = new Card(1, "?"); Card q = new Card(1, "?"); Card o = p; p == o; // true p == q; // false p.equals(o); // true 因為如果不覆寫 equals,默認的 equals 邏輯就是引用比較 p.equals(q); // false 因為如果不覆寫 equals,默認的 equals 邏輯就是引用比較

注意: 一般覆寫 equals 的套路就是上面演示的

  1. 如果指向同一個對象,返回 true
  2. 如果傳入的為 null,返回 false
  3. 如果傳入的對象類型不是 Card,返回 false
  4. 按照類的實現目標完成比較,例如這里只要花色和數值一樣,就認為是相同的牌
  5. 注意下調用其他引用類型的比較也需要 equals,例如這里的 suit 的比較
    2. 關于對象值大于、等于、小于的比較-基于自然順序
    認識Comparable<E>
    ````public interface Comparable<E>
    { // 返回值: 
    // < 0: 表示 this 指向的對象小于 o 指向的對象
    // == 0: 表示 this 指向的對象等于 o 指向的對象
    // > 0: 表示 this 指向的對象等于 o 指向的對象 
    int compareTo(E o); 
    }`

    示例:
    **```
    ```

    `public class Card implements Comparable<Card> 
    { public int rank; // 數值
    public String suit; // 花色 
    public Card(int rank, String suit) 
    { 
    this.rank = rank; this.suit = suit;
    }
    // 根據數值比較,不管花色
    // 這里我們認為 null 是最小的 
    @Override public int compareTo(Card o) 
    {
    if (o == null) 
    { return 1;
    }
    return rank - o.rank;
    }
    }`
    **```
``Card p = new Card(1, "?"); 
Card q = new Card(2, "?"); 
Card o = new Card(1, "?");
p.compareTo(o); // == 0,表示牌相等
p.compareTo(q); // < 0,表示 p 比較小
q.compareTo(p); // > 0,表示 q 比較大
3. 關于對象值大于、等于、小于的比較-基于比較器**
3.1 認識 Comparator<T>
public interface Comparator<T> 
{ // 返回值:
// < 0: 表示 o1 指向的對象小于 o2 指向的對象
// == 0: 表示 o1 指向的對象等于 o2 指向的對象
// > 0: 表示 o1 指向的對象等于 o2 指向的對象
int compare(T o1, T o2);
}
3.2 示例
public class Card implements Comparable<Card> 
{ 
public int rank; // 數值 
public String suit; // 花色
public Card(int rank, String suit) 
{
this.rank = rank; this.suit = suit;
}
// 根據數值比較,不管花色
// 這里我們認為 null 是最小的
@Override public int compareTo(Card o)
{
if (o == null) 
{ return 1;
}
return rank - o.rank;
} 
}
Card p = new Card(1, "?");
Card q = new Card(2, "?"); 
Card o = new Card(1, "?"); 
p.compareTo(o); // == 0,表示牌相等 
p.compareTo(q); // < 0,表示 p 比較小
q.compareTo(p); // > 0,表示 q 比較大
4. 比較
覆寫的方法 及說明
Object.equals  
//因為所有類都是繼承自 Object 的,所以直接覆寫即可,不過只能比較相等與否
Comparable.compareTo
//需要手動實現接口,侵入性比較強,但一旦實現,每次用該類都有順序,屬于
內部順序
Comparator.compare
//需要實現一個比較器對象,對待比較類的侵入性弱,但對算法代碼實現侵入性強
** 5和 java 集合框架的配合**
1. 使用 contains 類似的方法,內部基本在調用元素的 equals 方法,所以要求元素覆寫過 equals 方法
2. 使用 HashMap,key 的比較內部會調用 equals 方法,所以要求元素覆寫過 equals 方法
3. 使用排序相關方法,內部需要進行比較,所以或者選擇實現 Comparable 或者傳入一個 Comparator
4. 使用 TreeMap,key 需要進行大小比較,所以或者選擇實現 Comparable 或者傳入一個 Comparator
5. 其他規則以此類推

向AI問一下細節

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

AI

龙川县| 湾仔区| 宁晋县| 南乐县| 宜宾县| 治县。| 金寨县| 行唐县| 同心县| 宁波市| 区。| 龙岩市| 成安县| 鄄城县| 望谟县| 华安县| 枝江市| 迭部县| 游戏| 普兰店市| 禹城市| 深圳市| 德保县| 宝兴县| 府谷县| 从江县| 宜州市| 宁津县| 三江| 邛崃市| 临高县| 铁力市| 游戏| 九寨沟县| 南陵县| 陕西省| 开封县| 鲁甸县| 阿拉善右旗| 赞皇县| 桂东县|