2

/ a / b/cのような階層形式でデータを保存したい。

挿入操作は

挿入/a/ b / c / d1 20(20はd1のサイズ)挿入/ a / b / c / d2 30(30はd2のサイズ)挿入/ a / b / c 50(50はd1のサイズ) c自体)/ a / b / x 40を挿入します(40はxのサイズです)

取得操作は

/ a / b / cのサイズを取得すると100(20 + 30 + 50)が返されます。Get Size of / a / bは140を返す必要があります(すべての子のサイズは20 + 30 + 50 + 40)

Javaで実装できればもっと良いでしょう

4

1 に答える 1

2

次のように、HashMapを使用できます。

public class Test {
    public static void main(String... args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        put(map, "/a/b/c/d1", 20);
        put(map, "/a/b/c/d2", 30);
        put(map, "/a/b/c", 50);
        put(map, "/a/b/x", 40);
        System.out.println("/a/b/c: " + map.get("/a/b/c"));
        System.out.println("/a/b: " + map.get("/a/b"));
    }
    static void put(HashMap<String, Integer> map, String path, int value) {
        String p = "";
        for(String e : path.split("/")) {
            if (e.length() > 0) {
                p += "/" + e;
                Integer old = map.get(p);
                map.put(p, (old == null ? 0 : old) + value);
            }
        }
    }
}
于 2012-05-03T07:16:38.870 に答える