当前位置: 代码迷 >> Java相关 >> java 关于Map怎么简化的有关问题
  详细解决方案

java 关于Map怎么简化的有关问题

热度:62   发布时间:2016-04-22 21:06:37.0
java 关于Map如何简化的问题
开发的时候遇到一个需求结果弄出了一个很大的集合如下
Map<Integer, Map<Integer, Map<Integer, Integer>>>:搞出这个大集合绝对是被领导喷的节奏,但是如果单纯想把数据放到对象里简化集合的话,到时候查找时还要循环查找,有没有牛叉的方法既可以简化它而且查找时还可以高效
------解决方案--------------------
表示关注,用第三方的包?
------解决方案--------------------
不知道为什么这么设计
------解决方案--------------------
用json格式来存
------解决方案--------------------
这样设计的初衷是要解决啥问题呀。。。。个人觉得应该是设计上除了问题的。。
------解决方案--------------------
晕 ,这是要被骂死的节奏。
不能用对象封装下么
------解决方案--------------------
想实现什么功能?
------解决方案--------------------
用对象封装比较好,而且对象里面还可以增加特定的处理方法,让代码更简洁和面向对象。
有一个技巧你可以参考:定义一个继承Map的类,并且把处理方法放在这个类里面。我有时候就这样用,感觉很好。
------解决方案--------------------
这不就是个树形结构?
public class MapTree {
// 其实可以用Map<Integer, MapTree>,但就需要另外加一个数据成员
// 比较浪费空间,所以要求不高的话用一下Object
private Map<Integer, Object> map;

public MapTree() {
this.map = new HashMap<>();
}

public Integer get(Integer... path) {
if (path.length == 0) {
throw new IllegalArgumentException("Illegal path.");
}
Map<Integer, Object> m = this.map;
Object o;

for (int i = 0; i < path.length - 1; i++) {
Integer integer = path[i];

if (!m.containsKey(integer)) {
throw new NoSuchElementException("No such key.");
}
o = m.get(integer);
if (!(o instanceof MapTree)) {
throw new IllegalArgumentException("Illegal path.");
}
m = ((MapTree)o).map;
}

if (!m.containsKey(path[path.length - 1])) {
throw new NoSuchElementException("No such key.");
}
o = m.get(path[path.length - 1]);
if (!(o instanceof Integer)) {
throw new IllegalArgumentException("Illegal path.");
}

return (Integer)o;
}

public static void main(String[] args) {
MapTree tree0 = new MapTree();
MapTree tree1 = new MapTree();
MapTree tree2 = new MapTree();
MapTree tree3 = new MapTree();
MapTree tree4 = new MapTree();
MapTree tree5 = new MapTree();

tree4.map.put(500, 1000);
tree4.map.put(300, 2000);

tree2.map.put(4, tree4);
tree2.map.put(5, tree5);
tree0.map.put(1, tree1);
tree0.map.put(2, tree2);
tree0.map.put(3, tree3);

// Output: 2000
System.out.println(tree0.get(new Integer[]{2, 4, 300}));
}

}

------解决方案--------------------
转换成json 可能会比较好~
  相关解决方案