2009-12-11 10 views
0

Salut, tout le monde. Je suis nouveau à Java et je 2D LinkedList comme ceci:2D LinkedList.contains() en Java

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

Ce qui est rempli de données comme ceci:

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

Mais je veux assurez-vous que ma liste n'a pas d'albums en double. Comment vérifier quand mes albums liste contient déjà la même paire de artiste et nom?

+1

Je ne suis pas sûr que vous devez utiliser une LinkedList 2d dans ce cas. Vous pouvez simplement créer une nouvelle classe avec deux propriétés: Artiste et Nom, puis avoir une liste liée d'albums. –

Répondre

2

Ma suggestion serait de créer une nouvelle classe, appelée album qui ressemble à ceci:

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; 
    } 
} 

alors vous devriez être en mesure d'utiliser contains() pour vérifier si oui ou non l'album existe déjà dans la liste liée.

+0

Est égal à ** doit ** prendre un objet !!! et vous devez implémenter le code de hachage. – akuhn

+0

@Adrian: Merci, je ne programme pas souvent en Java. –

+0

si vous ajoutez @Override à la méthode, le compilateur vous avertira de ces erreurs. – akuhn

2

Oui, le commentateur a raison. Créez une classe Album avec les champs artist et name et implémentez equals() (et hashCode()) sur eux. Et puis vous pouvez utiliser pour trouver le doublon. Ou même envisager d'utiliser un Set (mais seulement si le code de hachage est vraiment défini sur votre classe, car un ensemble est soutenu par un hachage).

+0

Est-ce que hash() est nécessaire pour utiliser la méthode contains()? –

+0

Pas sur une liste chaînée (mais si vous voulez utiliser une carte ou un ensemble, vous devez en avoir un, juste XOR le hash de l'artiste et la chaîne de nom). – akuhn

+0

Le nom de la méthode est 'hashCode'. C'est un standard de facto pour implémenter 'hashCode' quand vous implémentez' equals'. Strictement parlant, 'hashCode' n'est pas nécessaire pour que' contains' fonctionne. –