【Java集合類】 LinkedHashMap(有序的map)獲取第一個元素和最後一個元素
獲取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" };
@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 <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)獲取第一個元素和最後一個元素
獲取LinkedHashMap中的頭部元素(最早新增的元素): 時間複雜度O(1) public <K, V> Entry<K, V> getHead(LinkedHashMap<K, V> map) { retu
【Java集合類】LinkedList原始碼分析(jdk1.8)
ArrayList和LinkedList是List介面的兩種實現,具有相同的查詢、插入、刪除操作,只是底層的實現方式不一樣。LinkedList是以雙向連結串列形式實現的集合類。 其增刪操作由於不需要移
【Java 集合類】Hashtable和HashMap、Vector和ArrayList,來說說
環境: jdk1.8 這兩類(4個類)的比較經常出現在面試中: 解決思路:看原始碼 1.Hashtable和HashMap 1.Hashtable(注意table小寫)裡為了保證
Java LinkedHashMap獲取第一個元素和最後一個元素
Java LinkedHashMap獲取第一個元素和最後一個元素 作者是 線上瘋狂 釋出於 2016年10月27日 在 Java. 獲取LinkedHashMap中的頭部元素(最早新增的元素): 時間複雜度O(1)
【Java集合框架】Map與Set的有序與無序
Set本身不保證順序/* * HashSet是無序的; LinkedHashSet是按插入順序的; TreeSet是按升序的; * * HashMap是無序的;LinkedHashMap是按插
【深入學習java集合系列】LinkedHashMap的底層實現
最近寫到LeetCode上的某一題LRUCache。可以採用LinkedHashMap實現,通過重寫removeEldestEntry方法,即可實現。 LinkedHashMap map; public LRUCache(int capacity) {
【java集合一】根介面Collection、Map
Java集合類是一種非常實用的工具類,主要用於儲存、盛裝其它資料(集合裡只能儲存物件),因此集合類也被成為容器類。所有的集合類都位於java.util包下,在java.util.concurrent下還提供了一些支援多執行緒的集合類。Java的集合類主要由兩
自定義的jdbc連接工具類JDBCUtils【java 工具類】
tco 成功 val update red source dex imp 添加 JDBCUtils 類: 1. 創建私有的屬性*(連接數據庫必要的四個變量):dreiver url user password 2. 將構造函數私有化 3.將註冊驅動寫入靜態代碼塊
【Java集合系列】 總體框架
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【java集合框架】SDUT 3360 學生資訊的新增與查詢
Problem Description 設計一個學生新增和查詢的系統,從鍵盤讀入學生的資料,然後再從螢幕顯示出來。 Input 第一行有2個整數N和M,其中:N——學生數量,M——學生屬性數量; 第二行有M個字串,表示學生的屬性名稱,其中第1個屬性id表示關鍵字;其中各欄位屬性的資料型別
Java集合類:LinkedHashMap
前言 今天繼續學習關於Map家族的另一個類 LinkedHashMap 。先說明一下,LinkedHashMap 是繼承於 HashMap 的,所以本文只針對 LinkedHashMap 的特性學習,跟HashMap 相關的一些特性就不做進一步的解析了,大家有疑
【Java集合系列】 總體框架
根據上面的類圖,我們可以把java的所有集合分成三大類,其中Set集合類類似於一個糖罐子,把一個物件新增到Set集合裡面的時候,Set集合無法記住新增這個元素的順序,所以Set裡面的元素不能重複,否則系統無法準確識別這個元素;List集合非常像一個數組,她可以記住每次新增元素的順序,可以重複,只是List的長
【Java集合系列】---總體框架
集合--童年的美好時光集合,忽然讓小編想起那段美好的學生時光,集合第一次遇見她的時候,小編當年還是一個懵懂的丫頭,也不曾想過會在計算機的世界再次相遇,再回首,集合在數學中是一個基本概念,集合就是“一堆東
【Java File類】建立檔案目錄並在指定路徑建立檔案
import java.io.File; import java.io.IOException; public class FileApp { public static void main(
【Java工具類】----正則表示式校驗工具類
/** * @Title: RegexValidateUtil.java * @Package org.csun.nc.util * @Description: TODO * @author chisj [email protected] * @da
【java集合系列】---HashSet
在前面的博文中,小編主要簡單介紹了java集合中的總體框架,以及list介面中典型的集合ArrayList和LinkedList,接著,我們來看set的部分集合,set集合和數學意義上的集合沒有差別,作為集合,可以容納多個元素,而且,集合裡面沒有重複的元素,Set集合是Col
【Java篇04】抽象方法中可以有static屬性和方法嗎?小結
抽象方法中可以有Static屬性和方法嗎? 對於這個問題,網上眾說紛紜,其實,抽象類中是可以包含static屬性和static方法的,最典型的例子:Calendar類 下面直接上Calendar類的原始碼: public abstract class Calendar impleme
【Java併發基礎】併發程式設計領域的三個問題:分工、同步和互斥
前言 可以將Java併發程式設計抽象為三個核心問題:分工、同步和互斥。 這三個問題的產生源自對效能的需求。最初時,為提高計算機的效率,當IO在等待時不讓CPU空閒,於是就出現了分時作業系統也就出現了併發。後來,多核CPU出現,不同的任務可以同時獨立執行,於是就出現了並行【分工】。有了分工後,效率得到了很大的提
【新人自學筆記】2開發我的第一個安卓APP
一、建立一個Android工程 1、在Package Explorer空白的地方右鍵-->new-->Android application project 2、next之後會來到這樣一個頁面,注意一定要指定好工作空間點選finish完成工程的建立,這時候就
【JAVA】Java集合類: Set、List、Map、Queue使用場景梳理
本文主要關注Java程式設計中涉及到的各種集合類,以及它們的使用場景 相關學習資料 目錄 Java集合類基本概念 Java集合類架構層次關係 Java集合類的應用場景程式碼 Java集合類基本概念 在程式設計中,常常需