Java - LinkedHashMap(有序 map)获取第一个元素和最后一个元素
发布日期:2021-06-30 23:28:58 浏览次数:2 分类:技术文章

本文共 2481 字,大约阅读时间需要 8 分钟。

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

public 
Entry
getHead(LinkedHashMap
map) { return map.entrySet().iterator().next();}

 

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

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

 

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

public 
Entry
getTailByReflection(LinkedHashMap
map) throws NoSuchFieldException, IllegalAccessException { Field tail = map.getClass().getDeclaredField("tail"); tail.setAccessible(true); return (Entry
) 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
map = new LinkedHashMap<>(); private String letters[] = { "a", "b", "c", "d", "e" }; @Before public void init() { for (int i = 0; i < letters.length; i++) { map.put(letters[i], i + 1); } } @Test public void testGetHead() { assertEquals(getHead(map).getKey(), "a"); assertEquals(getHead(map).getValue(), Integer.valueOf(1)); } @Test public void testGetTail() { assertEquals(getTail(map).getKey(), "e"); assertEquals(getTail(map).getValue(), Integer.valueOf(5)); } @Test public void testGetTailByReflection() throws NoSuchFieldException, IllegalAccessException { assertEquals(getTailByReflection(map).getKey(), "e"); assertEquals(getTailByReflection(map).getValue(), Integer.valueOf(5)); } public
Entry
getHead(LinkedHashMap
map) { return map.entrySet().iterator().next(); } public
Entry
getTail(LinkedHashMap
map) { Iterator
> iterator = map.entrySet().iterator(); Entry
tail = null; while (iterator.hasNext()) { tail = iterator.next(); } return tail; } @SuppressWarnings("unchecked") public
Entry
getTailByReflection(LinkedHashMap
map) throws NoSuchFieldException, IllegalAccessException { Field tail = map.getClass().getDeclaredField("tail"); tail.setAccessible(true); return (Entry
) tail.get(map); }}

转载地址:https://lux-sun.blog.csdn.net/article/details/107628507 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Win系统 - 怎么在电脑上玩抖音,抖音电脑版怎么玩?
下一篇:程序人生 - 程序员要学点儿理财知识,而不仅仅是代码技巧

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月20日 12时49分32秒