我正在编写一个创建 ArrayList 的方法S_Comp
包含数组中包含的所有元素allNodes
,但不包含在 ArrayList 中solution
(其元素全部包含在allNodes
)。当我打印时solution
and allNodes
,我可以很容易地看出S_Comp
应包含 7 个元素。然而,所有元素都来自allNodes
被添加到S_Comp
,还有包含在nodesS
。这里可能有什么问题?
您可以在下面找到我的该方法的代码。在调用该方法之前,S_Comp
仅被初始化为new ArrayList<MyNodesData>
,所以它的大小为0。
public void generateSComp(DataFile testDataFile, ArrayList<Route> solution, ArrayList<MyNodesData> S_Comp)
{
System.out.println("solution: " + solution.toString());
ArrayList<MyNodesData> nodesS = getNodesS(solution);
System.out.println("NodesS: " + nodesS.toString());
System.out.println("Size nodesS: " + nodesS.size());
MyNodesData[] allNodes = testDataFile.getNodes();
System.out.println("allNodes: " + Arrays.toString(allNodes));
for(MyNodesData node : allNodes)
{
if(!nodesS.contains(node))
{
System.out.println(node.toShortString() + " is not in nodesS");
S_Comp.add(node);
}
}
ArrayList javadoc的contains方法请参考这里:https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#contains-java.lang.Object- https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#contains-java.lang.Object-
It says
公共布尔包含(对象o)
如果此列表包含指定元素,则返回 true。更多的
形式上,返回 true 当且仅当
list 至少包含一个元素 e 使得 (o==null ? e==null :
o.等于(e))。
所以只有当你重写对象类的 equals 方法如你所愿在 MyNodesData 类中。此外,您可能已经知道 equals() 和 hashcode() 方法之间的约定,它是强烈建议重写 hashcode() 和 equals().
了解更多信息 :为什么我需要重写 Java 中的 equals 和 hashCode 方法? https://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and-hashcode-methods-in-java
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)