Java高性能集合类 ConcurrentLinkedHashMap demo

吕志诚
2023-12-01

ConcurrentLinkedHashMap是Java.util.LinkedHashMap的一个高性能实现。主要用于软件缓存。

ConcurrentLinkedHashMap 是google团队提供的一个容器。它有什么用呢?其实它本身是对
ConcurrentHashMap的封装,可以用来实现一个基于LRU策略的缓存。详细介绍可以参见  
http://code.google.com/p/concurrentlinkedhashmap

https://github.com/ben-manes/concurrentlinkedhashmap

[java]  view plain  copy
  1. import java.util.Map;  
  2. import java.util.concurrent.ConcurrentMap;  
  3.   
  4. import com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap;  
  5. import com.googlecode.concurrentlinkedhashmap.EvictionListener;  
  6. import com.googlecode.concurrentlinkedhashmap.Weighers;  
  7.   
  8. public class Test {  
  9.   
  10.     public static void main(String[] args) {  
  11.   
  12.         //test001();  
  13.         test002();  
  14.   
  15.     }  
  16.   
  17.     private static void test001() {  
  18.         EvictionListener<String, String> listener = new EvictionListener<String, String>() {  
  19.   
  20.             @Override  
  21.             public void onEviction(String key, String value) {  
  22.                 System.out.println("Evicted key=" + key + ", value=" + value);  
  23.             }  
  24.         };  
  25.         ConcurrentMap<String, String> cache = new ConcurrentLinkedHashMap.Builder<String, String>()  
  26.                 .maximumWeightedCapacity(10).listener(listener).build();  
  27.   
  28.         for (int i = 0; i < 150; i++) {  
  29.             int j = 1024;  
  30.             j = j + i;  
  31.             cache.put(String.valueOf(j), "nihao" + i);  
  32.         }  
  33.   
  34.         for (Map.Entry<String, String> entry : cache.entrySet()) {  
  35.             String key = entry.getKey();  
  36.             String value = entry.getValue();  
  37.             System.out.println(key + "====" + value);  
  38.         }  
  39.         System.out.println(cache.get("1025"));  
  40.         cache.remove("1026");  
  41.   
  42.     }  
  43.   
  44.     /** 
  45.     ConcurrentLinkedHashMap 是google团队提供的一个容器。它有什么用呢?其实它本身是对 
  46.     ConcurrentHashMap的封装,可以用来实现一个基于LRU策略的缓存。详细介绍可以参见   
  47.     http://code.google.com/p/concurrentlinkedhashmap 
  48.     */  
  49.     private static void test002() {  
  50.   
  51.         ConcurrentLinkedHashMap<Integer, Integer> map = new ConcurrentLinkedHashMap.Builder<Integer, Integer>()  
  52.                 .maximumWeightedCapacity(2).weigher(Weighers.singleton())  
  53.                 .build();  
  54.   
  55.         map.put(11);  
  56.         map.put(22);  
  57.         map.put(33);  
  58.         System.out.println(map.get(1));// null 已经失效了  
  59.         System.out.println(map.get(2));  
  60.     }  
  61. }  
 类似资料: