相关疑难解决方法(0)

ConcurrentHashMap和Collections.synchronizedMap(Map)有什么区别?

我有一个Map,它将被多个线程同时修改.

Java API中似乎有三种不同的同步Map实现:

  • Hashtable
  • Collections.synchronizedMap(Map)
  • ConcurrentHashMap

据我所知,这Hashtable是一个旧的实现(扩展过时的Dictionary类),后来经过调整以适应Map界面.虽然它同步的,但似乎存在严重的可扩展性问题,并且不鼓励新项目.

但是其他两个怎么样?返回的地图Collections.synchronizedMap(Map)ConcurrentHashMaps 之间有什么区别?哪一种适合哪种情况?

java concurrency dictionary

577
推荐指数
13
解决办法
33万
查看次数

Fibonacci序列的计算复杂性

我理解Big-O表示法,但我不知道如何为许多函数计算它.特别是,我一直试图弄清楚Fibonacci序列的幼稚版本的计算复杂性:

int Fibonacci(int n)
{
    if (n <= 1)
        return n;
    else
        return Fibonacci(n - 1) + Fibonacci(n - 2);
}
Run Code Online (Sandbox Code Playgroud)

Fibonacci序列的计算复杂度是多少以及如何计算?

complexity-theory big-o fibonacci time-complexity

310
推荐指数
8
解决办法
29万
查看次数

递归ConcurrentHashMap.computeIfAbsent()调用永远不会终止.错误或"功能"?

前段时间,我发表了一篇关于递归计算斐波纳契数的Java 8函数式方法的博文,其中包含一个ConcurrentHashMap缓存和新的有用computeIfAbsent()方法:

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class Test {
    static Map<Integer, Integer> cache = new ConcurrentHashMap<>();

    public static void main(String[] args) {
        System.out.println(
            "f(" + 8 + ") = " + fibonacci(8));
    }

    static int fibonacci(int i) {
        if (i == 0)
            return i;

        if (i == 1)
            return 1;

        return cache.computeIfAbsent(i, (key) -> {
            System.out.println(
                "Slow calculation of " + key);

            return fibonacci(i - 2) + fibonacci(i - 1);
        });
    }
} …
Run Code Online (Sandbox Code Playgroud)

java recursion concurrenthashmap java-8

71
推荐指数
2
解决办法
6258
查看次数