<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    泰仔在線

    java學(xué)習(xí),心情日記,繽紛時(shí)刻
    posts - 100, comments - 34, trackbacks - 0, articles - 0

    由List.contains(Object, obj)想到的

    Posted on 2007-01-24 10:03 泰仔在線 閱讀(5657) 評(píng)論(1)  編輯  收藏 所屬分類: Java 相關(guān)

       昨天在開發(fā)的時(shí)候,碰到這樣一個(gè)問(wèn)題:我有一個(gè)ArrayList<ArtistEntity>的對(duì)象artistList,每次在加入對(duì)象時(shí),我都對(duì)加入的對(duì)象artistEntity進(jìn)行了判斷,如果artistList不包含artistEntity,才進(jìn)行加入:

    if  ( ! artistList.contains(artistEntity))  {
       artistList.add(artistEntity);
    }

       但運(yùn)行的結(jié)果并不是如開始設(shè)計(jì)的那樣,頁(yè)面顯示表明artistList包含了兩個(gè)相同的ArtistEntity對(duì)象,這是什么原因呢?
       我看了一下jdk關(guān)于這段的源代碼:

         /**
         * Returns <tt>true</tt> if this list contains the specified element.
         *
         * 
    @param  elem element whose presence in this List is to be tested.
         * 
    @return   <code>true</code> if the specified element is present;
         *        <code>false</code> otherwise.
         
    */

        
    public   boolean  contains(Object elem)  {
        
    return  indexOf(elem)  >=   0 ;
        }


        
    /**
         * Searches for the first occurence of the given argument, testing 
         * for equality using the <tt>equals</tt> method. 
         *
         * 
    @param    elem   an object.
         * 
    @return   the index of the first occurrence of the argument in this
         *          list; returns <tt>-1</tt> if the object is not found.
         * 
    @see      Object#equals(Object)
         
    */

        
    public   int  indexOf(Object elem)  {
        
    if  (elem  ==   null {
            
    for  ( int  i  =   0 ; i  <  size; i ++ )
            
    if  (elementData[i] == null )
                
    return  i;
        }
      else   {
            
    for  ( int  i  =   0 ; i  <  size; i ++ )
            
    if  (elem.equals(elementData[i]))
                
    return  i;
        }

        
    return   - 1 ;
        }
       這時(shí)會(huì)直接調(diào)用Object對(duì)象的equals進(jìn)行對(duì)象比較,而當(dāng)此方法被重寫時(shí),通常有必要重寫 hashCode 方法,以維護(hù) hashCode 方法的常規(guī)協(xié)定,該協(xié)定聲明相等對(duì)象必須具有相等的哈希碼。而我沒有重寫,因此就導(dǎo)致了這里的問(wèn)題了。
       修正:直接利用Eclipse重寫,右鍵/源代碼/生成hashCode()和equals(),選擇要包括在hashCode()和equals()方法中的字段:
        /**
         * 
    @return
         * 
    @see java.lang.Object#hashCode()
         
    */

        @Override
        
    public int hashCode() {
            
    final int PRIME = 31;
            
    int result = 1;
            result 
    = PRIME * result + ((artstCd == null? 0 : artstCd.hashCode());
            
    return result;
        }


        
    /**
         * 
    @param obj
         * 
    @return
         * 
    @see java.lang.Object#equals(java.lang.Object)
         
    */

        @Override
        
    public boolean equals(Object obj) {
            
    if (this == obj)
                
    return true;
            
    if (obj == null)
                
    return false;
            
    if (getClass() != obj.getClass())
                
    return false;
            
    final ArtistEntity other = (ArtistEntity) obj;
            
    if (artstCd == null{
                
    if (other.artstCd != null)
                    
    return false;
            }
     else if (!artstCd.equals(other.artstCd))
                
    return false;
            
    return true;
        }
    這樣就好了。
    或者,在加入artistEntity對(duì)象,比較artistEntity的key值。我這里是另外用一個(gè)ArrayList<String> artistCodeList存放artistEntity的key值,如果artistCodeList不包含待判斷ArtistEntity的key時(shí),才將artistEntity加入artistList:
    // 當(dāng)アーティスト情報(bào)列表中不包含時(shí)才加入
                        if (!artistCodeList.contains(artistEntity.getArtstCd())) {
                            artistCodeList.add(artistEntity.getArtstCd());
                            artistList.add(artistEntity);
                        }
     

    Feedback

    # re: 由List.contains(Object, obj)想到的  回復(fù)  更多評(píng)論   

    2007-02-14 17:51 by sosn
    好好學(xué)習(xí)天天向上
    主站蜘蛛池模板: 999zyz**站免费毛片| 久久久久亚洲AV成人网人人软件| 91精品手机国产免费| 中文精品人人永久免费| 2022免费国产精品福利在线| 免费大片av手机看片高清| 99亚洲男女激情在线观看| 精品无码专区亚洲| 国产亚洲精品美女2020久久 | 免费观看国产小粉嫩喷水| 天天拍拍天天爽免费视频| 女人18特级一级毛片免费视频| 啦啦啦高清视频在线观看免费| 免费a级毛片高清视频不卡 | 久久久精品国产亚洲成人满18免费网站 | 毛片高清视频在线看免费观看| 免费人成视频在线| 国产精品色午夜免费视频| 四虎影视在线永久免费看黄| 亚洲国产av无码精品| 久久亚洲国产成人影院网站 | 毛片免费视频观看| 永久免费av无码网站大全| 亚洲精品无码久久久久APP| 亚洲精品动漫免费二区| 边摸边吃奶边做爽免费视频网站 | 亚洲影院天堂中文av色| 精品亚洲成A人在线观看青青| 女人裸身j部免费视频无遮挡| 两性色午夜视频免费播放| 伊人久久免费视频| 国产一卡二卡3卡四卡免费| 女人18毛片a级毛片免费视频| 免费国产在线观看老王影院| 亚洲综合无码精品一区二区三区| 亚洲国产精品一区二区成人片国内 | 成年女人毛片免费观看97| 午夜亚洲av永久无码精品| 国产日本一线在线观看免费| 国产成人青青热久免费精品| 伊伊人成亚洲综合人网7777|