2009-12-11 26 views
0

嘿,大家。我是新來的Java和我有2D LinkedList的是這樣的:Java中的2D LinkedList.contains()

LinkedList<LinkedList<String>> albums = new LinkedList<LinkedList<String>>();

其中填充數據,像這樣:

if (!artist.isEmpty() && !name.isEmpty()) { 
    albums.add(new LinkedList<String>()); 
    albums.getLast().add(artist.toString()); 
    albums.getLast().add(name.toString()); 
} 

但我想確保我的列表沒有重複的相冊。如何查詢我的專輯列表中是否已經包含同一對藝術家名稱

+1

我不確定你需要在這種情況下使用2d LinkedList。你可以用兩個屬性創建一個新類:Artist和Name,然後有一個相冊鏈表。 –

回答

2

我的建議是建立一個新的類,稱爲專輯,看起來是這樣的:

public class Album 
{ 
    private String name; 
    private String artist; 

    public Album(String name, String artist) 
    { 
     this.name = name; 
     this.artist = artist; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 

    public String getArtist() 
    { 
     return artist; 
    } 

    public void setArtist(String artist) 
    { 
     this.artist = artist; 
    } 

    public boolean equals(Object o) 
    { 
     if (o instanceof Album) 
     { 
      Album that = (Album)o; 
      return album.equals(that.album) && artist.equals(that.artist); 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((album == null) ? 0 : album.hashCode()); 
     result = prime * result + ((artist == null) ? 0 : artist.hashCode()); 
     return result; 
    } 
} 

那麼你應該能夠使用包含()檢查專輯是否已經存在於鏈表。

+0

等於**必須**一個對象!你應該實現哈希碼。 – akuhn

+0

@Adrian:謝謝,我不經常用Java編程。 –

+0

如果您向該方法添加@Override,則編譯器會警告您有關此類錯誤的信息。 – akuhn

2

是的,評論者是對的。使用artistname字段創建類Album,並在其上執行equals()(和hashCode())。然後你可以使用找到重複。或者甚至考慮使用Set(但只有當你的類真正定義了散列碼時,因爲散列支持散列)。

+0

使用contains()方法需要hash()嗎? –

+0

不在鏈接列表中(但是如果您要使用地圖或集合,您必須有一個,只需XOR哈希值和藝術家姓名字符串)。 – akuhn

+0

方法的名稱是'hashCode'。實現'equals'時實現'hashCode'是事實上的標準。嚴格來說''contains''不需要'hashCode'。 –