- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
import java.util.*;
public class Test {
public static void main(String[] args) {
Map<String,String> map = new TreeMap<String,String>();
map.put("10", "America");
map.put("1", "Australia");
map.put("2", "India");
map.put("11", "China");
System.out.println(map);
}
}
当运行上面的代码片段时,在控制台中我得到的输出是:
{1=澳大利亚,10=美国,11=中国,2=印度}
但我希望输出为
{1=澳大利亚,2=印度,10=美国,11=中国}
但是当在上面的 main() 里面改变下面提到的逻辑时
Map<String,String> map = new TreeMap<String,String>();
map.put("US", "America");
map.put("AUS", "Australia");
map.put("IN", "India");
map.put("CH", "China");
System.out.println(map);
我得到了想要的输出
({AUS=澳大利亚,CH=中国,IN=印度,US=美国})
根据我的理解,TreeMap 的 entrySet() 方法返回 map 中包含的映射的 Collection View 。该集合的迭代器以升序键顺序返回映射。那么为什么在第一种情况下会发生这种情况?
非常感谢任何建议。
最佳答案
因为 "10"
按字典顺序小于 "2"
。
这里有一个提示:
Map<Integer,String> map = new TreeMap<Integer,String>();
map.put(10, "America");
map.put(1, "Australia");
map.put(2, "India");
map.put(11, "China");
System.out.println(map);
// {1=Australia, 2=India, 10=America, 11=China}
这是另一个提示:String#compareTo(String)
对比Integer#compareTo(Integer)
.
Can you please explain what actually do you mean by "'10' is lexicographically smaller than '2'".
首先,阅读我链接的 JavaDoc,尤其是第一个链接。
现在让我们回顾一些简单的字符串比较:
将其扩展到数字字符应该不会太费力:
单个字符的顺序,例如a
、b
、z
、0
、 1
和 9
被称为他们的 lexicographical order .简而言之,每个字符都有一个数字表示,您不会觉得非常惊讶。
现在让我们看一些稍微复杂的字符串比较:
我们是如何确定第二种情况的?逐个字符。
1. "a" is the same character as "a", so we need to keep going
2. "a" comes before "b", so we're done.
再举一个例子:“ba”出现在“c”之前,因为“b”出现在“c”之前。
让我们对包含数字字符的字符串做同样的事情:
“2”是否在“10”之前?我们逐个字符比较:
关于java - TreeMap 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6280835/
我读过很多关于红黑树的文章,其中操作需要 O(log n) 时间。我不太清楚它是如何工作的,以及与二分搜索相比, TreeMap 实际上如何使用红黑树算法来平衡树树。 引用链接 https://www
我正在尝试实例化 TreeMap使用Comparator应该能够访问所述 TreeMap ,即它将用于的那个(我猜“将”一定正是问题所在......): final Map map = new Tre
这很好用: TreeMap x_probs_org = new TreeMap(); 但是这个: TreeMap > x_probs = new >(); 导致以下错误: error: expec
我正在尝试模拟生产系统。为了简要解释我打算做什么,我将创建一个面板,其中有一些表来保存值(用于几个工作站和作业类型的属性(见下图))。当我运行它时,这些值应该被存储以供进一步处理。 在上一个问题中,有
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
大家好,我是 highcharts 的新手。因为在 TreeMap 中只显示系列名称而不显示值。工具提示中显示的名称和值。但我想在 TreeMap 中显示名称和值。请知道的人回复我。 var seri
Java 8 的新手,我无法弄清楚这一点。我有两张类型为 TreeMap 的 map , 一个叫做 patternMap和另一个answerMap . patternMap被硬编码以寻找键值对的特定模
我对 map 还很陌生,而且我很困惑。我有以下 TreeMap : TreeMap> routes = new TreeMap>(); 例如,我的 TreeMap 填充如下: {A={B=10,
这对我来说似乎太棘手,无法正确执行此操作。 我有一个TreeMap ,我正在获取其中的子图: public static reqObj assignObj(reqObj vArg, i
我需要你的帮助,我不明白发生了什么? 我试图在两个 Activity 之间发送一个 TreeMap,代码是这样的: class One extends Activity{ public void s
我们在一个方法中定义了一个新的 TreeMap 并将其传递给另一个方法: TreeMap aTreeMap = new TreeMap(); //call another method to doSo
我认为 C++ std::map.lower_bound 等于 java 的 TreeMap.higherEntry。C++ std::map 中 java 的 TreeMap.lowerEntry
作为最佳实践, float 的集合类型实例不应超过一个。例如,Nil 是 scala 库中的一个 case 对象。 但是, TreeMap 和 TreeSet 在每次 empty() 调用时都会创建一
我有更新点燃缓存记录的代码逻辑, 缓存定义为: IgniteCache> txInfoCache; 键是缓存类型字符串,对于值我使用TreeMap来保持记录有序(我需要对数据进行排序),但是更新所用的
我有一个自己的扩展 TreeMap,名为 MyTreeMap,它用于根据作为参数 MyTreeMap 传递的 DAO 动态创建 TreeMap。还,Hazelcast 提供了自己的 TreeMap,我
我想以树的形式可视化马赛克图。例如 mosaicplot(~ Sex + Age + Survived, data = Titanic, color = TRUE) 现在我想要的是以树的形式表示它,其
我正在尝试使用 R 包树状图创建一个树状图,该树状图类似于包中示例中的树状图。 library(treemap) data(GNI2010) treemap(GNI2010, index=c(
如何捕获最后一个节点的点击事件? 我按照本教程(http://bl.ocks.org/ganeshv/6a8e9ada3ab7f2d88022)制作了树状图。在我的目的中,我想让最后一个节点可点击,然
我有一个 2 级的 highchart TreeMap ,用于显示股票市场的价格,每个部分的值(value)几乎每秒钟都在变化,我想更新每个部分的值,但正如我所见在 highchart 中,我们可以通
我想存储元素的 ID 及其对应的坐标。为此,我使用了一个 TreeMap,其中 Coordinates 是一个包含 int x 和 int y 的类。现在,为了将数据插入 map ,我可以这样写: t
我是一名优秀的程序员,十分优秀!