首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用与indexOf相比较的

使用与indexOf相比较的
EN

Stack Overflow用户
提问于 2011-10-30 13:12:38
回答 2查看 3.6K关注 0票数 3

我尝试了下面的简单测试。

代码语言:javascript
复制
class ZiggyTest{
    public static void main(String[] args){

        List<Cities> cities3 = new ArrayList<Cities>();
        Cities city = new Cities("London");

        cities3.add(new Cities("Manchester"));
        cities3.add(new Cities("Glasgow"));
        cities3.add(new Cities("Leeds"));
        cities3.add(city);
        cities3.add(new Cities("Leicester"));
        cities3.add(new Cities("Croydon"));
        cities3.add(new Cities("Watford"));

        System.out.println("IndexOf(new Croydon) " 
                       + cities3.indexOf(new Cities("Croydon")));
        System.out.println("IndexOf(city) " 
                       + cities3.indexOf(city));
    }   
}

class Cities implements Comparable<Cities>{
    String title;

    Cities(String aTitle){
        this.title = aTitle;
    }

    public String getTitle(){
        return title;
    }

    public String toString(){
        return "Title : " + title;
    }

    public int compareTo(Cities c){
        return title.compareTo(c.getTitle());
    }
}

上述测试的输出是

代码语言:javascript
复制
IndexOf(new Croydon) -1
IndexOf(city) 3

我理解为什么第二行产生了3,但我不明白为什么第一行没有找到带有title="Croydon“的新行。

API将indexOf方法描述为

返回此列表中指定元素的第一个匹配项的索引,如果此列表不包含该元素,则返回-1。更正式地说,返回最低索引i,这样的(o==null ? get(i)==null : o.equals(get(i))),或-1,如果没有这样的索引。

我认为API的意思是,如果对象是空的,那么它将从列表中返回空对象第一次出现的索引。如果它不是null,它将返回第一个事件的索引,其中传入的object方法返回true。

作为cities3.indexOf(new Cities("Croydon")创建的对象不应该等于先前作为cities3.add(new Cities("Croydon"));添加的对象吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-30 13:17:10

如果要执行搜索操作,请重新定义equals而不是compareTo

默认情况下,indexOf使用等于操作进行比较,在您的情况下,等于不重新定义,这意味着您可以通过引用进行比较。创建具有相同名称的新City对象时,对对象有另一个引用,因此等于返回false。

如果你使用的是描述城市的对象,最好的名字是“类城市”,而不是“城市”

票数 11
EN

Stack Overflow用户

发布于 2021-03-06 23:38:45

在SWIFT5.3中,如果对象继承自NSObject,则需要这样做:

方法名为"isEqual“

代码语言:javascript
复制
public override func isEqual(_ object: Any?) -> Bool {
    if let myObj = object as? MyObj {
        return myObj.someProperty == self.someProperty
    }
    return false
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7945089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档