【发布时间】:2014-07-18 22:38:40
【问题描述】:
我正在尝试将我用 Java 编写的这个算法翻译成 Scala,但我在使用 Java 中的 containsValue() 方法时遇到了问题。我想做类似if (hashMap.containsValue(value)) 的事情,但我查看了 scala 文档,只找到了一个 contains(key) 方法。 你如何在 Scala 中实现或使用 hashmap.containsValue(value) 我还是 Scala 的新手,但这是我目前在 Scala 中所拥有的:
def retString(s: String)
{
val map = new mutable.HashMap[Int, Char]
for (c <- s.toCharArray)
{
//if(!map.containsValue(c)) goes here
}
}
` 我尝试转换的完整算法是我用 Java 编写的 removeDuplicates:
public static String removeDuplicates(char[] s)
{
HashMap<Integer, Character> hashMap = new HashMap<Integer, Character>();
int current = 0;
int last = 0;
for(; current < s.length; current++)
{
if (!(hashMap.containsValue(s[current])))
{
s[last++] = s[current];
hashMap.put(current, s[current]);
}
}
s[last] = '\0';
//iterate over the keys and find the values
String result = "";
for (Integer key: hashMap.keySet()) {
result += hashMap.get(key);
}
return result;
}
【问题讨论】:
-
嘿,你为什么不添加你想转换的java算法呢?将帮助我们了解您想要做什么?
-
通常,对于这种
removeDuplicates算法,您会创建一个集您要尝试去重的事物。 containsValue 方法是 O(n),因此您的算法是 O(n^2)。您可以使用一组在 O(n log(n)) 中执行此操作(即使您还保留索引到值的映射以保持排序)。 -
@WillFitzgerald ?这是 O(2n) 而不是 O(n^2)。 O(n) 如果您不计算打印输出。
-
您必须对每个项目进行 O(n) 比较,所以它是 O(n^2)。我错过了什么?
标签: java scala collections hashmap