Java:ArrayList<;HashMap<;整数,整数>&燃气轮机;

Java:ArrayList<;HashMap<;整数,整数>&燃气轮机;,java,arraylist,hashmap,Java,Arraylist,Hashmap,是否有更好的方法在Java中执行以下操作,而不使用外部库 我需要为int(primitive)的组/子(树状)结构建模。Json格式 我需要支持添加/删除元素(元素是一对{group,child}),而不需要重复 我在想,保持这样的数据结构 ArrayList<HashMap<Integer,Integer>> 如果我明白你想做什么,这可能更简单: TreeMap<Integer,TreeSet<Integer>> or HashMap<

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

我需要为int(primitive)的组/子(树状)结构建模。Json格式

我需要支持添加/删除元素(元素是一对{group,child}),而不需要重复

我在想,保持这样的数据结构

ArrayList<HashMap<Integer,Integer>>

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

TreeMap<Integer,TreeSet<Integer>>
  or
HashMap<Integer,HashSet<Integer>>
你会的

[{1, {1, 2}},
 {2, {1}},
 {3, {1}}]
请注意,上述所有4个类都会自动处理消除重复项的操作

加上:

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);
TreeMap地图;
TreeSet set=map.get(组);
if(set==null)//如果它不存在,就创建它
{
set=新树集();
地图放置(组、集);
}
集合。添加(子对象);
删除:

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);
TreeMap地图;
TreeSet set=map.get(组);
设置。移除(儿童);
if(set.isEmpty())//如果它现在为空,则将其删除
地图。删除(组);

您可以编写一个名为
KeyValue
的类,该类有两个属性来保存group和child。将
KeyValue
对象添加到
ArrayList
。对于CRUD操作,您可以在键值对类中实现
equals
compare

而不是
HashMap
,使用名为
pair
的类和两个字段
{group,child}
,它们将实现
compariable
接口。然后实现/重写其
equals()
hashCode()
compareTo()
方法。然后根据需要使用
列表
设置
。实现了
compareTo()
后,您也可以灵活地对
进行排序。

我是数据结构领域的新手,但我认为我们可以在假设没有两个集合对象相似的情况下使用它

Set validSet=new HashSet();//在这里使用泛型

HashSet将为添加/删除/包含提供一个恒定的时间

SomeObject{
     Integer parent ;
     Integer child;
     //define equals method based on your requirement
}

根据你的问题,我认为你想展示这一行

[{1,1}, {1,2}, {2,1},{3,1}]
as

组1->1,2(从前两对开始)
组2->1(从 第三对)
第三组->第1组(第四对)

最适合存储此层次结构的数据结构是:

Map<Integer,Set<Integer>> map = new HashMap<Integer,Set<Integer>>();

谢谢我没有做太多的Java,所以从来没有听说过TreeMap和TreeSet。我将结帐。谢谢你的实施。我喜欢这种方法。将在测试后接受。再次感谢
hashCode()
也应该在覆盖
equals()
时实现。更有效的实现是使用
Set
(例如
HashSet
TreeSet
)而不是
ArrayList
。响应编辑-
Set
(例如
TreeSet
(要求您的类扩展java.lang.Comparable或作为输入提供的
比较器类)/
HashSet
)将比
ArrayList
更有效地处理添加/删除操作。在
equals()
中,如果(o==null | getClass()!=o.getClass())返回false,则使用
if(!(o instanceof KeyValue))返回false;
SomeObject{
     Integer parent ;
     Integer child;
     //define equals method based on your requirement
}
[{1,1}, {1,2}, {2,1},{3,1}]
Map<Integer,Set<Integer>> map = new HashMap<Integer,Set<Integer>>();
import java.util.HashMap;
import java.util.ListIterator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
class  TreeLike
{
    public static void main(String[] args) 
    {
        Map<Integer,Set<Integer>> map = new HashMap<Integer,Set<Integer>>();
        int groups[] = {1,2,3,4,5,6,7};
        //To add new group in map
        for (int i = 0 ; i < groups.length; i++)
        {
            Set<Integer> child = new TreeSet<Integer>();
            child.add(1);child.add(2);child.add(3);child.add(4);child.add(5);
            map.put(groups[i],child);
        }
        //To add new child(8) to a group (say group 1)
        Set<Integer> child = map.get(1);
        if (child != null)
        {
            child.add(8);
            map.put(1,child);
        }

        //To remove a child (say child 4) from group 3
        child = map.get(3);
        if (child != null)
        {
            child.remove(4);
            map.put(1,child);
        }
        //To Iterate through all trees
        Set<Map.Entry<Integer,Set<Integer>>> entrySet = map.entrySet();
        Iterator<Map.Entry<Integer,Set<Integer>>> iterator = entrySet.iterator();
        while (iterator.hasNext())
        {
            Map.Entry<Integer,Set<Integer>> entry = iterator.next();
            int group = entry.getKey();
            Set<Integer> children = entry.getValue();
            System.out.println("Group "+group+" children-->"+children);
        }
    }
}