`
tianlihu
  • 浏览: 311106 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

LinkedHashMap 用法

阅读更多
近日用到了LinkedHashMap。用此Map的意图在于此Map的底层实现是HashMap,所以在查询对象时,速度足够快。但是放入普通的HashMap的顺序和取出所有的key或元素的顺序是不同的。JDK很人性化提供了一个LinkedHashMap的实现。

初看这个类的名字LinkedHashMap,貌似是用ListArrayList之类的链表来实现的,其实不是的,它是基于HashMap来做的,真正的存储单元还是用数组来实现的。不过它做了一下手脚,它的每一个实体,就是LinkedHashMap.Entry的实现是用了链表形式,实体虽然是以Hash的顺序存放在Map的数组table里面,但是实体之间却用链表的形式保持了存入的先后关系。

有精力的人可以看一下LinkedHashMap的实现。下面看一下LinkedHashMap的用法:

1. 保持放入元素先后的顺序不变化:
import java.util.LinkedHashMap;
import java.util.Map;

public class TestLinkedMap {

	public static void main(String[] args) {
		Map<String, String> map = new LinkedHashMap<String, String>();
		for (int i = 0; i < 10; i++) {
			map.put("key" + i, "value" + i);
		}
		map.get("key" + 5);
		for (String value : map.keySet()) {
			System.out.println(value);
		}
	}
}

结果是:
key0
key1
key2
key3
key4
key5
key6
key7
key8
key9


2. 查询时,把最新查出来的元素放在末位(很奇怪,为什么不是把查询出来的元素放在首位)
import java.util.LinkedHashMap;
import java.util.Map;

public class TestLinkedMap {

	public static void main(String[] args) {
		Map<String, String> map = new LinkedHashMap<String, String>(16, 0.75f, true);
		for (int i = 0; i < 10; i++) {
			map.put("key" + i, "value" + i);
		}
		map.get("key" + 3);
		for (String value : map.keySet()) {
			System.out.println(value);
		}
	}
}

结果是:
key0
key1
key2
key4
key5
key6
key7
key8
key9
key3



分享到:
评论
2 楼 kjstart 2016-03-17  
因为当LRU用你就可以从头删了
1 楼 wkcgy 2012-03-19  
因为它使用了LRU算法

相关推荐

    RiteLinked - Rust 中的 LinkedHashMap 和 LinkedHashSet

    (当然也可以用hashbrown )用法将ritelinked添加到Cargo.toml :ritelinked =" x.y.z"写一些这样的代码:letmut lru_cache= LinkedHashMap::new ();let key="key" .to_owned ();let _cached_val= lru_cache .raw_...

    set:使用LinkedHashMap在Go(Golang)中简单的Set数据结构实现

    Set是使用LinkedHashMap在Go(Golang)中简单的Set数据结构实现。 该库允许您获取一组int64或string而没有重复的项目。 用法 package main import ( "fmt" "github.com/StudioSol/set" ) func main () { ...

    ritelinked:LinkedHashMap和LinkedHashSet

    用法 将ritelinked添加到Cargo.toml : ritelinked = " x.y.z " 编写如下代码: let mut lru_cache = LinkedHashMap :: new (); let key = "key" . to_owned (); let _cached_val = lru_cache .

    java中set、list和map的使用方法实例

    // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该对象的内部细节。 // 学习set对象容器的使用 // set容器中的对象不允许重复 // set容器接口的实现类有HashSet和 ...

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

    如果要在迭代时保证插入顺序,请使用LinkedHashMap 。 这些键是真正键入的且唯一的,这意味着1!==“ 1”。 明智地选择您的地图。 选择集合时,值得理解您要解决的问题。 少量条目的本将显着提高速度。 但是,...

    SimpleCacheWithSpringAop:基于SpringAOP,LinkedHashMap和Annotation的简单的Cache插件

    SimpleCacheWithSpringAop##SrpingAop需要配合Spring Aop使用,功能还比较单一,只是在获取数据的时候先进行缓存的查找,找不到的话,在方法内取得数据然后放入缓存。##Annotation利用Annotation判断是否进行缓存,...

    使用fasterxml.jackson反序列化json串

    如果直接使用类似JsonHelper.fromJson()方法反序列化json串到Java的List对象集合时,容易将List集合内的对象反序列化为LinkedHashMap(),此时使用对象的get方法获取属性的值时抛异常,因此使用fasterxml.jackson的以下...

    JSP存储过程过滤器用例

    1 用过滤器实现数据初始化 2 ...而采用LinkedHashMap即链表式的HashMap,是一种先进先出的存储数据方式,这里采用LinkedHashMap. 6 预编译SQL语句 7 带输入输出参数存储过程的使用 8 有关存储过程详细用法见...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...

    jxl生成excel的通用方法

    使用jxl生成excel的通用方法,参数List&lt;?&gt;数据,LinkedHashMap,String&gt;实体类属性名和中文列名的键值对

    Awake说明文档中遗漏的部分(复选框、主键超链用法)

    grid对象是一个LinkedHashMap,map中的key 是记录主键,迭代的时候可以将key负值给 link 或复选框 map中的value是一个Treemap,包含一行数据信息 ;"&gt; ...

    LRUCache的实现原理及利用python实现的方法

    LRUCache内部使用LinkedHashMap来存储key-value键值对,并将LinkedHashMap设置为访问顺序来体现LRU算法。 无论是对某个key的get,还是set都算做是对该key的一次使用。当set一个不存在的key,并且LRU Cache中key的...

    Java工具库BeanQuery.zip

    //使用 select、from、where、orderBy、desc和asc来组装一个Query,然后执行execute方法来获得结果。 List, Object&gt;&gt; result = select("price,name,mainAuthor.name as mainAuthorName") .from(bookCollection) ....

    清华妹子的Java仓库(进阶学习路线)

    JNA:演示了JNA的基本用法,使用Java调用C++代码。 博客目录 Java基础 Java基础学习(1)——引用 Java基础学习(2)——注解 Java基础学习(3)——泛型 Java基础学习(4)——动态代理 《Java多线程核心技术》读书笔记 ...

    Java 基础核心总结 +经典算法大全.rar

    null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流的分类 节点流和处理流 Java ...

    LruCache与图片的二次采样

    为了保证内存的使用始终维持在一个合理的范围...这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。

    javalruleetcode-java12-fundamentals-cache-implementations-workshop:LRU/

    java lru leetcode ...重写的removeEldestEntry方法备注: LinkedHashMap有两种迭代顺序:访问顺序或插入顺序 地图+双链表 最不常用 只不过是从缓存中删除最不常用的项目以将新数据放入缓存中 有时与最近最

    linked_hash_set-具有插入顺序的HashSet-Rust开发

    它实现为linked_hash_map :: LinkedHashMap,其中值是(),类似于从stdlib中的HashMap实现HashSet的方式。 与std HashSet的比较常规用法与传统的哈希集非常相似,但是此结构还保持插入顺序。 与HashSet相比,...

    java中list、set和map 的区别

    如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap. List的功能方法  实际上有两种List: 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速...

    android-query 开发包

    public class BitmapCache extends LinkedHashMap, Bitmap&gt; //图片缓冲 使用哈希管理 public class Common implements Comparator, Runnable, OnClickListener, OnLongClickListener, OnItemClickListener, ...

Global site tag (gtag.js) - Google Analytics