`

LinkedHashMap测试

    博客分类:
  • java
阅读更多

 

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:提供快速的HashMap,LinkedHashMap和高阶函数到任何可迭代的函数,例如Array,Map或Set。 经过测试和基准测试的问题和PR

    HashMap和LinkedHashMap 描述 该项目提供了可在Node.js和浏览器上运行的HashMap和LinkedHashMap类。 它们都是像一样的简化实现 ... 值得进行基准测试,以查看Map在这些情况下是否对您更好。 安装 使用 :

    LonelyInteger-LinkedHashMap

    标题“LonelyInteger-LinkedHashMap”暗示我们正在讨论一个与Java编程相关的项目,特别是涉及到`LinkedHashMap`数据结构。`LinkedHashMap`是Java集合框架中`Map`接口的一个实现,它保留了插入元素的顺序或者按照访问...

    java集合类类性能测试源代码

    如果关心元素顺序,可以使用LinkedHashMap,它维护了插入顺序或访问顺序。 3. **TreeSet与TreeMap** - TreeSet是基于红黑树实现的有序集合,插入、查找和删除操作的时间复杂度为O(logn),并且元素按自然顺序或...

    JAVASE综合测试题及答案

    JAVASE 综合测试题及答案 本资源为 JAVASE 基础测试题的汇总,涵盖了 Java 语言的多个方面,包括继承、多态、垃圾回收机制、数组和集合、Map 和 List 等。该资源共 10 题判断题和 6 题选择题,题目涵盖了 Java 语言...

    Java中常用Map测试示例

    `Map`接口还有其他实现,如`TreeMap`,它基于红黑树,提供有序的键值对,`LinkedHashMap`保持插入顺序或访问顺序,`ConcurrentHashMap`则适用于多线程环境下的并发操作。 在实际应用中,选择哪种`Map`实现取决于...

    StringToHashMap:根据一组规则将字符串转换为hashmap。 快速创建。 添加了单元测试和UI测试

    这个项目特别强调快速创建和全面的测试,包括单元测试和用户界面(UI)测试,以确保代码的稳定性和可靠性。 首先,让我们深入了解一下Swift中的字符串解析。在Swift中,字符串是不可变的,这意味着一旦创建,就不能...

    java面试题测试代码.zip

    - List(ArrayList、LinkedList)、Set(HashSet、LinkedHashSet、TreeSet)和Map(HashMap、LinkedHashMap、TreeMap)接口及其实现类的特性和使用场景。 - 泛型:用于限制容器中存储的数据类型,提高代码安全性和...

    初中级JAVA测试题(2).zip

    12. **集合框架高级**:深入理解List、Set、Map接口及其实现类的特性,如TreeMap、LinkedHashMap等。 13. **IO/NIO/BIO**:对比理解传统的IO模型与NIO(非阻塞IO)的优势,了解通道(Channel)和缓冲区(Buffer)的...

    LRU.zip_zip

    在这个名为"LRU.zip"的压缩包中,包含了三个文件,分别是Algoritma.doc、LRU.java和TestLRU.java,它们分别对应LRU算法的文档解释、Java实现和测试代码。 首先,Algoritma.doc可能详细介绍了LRU算法的工作原理。在...

    LRU.rar_LRU_LRU ja

    5. **www.pudn.com.txt**:这个文件可能是程序的说明文档或测试用例。它可能包含了LRU缓存的具体使用示例,或者对算法的解释。 通过分析`LRU.java`,我们可以学习如何在实际项目中应用LRU缓存策略,理解如何利用`...

    ConcurrentExpiringLinkedHashMap:多线程LinkedHashMap的Java实现,其元素在可单独定制的生存时间内到期。 创建具有唯一(可良好哈希)签名的元素缓存的理想选择

    ConcurrentExpiringLinkedHashMap 多线程LinkedHashMap的Java实现,其元素在可单独定制的生存时间内到期。 非常适合缓存具有独特(易哈希)签名的元素。 基于来自java.net的InetAddresses的缓存进行功能测试。

    java题库测试

    - Map接口:HashMap、TreeMap、LinkedHashMap的实现原理和使用场景。 - Collections类:常用方法如sort、binarySearch、copy等。 3. **Java多线程** - 线程创建:Thread类和Runnable接口。 - 线程同步:...

    jmeter 实现oauth1.0授权认证

    - 创建`LinkedHashMap`来存储OAuth参数。 - 将所有必要的OAuth参数添加到map中,并按字母顺序排序。 接下来,创建另一个map(getSignOauthMap),用于构建签名的参数,同样按照OAuth规范进行排序。 最后,...

    浦发银行笔试题目答案大全

    LinkedHashMap保持了插入顺序或者访问顺序,这对于某些需要有序显示的场景非常有用。 在浦发银行的笔试中,可能涉及到的Java Map知识点包括: 1. Map接口的基本操作:put()、get()、remove()、size()、clear()等。...

    JDBC学习笔记.docx

    进行单元测试时,可以利用JUnit创建测试类,选择要测试的方法并进行断言,确保代码的正确性。在Eclipse中,可以通过新建JUnit Test Case来自动生成测试框架。 总结来说,JDBC是Java与数据库交互的核心,理解并熟练...

    集合效率不完全皮恩车

    由于没有提供具体测试数据,无法直接评估如HashMap、TreeMap、LinkedHashMap等的性能,但通常HashMap提供快速的查找,TreeMap保证排序,而LinkedHashMap保持插入或访问顺序。 总结来说,选择哪种集合类取决于具体...

    14_尚硅谷_书城项目_第六、七阶段_王振国 - 课堂笔记1

    - **Cart类**:表示整个购物车,内部使用一个`LinkedHashMap`来存储商品项,键为商品ID,值为CartItem对象。这确保了商品的添加顺序被保留,对于展示购物车内容很有帮助。 3. **购物车方法详解** - `addItem...

    精通eclipse集合

    在集合的优化方面,书籍会讨论如何有效地使用不同的集合类型来适应特定场景,比如在内存有限的情况下选择LinkedHashMap而不是HashMap,或者在需要避免重复元素时选择Set而不是List。此外,还会介绍Eclipse的性能分析...

    LRU.rar_LRU java

    - 测试类`LRUTest`:可能包含了测试用例,用于验证`LRU`类的功能,如插入数据、获取数据、查看缓存状态等。 在实际应用中,LRU算法广泛应用于数据库缓存、操作系统的页面管理等领域,通过优化内存使用,提高系统...

Global site tag (gtag.js) - Google Analytics