![](/img/trans.png)
[英]Which Java collection is suitable for finding filenames with max timestamp in a Huge arraylist?
[英]Which collection is suitable for tel number + name pair in Java?
我正在尝试将以下对添加到集合中
698xxxxxxx-personA
698xxxxxxx-人B
699xxxxxxx-personA
699xxxxxxx-人B
我浏览了很多文件,并尝试将在其中找到的对添加到集合中。 我希望能够有一个表格来显示每个数字以及与之相关的人员,而不必重复使用PAIRS。 例如
1人即可
1人同行
2人同行
3人同行
3人B不好,因为它已经在那里
我尝试使用Multimap,但是我不确定它是否是正确的选择。 无论解决方案是什么,请向我展示如何迭代其值,以便我可以使用这些对。 很抱歉要求苛刻的帖子,但是Java是我的新手,我发现很难理解API。
提前致谢
有三种明显的选择,具体取决于您的需求。
如果每个电话号码只能有一个人,则使用一个简单的Map<PhoneNo, Name>
。
如果给定的电话号码可以与多个人相关联,则可以使用Map<Phone,Set<Name>>
或多地图类。
如果您还想查找每个人的电话号码,则需要两张地图或两张多地图...或双向地图。
您需要做出第二个选择:哈希表与基于树的组织。 哈希表将为您提供O(1)
查找/插入/删除(假设哈希函数很好)。 基于树的实现提供了O(logN)
操作...但是它还允许您按键顺序遍历条目(或值)。
尽管标准Java类库不提供多图或双向图,但可以通过组合简单的集合类来轻松实现它们。
您可以选择Java中的Map Interface,它接受键和值对。
您可以将此作为参考: http : //www.tutorialspoint.com/java/java_map_interface.htm
您可能需要一个散列表,其中的键是人的名字,值是一个HashSet数字。 哈希集不允许重复,因此重复的数字将不会存储在其中。 这是代码:
HashMap<String,HashSet> Records;
在Java中,有两种选择。 如果您不知道人员或数字的基数,请进行以下操作:
public class Pair {
String person;
String number;
}
然后使用Set从doublette保存
Set<Pair> pairs = new HashSet<>();
....
pairs.add( new Pair( "689xxxx", "personA" );
for ( Pair pair : pairs ) {
System.out.println( pair.number + " - " + pair.person );
}
Hajo
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.