获取LinkedHashMap中的头部元素(最早添加的元素):时间复杂度O(1)

public <K, V> Entry<K, V> getHead(LinkedHashMap<K, V> map) {return map.entrySet().iterator().next();
}

获取LinkedHashMap中的末尾元素(最近添加的元素):时间复杂度O(n)

public <K, V> Entry<K, V> getTail(LinkedHashMap<K, V> map) {Iterator<Entry<K, V>> iterator = map.entrySet().iterator();Entry<K, V> tail = null;while (iterator.hasNext()) {tail = iterator.next();}return tail;
}

通过反射获取LinkedHashMap中的末尾元素:时间复杂度O(1),访问tail属性

public <K, V> Entry<K, V> getTailByReflection(LinkedHashMap<K, V> map)throws NoSuchFieldException, IllegalAccessException {Field tail = map.getClass().getDeclaredField("tail");tail.setAccessible(true);return (Entry<K, V>) tail.get(map);
}

测试代码

import static org.junit.Assert.assertEquals;
import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import org.junit.Before;
import org.junit.Test;public class TestLinkedHashMap {private LinkedHashMap<String, Integer> map = new LinkedHashMap<>();private String letters[] = { "a", "b", "c", "d", "e" };@Beforepublic void init() {for (int i = 0; i < letters.length; i++) {map.put(letters[i], i + 1);}}@Testpublic void testGetHead() {assertEquals(getHead(map).getKey(), "a");assertEquals(getHead(map).getValue(), Integer.valueOf(1));}@Testpublic void testGetTail() {assertEquals(getTail(map).getKey(), "e");assertEquals(getTail(map).getValue(), Integer.valueOf(5));}@Testpublic void testGetTailByReflection() throws NoSuchFieldException, IllegalAccessException {assertEquals(getTailByReflection(map).getKey(), "e");assertEquals(getTailByReflection(map).getValue(), Integer.valueOf(5));}public <K, V> Entry<K, V> getHead(LinkedHashMap<K, V> map) {return map.entrySet().iterator().next();}public <K, V> Entry<K, V> getTail(LinkedHashMap<K, V> map) {Iterator<Entry<K, V>> iterator = map.entrySet().iterator();Entry<K, V> tail = null;while (iterator.hasNext()) {tail = iterator.next();}return tail;}@SuppressWarnings("unchecked")public <K, V> Entry<K, V> getTailByReflection(LinkedHashMap<K, V> map)throws NoSuchFieldException, IllegalAccessException {Field tail = map.getClass().getDeclaredField("tail");tail.setAccessible(true);return (Entry<K, V>) tail.get(map);}
}

Java - LinkedHashMap(有序 map)获取第一个元素和最后一个元素相关推荐

  1. jq取第一个子元素为select_jquery如何获取第一个或最后一个子元素?

    jquery如何获取第一个或最后一个子元素? 通过children方法,children("input:first-child") $(this).children("i ...

  2. jquery如何获取第一个或最后一个子元素?

    jquery如何获取第一个或最后一个子元素?通过children方法,children("input:first-child")$(this).children("inp ...

  3. java怎么指定父窗口大小_[Java教程]jQuery如何获取div距离窗口顶部或者父元素顶部的距离...

    [Java教程]jQuery如何获取div距离窗口顶部或者父元素顶部的距离 0 2016-01-03 11:00:19 jQuery如何获取div距离窗口顶部或者父元素顶部的距离: 在实际应用或许会需 ...

  4. php去除数组中的第一个元素,php如何删除数组的第一个元素和最后一个元素

    对于一个php数组,该如何删除该数组的第一个元素或者最后一个元素呢?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作. ( ...

  5. WPF 元素相对另外一个元素的 相对位置

    原文:WPF 元素相对另外一个元素的 相对位置 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/740 ...

  6. javaScript取得当前元素的下一个元素

    如何取得当前元素的下一个元素呢? 例如,这有两个div <div id="wrap1" class="wrap">这是一个div</div&g ...

  7. javascript判断一个元素是另外一个元素的子元素

    javascript判断一个元素是另外一个元素的子元素用途有很多,最常用的就是当点击页面的空白处去执行某些操作,比如弹出层等. function isParent (obj,parentObj){ w ...

  8. kotlin List删除一个元素,添加一个元素

    kotlin List移除一个元素,添加一个元素时没有 remove和add函数只有 -= 和 += 在kotlin ArrayList中才有remove和add函数 没有 -= 和 += kotli ...

  9. 一个元素位于另一个元素之上,点击上面的元素引发下面元素事件操作

    一个元素位于另一个元素之上,点击上面的元素引发下面元素事件操作 <body><!-- 此布局为: 上面内容盒子覆盖在了上传文本区域之上--><!-- 想要点击'上面盒子内 ...

  10. 删除列表元素中最后一个元素

    删除列表元素中最后一个元素 清楚明了 壹 <title></title><script src="js/jquery.js"></scri ...

最新文章

  1. Lottie开源动画库
  2. Scala 语言转义字符
  3. SharePoint Designer 2010创建限制筛选器
  4. 铜陵信息化建设和智慧城市发展成果惠及百姓
  5. mysql slave 线程 简书_【MySQL】你真的读懂了slave status吗?
  6. 《此生未完成》痛句摘录(2)
  7. 茅粉又疯狂!“蒂芙尼蓝”茅台炒至8500!
  8. 关于Web端-UI自动化测试
  9. java for循环 等待_java-等待在循环内按下键
  10. 12306再曝漏洞,一张身份证可买两张相同火车票
  11. 【读书笔记《Android游戏编程之从零开始》】14.游戏开发基础(Bitmap 位图的渲染与操作)
  12. ogg格式怎样才能转换成MP3格式
  13. 96K的3d FPS游戏-毁灭杀手(kkrieger)
  14. session fixation漏洞简述
  15. 用友漏洞php,Phpwind GET型CSRF任意代码执行漏洞公开
  16. 经验贴: 如何选购相机, 电脑, 手机, 电脑配件?
  17. OPC DA与OPC UA的区别
  18. Python---元祖、循环
  19. memcpy内存拷贝和=直接赋值有什么区别
  20. CSS_后端工程师必备知识-从入门到劝退详解-呕心沥血撰写(滑稽)

热门文章

  1. 计算机打字键盘亮怎么设置,电脑键盘灯亮无法打字怎么解决?
  2. CodeForces 379C -- D - New Year Ratings Change
  3. qtxlsx读写 excel
  4. new Date()时间不是当前时间问题的解决方法
  5. LeetCode学习资料和刷题顺序
  6. 云计算会不会被边缘计算取而代之
  7. C语言编程入门——综合练习(一)
  8. PADS软件中,鼠标中键无法放大缩小BUG怎么办?解决办法在这里
  9. Ubuntu中禁止与使能鼠标中键的复制功能(vscode出现莫名其妙的多余的代码段)
  10. 高等数学:第一章 函数与极限(6)极限存在准则、两个重要极限