2013-06-26 38 views
0

我正在构建一些应该创建输入字符串缓存的方法,将它们加载到列表中,然后确定该列表中每个字符串的出现次数,按照最常见的元素排列它们。将字符串加载到缓存中的最佳方法

字符串或元素本身来自JUnit测试。它调用了一个名为

lookupDistance(dest) 

方法,其中“目标”是一个字符串(目的地机场代码),以及lookupDistance返回两个机场代码之间的距离....

有背景。问题是我想将所有“dest”字符串加载到缓存中。什么是最好的方式来做到这一点?

我有骨架代码已调用的方法:

public List<String> mostCommonDestinations() 
  1. 我将如何增加“目标”字符串列表以透明的方式? JUnit测试用例只调用lookupDistance(dest),那么如何将这些“dest”字符串重定向到此方法中的List?

  2. 然后,我将如何量化每个元素出现的次数,并说,排名前三或四?

回答

0

您可以在启动时添加已知目标,并在到达时不断添加新字符串缓存。这是一种方式。另一种方式是根据请求缓存字符串,并保留它们以备将来使用。在这种情况下,你的lookupDistance也应该缓存字符串。

首先制作一个包含Hashmap的小类。关键是你的目标字符串,如果你想保存多个信息或者只是一个数字来指定该字符串被使用了多少次,该值可以是一个对象。我会建议使用数据对象。 请注意,下面的代码只是给你一个想法,更像是一个伪代码。

class Cache { 
private Hashmap<String, CacheObject>; 

public void Add(string, CacheObject); 
public CacheObject Lookup(string); 
public CacheObject Remove(string); 
public static Cache getInstance(); //single cache 
} 

class CacheObject { 
public int lookupCount; 
public int lastUsed; 
} 

在你lookupDistance你可以简单地做

if(Cache.getInstance().Lookup(string) == null) { 
Cache.getInstance().Add(string, new CacheObject() { 1, Date.now}); 
} 
0
  1. 有一个Map<String, Integer> destinations = new HashMap<>();

  2. lookupDistance(dest),这样做(未经测试的伪代码):

    整数计数= destinations.get(dest); (count == null){ destinations.put(dest,Integer.valueOf(1)); (count.intValue()+ 1); count = Integer.valueOf(count.intValue()+ 1);其他{0}。 }

这样,你算每个dest的出现次数。

  1. 浏览地图并找到最高的数量。这有点棘手。一种方法可能是:

    列表> list = new ArrayList <>(); list.addAll(destinations.entrySet()); //现在你有一个“条目”列表,其中每个映射从dest到其各自的计数器 //该列表现在必须被排序 Collections.sort(list,comparator);

我们在这个调用中使用的比较器还有待写入。它必须有两个参数,它们是列表的元素,并根据它们的计数器值进行比较。其余的例程将由sort例程完成。

Comparator<Map.Entry<String, Integer>> comparator = new Comparator<>() { 
    public @Override int compare(Map.Entry<String, Integer> a, Map.Entry<String, Integer> b) { 
     return a.getValue().intValue() - b.getValue().intValue(); 
    } 
} 

好了,我们有EntryList一个现在排序,从中可以挑选前5名左右。认为这是非常多的。所有这些看起来比它应该更复杂,所以我对其他解决方案很好奇。

+0

嗯,我没有得到正确的代码格式。也许有更多的语法知识的人可以编辑它并使其正确。此外,列表中的第三点应编号为“3.”,而不是“1”。 –

相关问题