电话簿上有号码和名字。如果有人帮我选择最好的收藏,我会很感激的,这将帮助我表演
目前我正在使用HashMap,但是这里的名称和编号都是关键,这将不是很好。另一个选项是将名称和数字包装在一个对象中,然后将它们添加到list.And中,然后迭代并添加到列表中。但如果你能给我推荐一些最好的收藏品,我会这么做的。
注:-名称和数字是字符串
发布于 2012-12-12 15:46:55
如果您需要同时查询名称和电话号码,那么将所有的名称-数字对放入一个列表确实是可能的,而且非常简单,但是搜索和删除都将具有线性复杂性。
如果您想要更好的时间复杂度(例如常数或至少对数),您可能需要使用双向映射。例如,番石榴的BiMap恰恰提供了这种行为。
如果您需要自己实现这一点(例如,这是一个家庭作业),我将创建一个由两个内部HashMap组成的类,每个入口方向一个。这将为您提供常量时间查找名称和数字.当然,您必须确保始终保持两个映射的同步。
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);
}
}发布于 2012-12-12 15:35:58
我会使用一个对象,因为如果您需要存储的不仅仅是名称和数字,那么它将在行的后面添加更多的范围。您可以编写一些帮助函数来获取所需的数据。
发布于 2012-12-12 15:43:07
您仍然可以使用HashMap K=Number V=Name,因为在逻辑上搜索速度更重要,并且可以使用迭代器按名称删除,如下所示
Iterator i = map.entrySet().iterator();
while(i.hasNext()) {
Entry e = i.next();
if (e.getValue().equals("user1898282") {
i.remove();
}
}https://stackoverflow.com/questions/13843084
复制相似问题