首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java : ArrayList<HashMap<Integer,Integer>>

Java : ArrayList<HashMap<Integer,Integer>>
EN

Stack Overflow用户
提问于 2013-02-07 17:08:30
回答 5查看 2.9K关注 0票数 1

是否有更好的方法在Java中完成以下操作,而不使用外部库。

我需要建模int (原语)的组/子(树样)结构。在Json

代码语言:javascript
复制
[{1,1}, {1,2}, {2,1},{3,1}]

我需要支持元素的添加/删除(元素是一对{组,子}),没有重复。

我在想,保持一个数据结构就像。

代码语言:javascript
复制
ArrayList<HashMap<Integer,Integer>>

加一句。

遍历ArrayList,根据要插入的值检查HashMap键和值,如果不存在则插入。

删除:

遍历ArrayList,根据要删除的值检查HashMap键和值,如果存在则删除。

是否有更好的标准库数据结构/方法。

根据下面的一个答案,我做了一个这样的课程。请让我知道任何需要注意的事情。我期望(并将尝试) arraylist通过在KeyValue类中使用equal方法正确地处理添加/删除。谢谢。

代码语言:javascript
复制
 static class KeyValue {
        int groupPos;
        int childPos;

        KeyValue(int groupPos, int childPos) {
            this.groupPos = groupPos;
            this.childPos = childPos;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            KeyValue keyValue = (KeyValue) o;

            if (childPos != keyValue.childPos) return false;
            if (groupPos != keyValue.groupPos) return false;

            return true;
        }

        @Override
        public int hashCode() {
            int result = groupPos;
            result = 31 * result + childPos;
            return result;
        }
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-07 17:12:21

如果我明白你想做什么,这可能会更简单:

代码语言:javascript
复制
TreeMap<Integer,TreeSet<Integer>>
  or
HashMap<Integer,HashSet<Integer>>

所以,而不是

代码语言:javascript
复制
[{1,1}, {1,2}, {2,1}, {3,1}]

你会有

代码语言:javascript
复制
[{1, {1, 2}},
 {2, {1}},
 {3, {1}}]

请注意,上述所有4个类都自动处理消除重复项。

增加:

代码语言:javascript
复制
TreeMap<Integer, TreeSet<Integer>> map;
TreeSet<Integer> set = map.get(group);
if (set == null) // create it if it doesn't exist
{
  set = new TreeSet<Integer>();
  map.put(group, set);
}
set.add(child);

移除:

代码语言:javascript
复制
TreeMap<Integer, TreeSet<Integer>> map;
TreeSet<Integer> set = map.get(group);
set.remove(child);
if (set.isEmpty()) // remove it if it is now empty
  map.remove(group);
票数 2
EN

Stack Overflow用户

发布于 2013-02-07 17:15:36

您可以使用两个属性编写一个名为KeyValue的类,以保存组和子类。将KeyValue对象添加到ArrayList中。对于CRUD操作,可以在equals对类中实现KeyValue和compare

票数 1
EN

Stack Overflow用户

发布于 2013-02-07 17:20:49

不要使用HashMap,而是使用一个名为Pair的类,其中包含两个字段-- {group,child},这将实现Comparable接口。然后实现/重写它的equals()hashCode()compareTo()方法。然后根据您的需要使用List<Pair>Set<Pair>来保存它们。compareTo()的实现也为您提供了对Pairs进行排序的灵活性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14756868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档