2009-12-11 5 views
0

Эй, все. Я новичок в Java и у меня есть 2D LinkedList, как это:2D LinkedList.contains() в Java

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

Но я хочу убедитесь, что в моем списке нет дубликатов альбомов. Как проверить, когда мои альбомов в списке уже есть та же пара artist и имя?

+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

Equals ** должен ** взять объект !!! и вы должны реализовать хэш-код. – akuhn

+0

@Adrian: Спасибо, я часто не программирую на Java. –

+0

, если вы добавите @Override в метод, компилятор предупредит вас об ошибках. – akuhn

2

Да, комментатор прав. Создайте класс Album с полями artist и name и поставьте equals()hashCode()) на них. И затем вы можете использовать , чтобы найти дубликат. Или даже подумайте об использовании Set (но только если хэш-код действительно определен в вашем классе, поскольку набор поддерживается хэшем).

+0

Is hash() необходимо использовать метод contains()? –

+0

Не в связанном списке (но если вы когда-либо собираетесь использовать карту или набор, у вас должен быть один. Просто XOR хэш исполнителя и строка имени). – akuhn

+0

Имя метода - 'hashCode'. Это стандарт defacto для реализации 'hashCode', когда вы реализуете' equals'. Строго говоря, 'hashCode' не требуется для' contains' для работы. –

 Смежные вопросы

  • Нет связанных вопросов^_^