笔者的代码比较简洁,可移植性较好。
键值对就是一个集合到另一个集合的映射关系,一个键只能有一个唯一的值,但是不同的键可以映射到相同的值。
在Java语言中常用的键值对是Map,在本文中笔者以HashMap为例介绍倒排索引。
倒排索引,举个例子,比如一本书中,段落a在第1页,段落b在第2页,段落c也在第2页,要计算出第1页有段落a,第2页有段落b和段落c。
下面是倒排索引的代码
for(Set<String> s2:list.values())
{
for(String ss:s2)
{
if(!listt.containsKey(ss))
{
for(String sss:list.keySet())
{
if(list.get(sss).contains(ss))
{
list2t.add(sss);
}
}
list5t=trans(list2t);
listt.put(ss, list5t);
list2t.clear();
}
}
}
这里有一个小问题,就是map中每put一次就需要一个集合,实际上put是对地址的操作,不是复制集合中的内容,因此增加一个辅助函数就巧妙地解决了。
函数如下:
public static Set<String> trans(List<String> ss)
{
Set<String> s8=new HashSet<String>();
for(String s:ss)
{
s8.add(s);
}
return s8;
}
这样 倒排索引就完成了。