首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在这里要用哪一套?

我在这里要用哪一套?
EN

Stack Overflow用户
提问于 2012-12-12 15:30:57
回答 3查看 727关注 0票数 1

电话簿上有号码和名字。如果有人帮我选择最好的收藏,我会很感激的,这将帮助我表演

  1. 添加姓名和号码。
  2. 按编号搜索名称
  3. 按名称删除名称和编号。

目前我正在使用HashMap,但是这里的名称和编号都是关键,这将不是很好。另一个选项是将名称和数字包装在一个对象中,然后将它们添加到list.And中,然后迭代并添加到列表中。但如果你能给我推荐一些最好的收藏品,我会这么做的。

注:-名称和数字是字符串

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-12 15:46:55

如果您需要同时查询名称和电话号码,那么将所有的名称-数字对放入一个列表确实是可能的,而且非常简单,但是搜索和删除都将具有线性复杂性。

如果您想要更好的时间复杂度(例如常数或至少对数),您可能需要使用双向映射。例如,番石榴的BiMap恰恰提供了这种行为。

如果您需要自己实现这一点(例如,这是一个家庭作业),我将创建一个由两个内部HashMap组成的类,每个入口方向一个。这将为您提供常量时间查找名称和数字.当然,您必须确保始终保持两个映射的同步。

代码语言:javascript
复制
public class PhoneBook {

    private Map<String, String> namesToNumbers = new HashMap<>();
    private Map<String, String> numbersToNames = new HashMap<>();

    public void insertEntry(String name, String phoneNumber) {
        namesToNumbers.put(name, phoneNumber);
        numbersToNames.put(phoneNumber, name);
    }

    public String getNameForPhoneNumber(String phoneNumber) {
        return numbersToNames.get(phoneNumber);
    }

    public String getPhoneNumberForName(String name) {
        return namesToNumbers.get(name);
    }

    public void removeEntryByPhoneNumber(String phoneNumber) {
        String name = numbersToNames.get(phoneNumber);
        namesToNumbers.remove(name);
        numbersToNames.remove(phoneNumber);
    }

    public void removeEntryByName(String name) {
        String phoneNumber = namesToNumbers.get(name);
        numbersToNames.remove(phoneNumber);
        namesToNumbers.remove(name);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-12-12 15:35:58

我会使用一个对象,因为如果您需要存储的不仅仅是名称和数字,那么它将在行的后面添加更多的范围。您可以编写一些帮助函数来获取所需的数据。

票数 1
EN

Stack Overflow用户

发布于 2012-12-12 15:43:07

您仍然可以使用HashMap K=Number V=Name,因为在逻辑上搜索速度更重要,并且可以使用迭代器按名称删除,如下所示

代码语言:javascript
复制
Iterator i = map.entrySet().iterator();
while(i.hasNext()) {
    Entry e = i.next();
    if (e.getValue().equals("user1898282") {
        i.remove();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13843084

复制
相关文章

相似问题

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