Java:ArrayList<;HashMap<;整数,整数>&燃气轮机;
是否有更好的方法在Java中执行以下操作,而不使用外部库 我需要为int(primitive)的组/子(树状)结构建模。Json格式 我需要支持添加/删除元素(元素是一对{group,child}),而不需要重复 我在想,保持这样的数据结构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<
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);
}
}
}