Java ArrayList:contains()方法在arraylist包含给定对象时返回false

chr*_*sen 4 java arrays evaluation contains arraylist

我有一个contains()方法的问题,即使ArrayList包含给定的方法返回false Object.我的代码如下:

String [] transaction = dbConnection.getPendingTransaction(username);
if (!onlineConnection.getSentTransactionRequests().contains(transaction)) {
    onlineConnection.getSentTransactionRequests().add(transaction);

    String packet = "RTR" + "_" + transaction[0] + "_" + transaction[2] + 
                        "_" + transaction[3] + "_" + transaction[4];
    onlineConnection.send(packet);
}
Run Code Online (Sandbox Code Playgroud)

Thread.sleep()在迭代之间尝试过,所以ArrayList没有成功就没有加载.

ami*_*mit 7

对于这个问题,数组hashCode()equals()数组有点破碎(这是一个长期不同的讨论原因).

可能的解决方法是使用ArrayList<ArrayList<String>>而不是ArrayList<String[]>,equals()方法ArrayList将按照您的预期.

例如:

    ArrayList<String> l1 = new ArrayList<>();
    ArrayList<String> l2 = new ArrayList<>();
    l1.add("asdf");
    l2.add("asdf");
    ArrayList<ArrayList<String>> coll = new ArrayList<>();
    coll.add(l1);
    System.out.println(coll.contains(l2));
Run Code Online (Sandbox Code Playgroud)

true如预期的那样屈服