List.contains()没有返回正确的结果,但是手动搜索确实 - java

我的代码发生了一个奇怪的问题:

  RestAPIHeader requestedBy = new RestAPIHeader("X-Requested-By", "test");

  // Act
  RestAPIRequest req = prepareLoginRequest(USER_NAME, PASSWORD);

  // The following returns a list of header objects such that one of them
  // is "X-Requested-By: test"
  List<RestAPIHeader> headers = req.getAllHeaders();

  boolean foundRequestedBy = false;
  for (RestAPIHeader h : headers) {
      Log.d(LOGTAG, "Header: " + h.toString());
      if (requestedBy.equals(h)) {
          foundRequestedBy = true;
      }
  }

  // Assert
  assertNotNull(req);

  // This assertion passes
  assertTrue(foundRequestedBy);

  // This assertion fails
  assertTrue(headers.contains(requestedBy));

令我困扰的是,这段代码中headers.contains(requestedBy)应该等同于foundRequestedBy(因为这是简单搜索的结果)。但是,正如我在评论中提到的那样,它实际上并没有返回相同的值。似乎contains并没有使用equals(),而是==。有人可以指出为什么会这样吗?

编辑:

equals类的RestAPIHeader方法如下:

  public boolean equals(RestAPIHeader aOther) {
    return mPropertyName.equals(aOther.getHeaderName())
      && mPropertyValue.equals(aOther.getHeaderValue());
  }

参考方案

等于的签名是

public boolean equals(Object o);

所以你的equals方法

public boolean equals(RestAPIHeader aOther);

是重载,而不是替代。包含例程不会调用此重载。因此,您只需要将签名更正为

public boolean equals(Object o) {
    if(!(o instanceof RestAPIHeader))
        return false;

    RestAPIHeader aOther = (RestAPIHeader)o;

    /* same as yours from here */

Java-固定大小的列表与指定初始容量的列表之间的差异 - java

我在理解这一点上遇到了问题。当我们做 List<Integer> list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List<Integer> list2 = new A…

与在Java中分配数组与分配链表相比,要使用多少内存? - java

我的猜测是,存储在数组中的每个值都有32位/ 64位字(取决于CPU)。因此它将是数组大小X 32位/ 64位。对于链表,存储指向下一个元素的引用将是链接列表的两倍。因此它将是2 *数组大小X 32位/ 64位。这是正确的,我有什么遗漏吗? java大神给出的解决方案 多得多。链表中的每个元素都有:指向下一个元素的指针,指向上一个元素的指针,指向项目值的指针…

从方法参数或引用创建新对象 - java

public setArrayList(List<Integer> list) { this.list = list; //OR this.list = new ArrayList<Integer>(list); } 我看到不同的人可以交替使用此代码。这两种实现之间有区别吗? 参考方案 是的-这两个示例在功能上有所不同。public …

如何确保列表中的项目是连续的? - java

美好的一天 !我想问一下我是否有清单1,2,3,4,5 ..然后我将替换值“ 3”插入到“ 7”,这将提示我错误原因是列表不连续。List<Domain> items = new ArrayList<Domain>(); 参考方案 您可以重写ArrayList,设置和添加方法以检查设置/添加的项是否有效,如果无效,则抛出Illegal…

如何添加一个double值和一个double列表元素? - java

我尝试了一个代码double temp=0; List list=new ArrayList(); list.add(1.1); temp+=list.get(0); //error occurs here 发生的错误如下 二进制运算符'+'的错误操作数类型 第一种:双 第二类:对象如何在列表中添加临时值和双精度值?我首选的编程语言是Java。 参考方案 在…