Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap
的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注
意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了
true,则调用时会将键 k 重新插入到映射 m 中。)
此实现可以让客户避免未指定的、由 HashMap(及 Hashtable)所提供的通常为杂乱无章的排序工作,同时无需增加与 TreeMap 相关的成本。使用它可以生成一个与原来顺序相同的映射副本,而与原映射的实现无关:
修改过的测试代码:
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class Lession14LinkedHashMap {
public static void main(String[] args) {
// 分别使用2个类,进行相同的数据测试
// 可以看到,HashMap的顺序是不可预测的
// 而LinkedHashMap的顺序严格按照插入顺序
// 102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
testMap(new HashMap());
// 98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
testMap(new LinkedHashMap());
// 删除数据后,LinkedHashMap会将数据放到末尾最后的位置
// 而HashMap可能会使用前一个空缺的位置
}
public static void testMap(Map map) {
for (int i = 98; i <= 102; i++) {
map.put(i, i);
}
showMap(map);
// 尝试重复插入数据
System.out.println("----------- 尝试重复插入数据 --------------");
map.put(100, 100);
showMap(map);
showMapValues(map);
// 删除数据,并再次插入
System.out.println("----------- 删除数据,并再次插入 --------------");
map.remove(100);
map.put(100, 100);
showMap(map);
showMapValues(map);
// 删除数据
System.out.println("----------- 删除数据 --------------");
map.remove(100);
showMap(map);
showMapValues(map);
// 调用containsKey
System.out.println("----------- 调用containsKey --------------");
map.containsKey(98);
showMap(map);
showMapValues(map);
}
private static void showMapValues(Map map) {
System.out.println("showMapValues:"+map.values());
}
public static void showMap(Map map) {
// 迭代Key的操作
Iterator it = map.keySet().iterator();
Object key;
while (it.hasNext()) {
key = it.next();
System.out.print(key + "=>" + map.get(key) + "; ");
}
System.out.println();
}
}
来源:http://blog.csdn.net/java2000_net/archive/2009/01/09/3741565.aspx
分享到:
相关推荐
HashMap和LinkedHashMap 描述 该项目提供了可在Node.js和浏览器上运行的HashMap和LinkedHashMap类。 它们都是像一样的简化实现 ... 值得进行基准测试,以查看Map在这些情况下是否对您更好。 安装 使用 :
StringToHashMap:根据一组规则将字符串转换为hashmap。 快速创建。 添加了单元测试和UI测试
ConcurrentExpiringLinkedHashMap 多线程LinkedHashMap的Java实现,其元素在可单独定制的生存时间内到期。 非常适合缓存具有独特(易哈希)签名的元素。 基于来自java.net的InetAddresses的缓存进行功能测试。
算法关于算法,我使用LinkedHashMap来存储读取的字符,因为它保证了项目的添加顺序,即添加的第一个是读取的第一个字符,因此,在读取完整流之后,只需找到第一个字符即可在地图上,只有一个事件出现的read保证是流...
简单测试 对于骆驼用户论坛 - 简单(?!)行为......! populateMap bean 创建一个映射如下: LinkedHashMap<String> map = new LinkedHashMap(); map.put("VALUE_ONE", "'值'"); map.put("VALUE_TWO", "'东西...
执行完以上代码后,result列表中的每个Map都是java.util.LinkedHashMap实例,每个Map的都由下面的这三个Entry组成: key=price, value=book.getPrice() key=name, value=book.getName() key=...
有关使用此代码的示例,请参阅各种测试。 ###Acceptor API 使用 final int port = 5555 ; FIXAcceptor server = FIXAcceptor . Builder(port) .withDebugStatus( true ) . build(); server . startListening(); ...
jackson_samples JSON 对象数据绑定的更高级 Jackson 示例 典型的 JSON 之类的 { 'abc': 'string', ...在 Java 中,我们将其建模为 LinkedHashMap。 JsonExampleTest 显示测试用例。 运行测试: mvn test
根据项目名称就知道它的意思了,框架、实例、测试功能! AndroidQuery 一个轻量级的库,用于实现 Android 上的异步任务和操作 UI 元素。 项目含有26 个文件源文件,分析如下: auth含有: public class WebDialog ...
JUnit,测试驱动开发 字符串,字符串生成器 内部类,TreeNode 图节点表示 Java 8 特性 队列、堆栈、双端队列 树结构,树集 堆,优先队列 Guava(谷歌核心 Java 库 链表,ArrayDeque 哈希,哈希表 LRUCache 缓存,...
使用Yahoo Finance API 测试文件: import java.io.IOException;import org.json.simple.JSONObject;import java.util.*;public class StockTest {public static void main(String[] args) throws java.net....
14.7.4 LinkedHashMap类的使用 304 14.7.5 SortedMap接口与TreeMap类 305 14.7.6 映射的遍历 308 14.8 栈在Java中的实现 309 14.8.1 Stack类的使用 309 14.8.2 Deque接口的使用 310 14.8.3 利用栈计算...