Java中的2D LinkedList.contains()
大家好。我是Java新手,我有如下2D LinkedList:Java中的2D LinkedList.contains(),java,linked-list,2d,contains,Java,Linked List,2d,Contains,大家好。我是Java新手,我有如下2D LinkedList: public class Album { private String name; private String artist; public Album(String name, String artist) { this.name = name; this.artist = artist; } public String getName()
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;
}
}
LinkedList albums=新建LinkedList()代码>
其中包含如下数据:
if(!artist.isEmpty()&&&!name.isEmpty()){
添加(新的LinkedList());
albums.getLast().add(artist.toString());
albums.getLast().add(name.toString());
}
但我想确保我的列表中没有重复的相册。当我的相册列表中已经包含同一对艺术家和姓名时,如何进行检查?是的,评论家是对的。创建一个带有artist
和name
字段的类Album
,并在其上实现equals()
(和hashCode()
)。然后您可以使用contains()
查找重复项。或者甚至考虑使用<代码> SET/COD>(但是只有哈希代码在你的类中真正定义,因为一个集合是由哈希支持的)。是的,评论员是正确的。创建一个带有artist
和name
字段的类Album
,并在其上实现equals()
(和hashCode()
)。然后您可以使用contains()
查找重复项。或者甚至考虑使用<代码> SET/COD>(但是,如果哈希代码在你的类上真正定义了,因为一个集合是由哈希支持的)。
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;
}
}
然后,您应该能够使用contains()检查相册是否已存在于链接列表中。我的建议是创建一个名为album的新类,该类的外观如下:
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;
}
}
然后,您应该能够使用contains()检查相册是否已存在于链接列表中。在这种情况下,我不确定您是否需要使用2d LinkedList。您可以创建一个具有两个属性的新类:Artist和Name,然后创建一个相册的链接列表。我不确定在这种情况下是否需要使用2d LinkedList。您可以创建一个具有两个属性的新类:艺术家和名称,然后创建一个相册的链接列表。使用contains()方法需要hash()吗?不在链接列表上(但如果要使用映射或集合,则必须有一个。只需对艺术家和名称字符串的哈希进行XOR即可)。方法的名称是hashCode
。当您实现equals
时,实现hashCode
实际上是一个标准。严格地说,hashCode
对于contains
来说是不必要的。“严格地说,hashCode对于contains来说是不必要的。”同意。但是,任何未能保持hashcode和等于hashcode的人都应该受到绞刑、抽刑和四分五裂使用contains()方法需要hash()吗?不在链表上(但如果要使用映射或集合,则必须有一个映射或集合。只需对艺术家和名称字符串的hash进行异或运算即可)。方法的名称为hashCode
。当您实现equals
时,实现hashCode
实际上是一个标准。严格地说,hashCode
对于contains
来说是不必要的。“严格地说,hashCode对于contains来说是不必要的。”同意。但是,任何未能保持hashcode和等于hashcode的人都应该受到绞刑、抽刑和四分五裂@阿德里安:谢谢,我不经常用Java编程。如果你在方法中添加@Override,编译器会警告你这些错误。谢谢大家,为此编写一个类是完全有意义的。我不太明白hashCode()是如何工作的,因为:)只是一个观察——对于这种类型的类,默认情况下不要使它们可变;我的意思是,如果不需要,就不要定义任何setter并将变量设置为final。这只是一个好习惯——不是法律或任何东西。@rukoche-thehashcode()
方法覆盖只是将两个字段的hashcode值组合成一个值。它是必需的,因为类也重写了对象。equals(Object)
,hashcode
和equals
必须一致。@Adrian:谢谢,我不经常用Java编程。如果你在方法中添加@Override,编译器会警告你这些错误。谢谢大家,为此编写一个类是完全有意义的。我不太明白hashCode()是如何工作的,因为:)只是一个观察——对于这种类型的类,默认情况下不要使它们可变;我的意思是,如果不需要,就不要定义任何setter并将变量设置为final。这只是一个好习惯——不是法律或任何东西。@rukoche-thehashcode()
方法覆盖只是将两个字段的hashcode值组合成一个值。它是必需的,因为类也重写了对象。equals(Object)
,hashcode
和equals
必须一致。