【问题标题】:(Java) Searching ArrayList of Strings(Java) 搜索字符串的 ArrayList
【发布时间】:2014-02-28 05:22:38
【问题描述】:

我正在创建一个程序,允许用户输入要搜索的联系人姓名。如果找到联系人,则显示联系人的其他信息(电话号码和电子邮件)。

我的 ArrayList 看起来像这样:

ArrayList<Contact> contacts = new ArrayList<Contact>();

contacts.add(new Contact("Patrick McGee", "334-555-8860", "pmcgee123@gmail.com"));
contacts.add(new Contact("John Appleseed", "142-555-6740", "jappleseed99@gmail.com"));
contacts.add(new Contact("Matt Jordan", "213-555-2323", "mjordan23@gmail.com"));
contacts.add(new Contact("Kanye East", "255-434-9909", "keast123@gmail.com"));
contacts.add(new Contact("Derrick Flower", "144-555-1111", "dflower1@gmail.com"));

我有变量:字符串名称、字符串编号和字符串电子邮件。
同样,要求用户输入名称(arraylist 的第一个字符串)。 如果找到姓名,则将打印联系人(包含所有信息)。我曾尝试在 Collections 中使用 BinarySearch,但这给了我非常混乱的错误。如果需要更多信息,请随时询问。 有没有这样的搜索方法?谢谢。

【问题讨论】:

  • 你是否覆盖了 Contact 类中的 equals 和 hascode 方法?它是否实现了可比较或比较器接口??
  • 我尝试使用工具比较器,但出现很多错误。你能告诉我在这种情况下如何使用比较器的例子吗?

标签: string search arraylist


【解决方案1】:

不,没有一种方法可以做到这一点。你必须自己做,因为在这里你只检查一个属性。

for(Contact contact : contacts) {
    if(contact.getName().equals(nameToSearchFor)) {
        // return the contact, print it or whatever you need
    }
}

API 将一些类似 Comparable 和 equals 的东西用于此类事物,但仅考虑名称的实现会破坏他们的合同。

可能定义一个只查看名称并使用 binarySearch 的比较器,但这需要:

  • 联系以实现 Comparable,否则
  • 要排序的列表

老实说,在这种情况下,做这些事情并没有什么好处。

【讨论】:

    猜你喜欢
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    相关资源
    最近更新 更多