Java 检查LinkedList中是否存在泛型类型的对象
我有一个Java 检查LinkedList中是否存在泛型类型的对象,java,list,linked-list,Java,List,Linked List,我有一个链接列表,属于泛型状态。在这个LinkedList中,我有数百甚至数千个State对象。如何以最有效的方式检查新生成的状态对象是否已在列表中 国家目标: public State(PlayerAddress player, LinkedList<BoxAddress> boxList, char[][] map, String solution, String stateHash) { this.player = player; this.boxList =
链接列表
,属于泛型状态
。在这个LinkedList
中,我有数百甚至数千个State
对象。如何以最有效的方式检查新生成的状态
对象是否已在列表中
国家目标:
public State(PlayerAddress player, LinkedList<BoxAddress> boxList, char[][] map, String solution, String stateHash) {
this.player = player;
this.boxList = boxList;
this.map = map;
this.solution = solution;
this.stateHash = stateHash;
boxListString = boxListToString(boxList);
mapString = mapString(map);
}
}
公共状态(PlayerAddress播放器、LinkedList框列表、字符[][]映射、字符串解决方案、字符串状态哈希){
this.player=player;
this.boxList=boxList;
this.map=map;
这个解决方案=解决方案;
this.stateHash=stateHash;
boxListString=boxListToString(boxList);
mapString=mapString(map);
}
}
此外,状态对象由另一个通用对象组成,如构造函数中所示。如何检查两个
状态
对象是否在各个方面都相同(PlayerAddress、LinkedList等)?您是否尝试过这一方法。另外,不要忘记您可以覆盖内容,因此您也可以通过覆盖hascode和比较方法来比较hascode。在您的情况下,我强烈建议您使用contains方法。哪一个是最有效的案例查找
查看java文档中包含的内容:
公共布尔包含(对象o)
如果此列表包含指定的元素,则返回true。更正式地说,当且仅当此列表包含至少一个元素e时(o==null?e==null:o.equals(e))返回true
因此,您应该只需要覆盖State类的equals。集合将需要哈希代码。这不是真的。在包含数千个元素的链表中进行查找操作根本没有效率。我们讨论的是使用列表,据我所知,没有提到是否需要一个集合,如果我们对fast如此明确,而不关心实现,并且假设可以更改实际的数据结构,那么我推荐一个这样的库,它可以很好地工作。老实说,我认为他想留在hist list,而不是维护两个不同的集合,ETC。尤其是因为我不知道他的记忆力。我们甚至可以更进一步,转向scala并利用并行收集,以进一步提高查找时间。