Java 如何将另一个元素作为列表插入树映射值

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

所以我还在学习Java映射,只是想知道是否可以将另一个元素作为列表插入到TreeMap值中?这是我的代码:

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]}