Java 如何将另一个元素作为列表插入树映射值
所以我还在学习Java映射,只是想知道是否可以将另一个元素作为列表插入到TreeMap值中?这是我的代码:Java 如何将另一个元素作为列表插入树映射值,java,data-structures,Java,Data Structures,所以我还在学习Java映射,只是想知道是否可以将另一个元素作为列表插入到TreeMap值中?这是我的代码: TreeMap<String,List<Integer>> myTree = new TreeMap<>(); String info = "Andi 20"; Integer extra = 100; String[] temp = info.split(" "); myTree.put(temp[0], C
TreeMap<String,List<Integer>> myTree = new TreeMap<>();
String info = "Andi 20";
Integer extra = 100;
String[] temp = info.split(" ");
myTree.put(temp[0], Collections.singletonList(Integer.parseInt(temp[1]))); // {Andi : [20]}
如果可能的话,也许你也能给出时间复杂度的细节??这对我有很大帮助
谢谢大家…只要您正在使用的
列表
实现支持添加
,当然您可以添加其他元素
但是,您使用的是Collections#singletonList
,根据定义,它不允许任何修改(singletonCollections实用程序返回不可变的实现)。只需使用ArrayList
,LinkedList
等
Map Map=newtreemap();
put(“foo”,新的ArrayList());
地图。获取(“foo”)。添加(1);
map.get(“foo”).add(2);
get
和put
的时间复杂度在TreeMap
文档中:
此实现为containsKey、get、put和remove操作提供了有保证的日志(n)时间开销
map.get(“foo”).add(1)
的时间复杂度是log(n),因为ArrayList\add
是常数时间
您可以使用Map#computeIfAbsent
处理初始化列表的操作
:
map.computeIfAbsent(“foo”,key->newArrayList()).add(1);
注意在使用
new
的任何情况下,computeIfAbsent
都比putIfAbsent
更可取,因为computeIfAbsent
可以避免在密钥已经存在于映射中时进行不必要的分配。只要您使用的列表
实现支持add
,当然,您可以添加其他元素
但是,您使用的是Collections#singletonList
,根据定义,它不允许任何修改(singletonCollections实用程序返回不可变的实现)。只需使用ArrayList
,LinkedList
等
Map Map=newtreemap();
put(“foo”,新的ArrayList());
地图。获取(“foo”)。添加(1);
map.get(“foo”).add(2);
get
和put
的时间复杂度在TreeMap
文档中:
此实现为containsKey、get、put和remove操作提供了有保证的日志(n)时间开销
map.get(“foo”).add(1)
的时间复杂度是log(n),因为ArrayList\add
是常数时间
您可以使用Map#computeIfAbsent
处理初始化列表的操作
:
map.computeIfAbsent(“foo”,key->newArrayList()).add(1);
注意在使用
new
的任何情况下,computeIfAbsent
比putIfAbsent
更可取,因为computeIfAbsent
避免了在密钥已经存在于映射中时进行不必要的分配。尝试:myTree.get(“Andi”).add(100)
。如果不想修改列表,请尝试:myTree.put(temp[0],list.of(Integer.parseInt(temp[1]),extra))代码>尝试:myTree.get(“Andi”).add(100)
。如果不想修改列表,请尝试:myTree.put(temp[0],list.of(Integer.parseInt(temp[1]),extra))代码>啊,明白了,谢谢。。但要问一个简单的问题。。声明另一个这样的Arraylist并再次向映射添加数字的时间复杂度是多少?是O(n)?ArrayList
提供了固定时间add
,这要归功于分配和扩展基础阵列的摊余成本。其他List
实现将具有不同的特征——集合框架的所有成员都在javadocs中详细说明了它们的时间复杂性:)啊,明白了,谢谢。。但要问一个简单的问题。。声明另一个这样的Arraylist并再次向映射添加数字的时间复杂度是多少?是O(n)?ArrayList
提供了固定时间add
,这要归功于分配和扩展基础阵列的摊余成本。其他List
实现将具有不同的特征——集合框架的所有成员在javadocs中详细说明了它们的时间复杂性:)
// {Andi : [20,100]}