注意: 这里只有构造函数的第三个参数为true时才会引发问题.
参考:
http://www.codeguru.com/forum/printthread.php?t=446498
import java.util.LinkedHashMap;
import java.util.Map;
/**
* LinkHashMap的 LRU顺序. 即构造函数的第三个参数
* User: wenzhihong
*/
public class LinkHashMapTest {
public static void main(String[] args) {
//第三个参数为 true , 意味着 按访问顺序构造最近最少访问的内部链表.
//这样在内部的链表中, 最近最少访问的排在最前面, 最多访问的排在后面. 迭代整个值是按链表从后往前的方式
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(16, 0.75f, true);
//初使化值
for(int i=(int)'a', k=1; i<=(int)'z'; i++, k++){
map.put(String.valueOf(k), String.valueOf((char)i));
}
//打印出迭代的顺序
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
//随机get值
int r = (int) (Math.random() * 26);
for(int i=0; i<r; i++){
int key = (int) (Math.random() * 26);
System.out.println("vist key: " + key);
map.get(String.valueOf(String.valueOf(key)));
}
//打印出map的迭代顺序, 可以看到跟第一次出来的不同, 因为我们用的是按访问顺序来构建内部链表
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
//取key的set, 然后进行迭代.
//注意: 如果使用了 按访问顺序构建最近最少访问列表, 也就是LinkHashMap的第三个参数设置为true.
//则不能使用用得到的keyset的方式, 然后get去访问map.
//因为用这种方式, 第一次get()会修改keyset的顺序, 所以在第二次进行迭代时, 结构顺序发生了变化, 所以会报ConcurrentModificationException
for (String k : map.keySet()) {
System.out.println(k + " " + map.get(k));
}
}
}
分享到:
相关推荐
在“清华JAVA第三版课件”中,初学者将深入学习以下Java编程的基础知识: 1. **语法基础**:包括变量、数据类型(如整型、浮点型、字符型、布尔型)、运算符、流程控制(如if语句、for循环、while循环)、数组等。 ...
在Java中实现LRU缓存,我们可以借助一些内置工具或第三方库,如Java 8的`ConcurrentHashMap`结合`LinkedHashMap`,或者Google的Guava库中的`Cache`类。这篇博客文章可能讨论了如何使用这些工具来构建一个LRU缓存系统...
3. 动态规划:通过构建子问题的最优解来找到整个问题的最优解,常用于背包问题、最长公共子序列和最短路径问题等。 4. 贪心算法:通过局部最优解逐步逼近全局最优解,适合解决资源分配和调度问题。 5. 回溯法:...
- `super(maxsize * 4 / 3 + 1, 0.75f, true)`:构造函数参数,第一个参数是初始容量,这里是最大容量的1.33倍,第二个参数是负载因子(0.75),第三个参数表示按访问顺序排序。 3. `removeEldestEntry`方法: - ...
3. HTTP客户端:使用HttpURLConnection或第三方库(如Apache HttpClient)进行HTTP请求。 八、设计模式 23种设计模式,如工厂模式、单例模式、建造者模式、适配器模式、装饰器模式、代理模式等,理解它们的适用场景...
- 缺点:依赖第三方库,可能影响性能。 #### 20. 访问修饰符的应用设计作用 - **public**:公开,对所有类可见。 - **private**:私有,仅当前类可见。 - **protected**:受保护,对同一包内的类及子类可见。 - **...
第三天:面向对象编程基础 1. 了解类与对象的概念,理解封装、继承和多态三大特性。 2. 创建和实例化对象,掌握构造函数的使用。 3. 学习类的成员变量和方法,包括静态与非静态的区别。 4. 实践抽象类和接口,理解...
5. 数据库三范式:第一范式(1NF)、第二范式(2NF)和第三范式(3NF),是数据库设计时遵循的规范,确保数据无冗余、无依赖。 6. 存储引擎:MyISAM和InnoDB是MySQL中的两种主要存储引擎,MyISAM适合读取密集型应用...
第3章 表达式——描述行为的元素 22 3.1 不简单的算术运算符 22 3.1.1 “+”运算符 22 3.1.2 “-”运算符 24 3.1.3 “*”运算符 25 3.1.4 “/”运算符 25 3.1.5 “%”运算符 26 3.2 自增自减运算 27...
Commons-io和Hutool等第三方库提供了更多高级的文件和流操作功能。 第五章涉及多线程和Java并发包(JUC)。多线程使程序能同时执行多个任务,可以通过继承Thread、实现Runnable或使用ExecutorService来创建。...
5. **集合框架高级**:包括List、Set、Map接口的高级实现,如TreeSet、TreeMap、LinkedHashMap等,以及并发集合(如ConcurrentHashMap)和Stream API。 6. **网络编程**:涉及Socket编程、多路复用(如NIO、...
第三代计算机使用集成电路;第四代计算机使用大规模集成电路。 - 晶体管作为电子器件标志着计算机技术的重大进步,因此晶体管计算机属于第二代计算机。 ### 25. Java 中的 DatagramSocket 类 - **知识点概述**:`...
虽然Java标准库中没有直接的图数据结构,但可以通过自定义数据结构或使用第三方库实现。 7. **哈希表**:通过散列函数快速查找和存储元素,提供了常数时间的插入和查找操作。Java的HashMap和LinkedHashMap是常见的...
3. **平台独立性:** Java程序可以编写一次并在任何平台上运行,这得益于Java虚拟机(JVM)的存在。 4. **安全性:** Java提供了多种安全特性来保护系统免受恶意攻击,例如沙箱模型。 5. **健壮性:** 强类型系统、异常...
尚硅谷推出的《Java面试题第一季》是一系列针对企业面试高频技术问题的视频教程。该课程覆盖了JavaSE、SSM(Spring、SpringMVC、MyBatis)、框架高级应用以及电商项目的相关知识点。通过这些视频,学习者可以深入...
【Java_BootCamp】是一个专为初学者设计的Java编程训练营资料,旨在帮助学习者快速掌握Java编程语言的核心概念和技术。在这个训练营中,你可以深入理解Java的基础知识,包括语法、面向对象编程、异常处理、集合框架...
在本单元的学习中,我们将深入探讨Java编程语言的相关知识点,这个单元主要涵盖了Java的基础概念、语法特性以及在实际开发中的应用。Java作为一种广泛使用的面向对象的编程语言,其强大之处在于它的跨平台能力、丰富...