哪个集合适合Java中的电话号码+名称对?

时间:2013-05-09 10:58:38

标签: java loops collections multimap

我正在尝试将以下对添加到集合中

  

698xxxxxxx - personA

     

698xxxxxxx - personB

     

699xxxxxxx - personA

     

699xxxxxxx - personB

我浏览了很多文件并尝试将我在那里找到的对添加到一个集合中。我希望能够有一个表格,可以显示每个数字以及与之相关的人物,而不需要进行公开的PAIRS。例如

  

1人A好

     

1人B好

     

2人A好

     

3人B好

     

3人B不行,因为它已经存在

我尝试使用Multimap,但我不确定它是否是正确的选择。无论解决方案是什么,请告诉我如何通过它的值进行迭代,以便我可以使用这些对。对于要求很高的帖子感到抱歉,但我是Java新手,我发现很难理解API。

提前致谢

4 个答案:

答案 0 :(得分:2)

根据您的需要,有三种明显的替代方案。

  • 如果每个电话号码只能有一个人,那么只需一个简单的Map<PhoneNo, Name>

  • 如果某个给定的电话号码可以与多个人关联,则可以是Map<Phone,Set<Name>>或多地图类。

  • 如果您还想查找每个人的电话号码或号码,您需要两张地图或两张多地图......或双向地图。

您需要做出次要选择:哈希表与基于树的组织。哈希表将为您提供O(1)查找/插入/删除(假设哈希函数是好的)。基于树的实现提供O(logN)个操作......但它也允许您按键顺序迭代条目(或值)。

虽然标准Java类库不提供多映射或双向映射,但可以通过组合简单集合类轻松实现它们。

答案 1 :(得分:1)

您可以选择Java中的Map Interface,它接受键和值对。

您可以将此作为参考:http://www.tutorialspoint.com/java/java_map_interface.htm

答案 2 :(得分:0)

您可能需要一个hashmap,其中key作为person的名称,值为HashSet数字。 Hashset不允许重复,因此不会存储重复的数字。这是代码:

HashMap<String,HashSet> Records;

答案 3 :(得分:0)

在Java中有几种选择。如果您不知道人或数字的基数,请选择:

public class Pair {
  String person;
  String number;
  }

然后使用Set来保存像

这样的双重图像
Set<Pair> pairs = new HashSet<>();
....
pairs.add( new Pair( "689xxxx", "personA" );
for ( Pair pair : pairs ) {
  System.out.println( pair.number + " - " + pair.person );
}

哈乔