linkedhashmap获取第n个元素_java集合类之LinkedHashMap

LinkedHashMap是HashMap的一个有序版本,它维护了元素的插入顺序或访问顺序。在插入和访问元素时,通过钩子技术(多态)来维护内部的双向链表,实现有序性。当accessOrder为true时,访问或添加元素会将其移动到链表尾部,从而实现LRU缓存策略。初始化时,LinkedHashMap创建一个Header作为双向链表的头节点,put操作通过addBefore方法将新元素添加到链表尾。removeEldestEntry方法允许在添加新条目时实现LRU淘汰策略。
摘要由CSDN通过智能技术生成
  1. LinkedHashMap和HashMap区别
  2. LinkedHashMap底层实现
  3. 利用LinkedHashMap实现LRU缓存

1. LinkedHashMap和HashMap区别
大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。HashMap的这一缺点往往会带来困扰,因为有些场景,我们期待一个有序的Map.这就是我们的LinkedHashMap,看个小Demo:

public static void main(String[] args) {
    Map<String, String> map = new LinkedHashMap<String, String>();
    map.put("apple", "苹果");
    map.put("watermelon", "西瓜");
    map.put("banana", "香蕉");
    map.put("peach", "桃子");

    Iterator iter = map.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry entry = (Map.Entry) iter.next();
        System.out.println(entry.getKey() + "=" + entry.getValue());
    }
}


输出为:
apple=苹果
watermelon=西瓜
banana=香蕉
peach=桃子

可以看到,在使用上,LinkedHashMap和HashMap的区别就是LinkedHashMap是有序的。 上面这个例子是根据插入顺序排序,此外,LinkedHashMap还有一个参数决定是否在此基础上再根据访问顺序(get,put)排序,记住,是在插入顺序的基础上再排序,后面看了源码就知道为什么了。看下例子:

public static void main(String[] args) {
    Map<String, String> map = new LinkedHashMap<String, String>(16,0.75f,true);
    map.put("apple", "苹果");
    map.put("watermelon", "西瓜");
    map.put("banana", "香蕉");
    map.put("peach", "桃子");

    map.get("banana");
    map.get("apple");

    Iterator iter = map.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry entry = (Map.Entry) iter.next();
        System.out.println(entry.getKey() + "=" + entry.getValue());
    }
}

输出为:
watermelon=西瓜
peach=桃子
banana=香蕉
apple=苹果

可以看到香蕉和苹果在原来排序的基础上又排后了。

2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值