Java 如何使用整型索引从树状图访问项目?

Java 如何使用整型索引从树状图访问项目?,java,treemap,Java,Treemap,我有一个树映射,定义如下:privateTreeMap a_enclavents。我想处理TreeMap的每个Enclave,所以我想在它们上运行一个方法,这就是我的意思: for(int i = 0; i < a_enclavaments.size(); i++) modify(a_enclavaments.get(i)); 我不明白为什么。我读过JavaAPI,它说 get(Object key) Returns the value to which the spe

我有一个树映射,定义如下:private
TreeMap a_enclavents。我想处理TreeMap的每个Enclave,所以我想在它们上运行一个方法,这就是我的意思:

for(int i = 0; i < a_enclavaments.size(); i++)
    modify(a_enclavaments.get(i));
我不明白为什么。我读过JavaAPI,它说

get(Object key)
     Returns the value to which the specified key is mapped, or if this map contains no mapping for the key.
它不是应该先返回第一个,然后返回第二个,然后返回第三个。。。树上的厕所? 编辑:这可能是因为树映射上的第一个参数设置为字符串,并且必须是整数吗?

s根据键存储一个值。键用于定义值在
映射
数据结构中的位置(数组、链表、树等,具体取决于
映射
的实现)。知道了这一点,
Map
就不能使用
index
概念,只能使用键

在本例中,您将
字符串
值设置为键,但尝试使用
整数
检索数据,异常非常明显:

java.lang.ClassCastException
java.lang.String
不能强制转换为
java.lang.Integer

一种可能的解决方案是将键改为
Integer
(如果可能)

如果您想要/需要迭代
映射上的值,您可以使用
for
循环:

如果使用后者,则无需更改
映射的键类型

存储基于键的值。键用于定义值在
映射
数据结构中的位置(数组、链表、树等,具体取决于
映射
的实现)。知道了这一点,
Map
就不能使用
index
概念,只能使用键

在本例中,您将
字符串
值设置为键,但尝试使用
整数
检索数据,异常非常明显:

java.lang.ClassCastException
java.lang.String
不能强制转换为
java.lang.Integer

一种可能的解决方案是将键改为
Integer
(如果可能)

如果您想要/需要迭代
映射上的值,您可以使用
for
循环:


如果使用后者,则无需更改
映射的键类型

您正试图根据映射的键类型访问不存在的条目(即,在传递
整数
时,您正试图查找
字符串
键)

在内部,映射试图将您传入的内容强制转换为您正在搜索的键,以匹配映射定义为接受的键。
字符串
无法强制转换为
整数
,因此出现异常

您似乎只想迭代地图的内容。这可以通过以下方法实现:

for(Map.Entry:a_enclavement.entrySet()){
修改(entry.getValue());
}

A是地图的每个键-值对的表示形式,便于迭代。如果要对地图的所有键或所有值执行操作,则这将是您希望从地图中获取的对象(如,
A_enclament.entrySet()
).

根据映射的键类型,您试图访问一个不存在的条目(也就是说,当传入一个
整数时,您试图查找一个
字符串
键)

在内部,映射试图将您传入的内容强制转换为您正在搜索的键,以匹配映射定义为接受的键。
字符串
无法强制转换为
整数
,因此出现异常

您似乎只想迭代地图的内容。这可以通过以下方法实现:

for(Map.Entry:a_enclavement.entrySet()){
修改(entry.getValue());
}

A是地图的每个键-值对的表示形式,便于迭代。如果要对地图的所有键或所有值执行操作,则这将是您希望从地图中获取的对象(如,
A_enclavent.entrySet()
)。

为什么这样认为?请查看
modify()
接受整数而不是字符串的方法
TreeMap
是键值对。您的键是字符串,您正在传递一个int…TreeMap不是一个有序集合,因此您不需要索引来访问其中的值。问题是-如果您想迭代,为什么您的数据在
TreeMap
中并由
字符串
键入r它?为什么是
TreeMap
以及为什么是那些特定的键?如果你能正确地回答这个问题,你要么会得到一个不同的数据结构(一个排序的
列表
?),要么使用不同的键(例如
整数
,如果你的键是稀疏的),或者使用一个简单的for-each循环在映射上迭代。您为什么会这样认为?请查看
modify()
接受整数而不是字符串的方法
TreeMap
是键值对。您的键是字符串,您正在传递一个int…TreeMap不是一个有序集合,因此您不需要索引来访问其中的值。问题是-如果您想迭代,为什么您的数据在
TreeMap
中并由
字符串
键入r它?为什么是
TreeMap
以及为什么是那些特定的键?如果你能正确地回答这个问题,你要么会得到一个不同的数据结构(一个排序的
列表
?),要么使用不同的键(例如
整数
,如果你的键是稀疏的),或者使用一个简单的for each循环来迭代映射。这个家伙只是想迭代值。这是一个简单的任务,不是吗?或者他可能使用了一个错误的集合来实现他想要实现的目标。是的,这就是我所想的…所以看起来我要么将键更改为整数,要么使用ge
get(Object key)
     Returns the value to which the specified key is mapped, or if this map contains no mapping for the key.
for (Enclavament enclavement : a_enclavaments.values) {
    //do what you want/need
}
for(Map.Entry<String, Enclavement> entry : a_enclavement.entrySet()) {
    modify(entry.getValue());
}