我的代码发生了一个奇怪的问题:
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 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 list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List list2 = new A…与在Java中分配数组与分配链表相比,要使用多少内存? - java
我的猜测是,存储在数组中的每个值都有32位/ 64位字(取决于CPU)。因此它将是数组大小X 32位/ 64位。对于链表,存储指向下一个元素的引用将是链接列表的两倍。因此它将是2 *数组大小X 32位/ 64位。这是正确的,我有什么遗漏吗? java大神给出的解决方案 多得多。链表中的每个元素都有:指向下一个元素的指针,指向上一个元素的指针,指向项目值的指针…从方法参数或引用创建新对象 - java
public setArrayList(List list) { this.list = list; //OR this.list = new ArrayList(list); } 我看到不同的人可以交替使用此代码。这两种实现之间有区别吗? 参考方案 是的-这两个示例在功能上有所不同。public …如何确保列表中的项目是连续的? - java
美好的一天 !我想问一下我是否有清单1,2,3,4,5 ..然后我将替换值“ 3”插入到“ 7”,这将提示我错误原因是列表不连续。List items = new ArrayList(); 参考方案 您可以重写ArrayList,设置和添加方法以检查设置/添加的项是否有效,如果无效,则抛出Illegal…如何添加一个double值和一个double列表元素? - java
我尝试了一个代码double temp=0; List list=new ArrayList(); list.add(1.1); temp+=list.get(0); //error occurs here 发生的错误如下 二进制运算符'+'的错误操作数类型 第一种:双 第二类:对象如何在列表中添加临时值和双精度值?我首选的编程语言是Java。 参考方案 在…