日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文介紹了Java:要在充滿定制對(duì)象的ArrayList中使用包含,我應(yīng)該重寫等于還是實(shí)現(xiàn)可比較/比較器?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我有一個(gè)包含以下內(nèi)容的ArrayList:

class TransitionState {

    Position positionA;
    Position positionB;

    int counter;

    public boolean equals (Object o){

        if (o instanceof TransitionState){

          TransitionState transitionState= (TransitionState)o;

          if ((this.positionA.equals(transitionState.positionA))
                  &&(this.positionB.equals(transitionState.positionB)))
          {
              return true;
          }
        }
     return false;

    }

    @Override
    public String toString() {

        String output = "Position A " + positionA.i+ " "+ positionA.j + " "+ positionA.orientation + " "+
                "Position B " + positionB.i + " "+ positionB.j + " "+ positionB.orientation;

        return output;
    }

}

class Position {

    int i;
    int j;
    char orientation;

    Position() {

    }


    void setIJ(int i, int j){
        this.i=i;
        this.j=j;
    }

    void setOrientation(char c){

        orientation = c;
    }

   public boolean equals(Object o){

        if(o instanceof Position){

          Position p = (Position)o;
          if((p.i==this.i)&&(p.j==this.j)&&(p.orientation==this.orientation))
          {
              return true;
          }
              else return false;

        }

            return false;
   }

} //end class Position

我用以下命令查詢:

 if(!transitionStatesArray.contains(newTransitionState)){  //if the transition state is new add and enqueue new robot positions

                 transitionStatesArray.add(newTransitionState); //marks as visited

我在transitionStatesArray中發(fā)現(xiàn)重復(fù)元素,為什么會(huì)出現(xiàn)這種情況?

我使用這些i、j和方向值來填充矩陣中的唯一值,但這里有一個(gè)重復(fù)的值:

 S  .  N 
 *  *  * 
 .  D  D 


 E  .  O 
 *  *  * 
 .  D  D 


 N  .  S 
 *  *  * 
 .  D  D 


 S  .  N 
 *  *  * 
 .  D  D 

推薦答案

List.contains(...)方法被定義為使用equals(Object)來確定參數(shù)對(duì)象是否包含在列表中。因此,您需要覆蓋equals…假定默認(rèn)實(shí)現(xiàn)不是您需要的。

但是,您需要注意List.contains(...)可能會(huì)針對(duì)列表中的每個(gè)元素測試參數(shù)。對(duì)于一份長長的清單來說,這是昂貴的。根據(jù)應(yīng)用程序的詳細(xì)信息,使用不同的集合類型(例如,HashSetTreeSetLinkedHashSet)可能比使用List更好。如果您使用其中之一,您的類將需要重寫hashCode或?qū)崿F(xiàn)Comparable,否則您將需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的Comparator…取決于您選擇的內(nèi)容。


(關(guān)于替代方案的更多建議…因?yàn)椴僮鲉T感興趣)

containsListArrayListLinkedList上的性能是O(N)contains調(diào)用的最差開銷與列表長度成正比。

對(duì)于TreeSetcontains的最差性能與log2(N)成正比。

對(duì)于HashSetLinkedHashSetcontains的平均性能是一個(gè)常量,與集合的大小無關(guān),但最差的性能是O(N)。(最糟糕的性能發(fā)生在以下情況:1)實(shí)現(xiàn)一個(gè)較差的hashcode()函數(shù),該函數(shù)將所有內(nèi)容散列為少量的值,或者2)調(diào)整”加載因子”參數(shù),以便哈希表不會(huì)隨著其增長而自動(dòng)調(diào)整大小。)

使用Set類的缺點(diǎn)是:

它們是集合;即不能將兩個(gè)或更多”相等”對(duì)象放入集合中,并且
無法索引;例如,沒有get(pos)方法,
某些Set類甚至不保留插入順序。

在決定使用哪個(gè)集合類時(shí),需要考慮這些問題。

這篇關(guān)于Java:要在充滿定制對(duì)象的ArrayList中使用包含,我應(yīng)該重寫等于還是實(shí)現(xiàn)可比較/比較器?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,

分享到:
標(biāo)簽:充滿 包含 定制 對(duì)象 等于 要在 重寫
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評(píng)定2018-06-03

通用課目體育訓(xùn)練成績評(píng)定