龙空技术网

java中的有序hashMap

坏桃子 391

前言:

目前看官们对“java有序”大约比较关切,我们都需要学习一些“java有序”的相关内容。那么小编在网上网罗了一些有关“java有序””的相关资讯,希望小伙伴们能喜欢,咱们一起来了解一下吧!

前一段时间,用java开发一个项目中,需要Array和HashMap的结合,既要保证存入的先后顺次,又要保证通过key能快速的找到value对象,还要保证多线程操作的安全性(其实就是一个红包项目)。由于我在网上一时没有找到相对的jar包,所以自己写了一个,大家借鉴一下。

代码如下:

//生产一个有序的hashMap,并且保证放入顺序import java.util.ArrayList;import java.util.concurrent.ConcurrentHashMap;public class ConcurrentHashMapArrayList<V> { public volatile ArrayList<String> RPKeyList=new ArrayList<>(); //红包key public volatile ConcurrentHashMap<String,V> RedPackegeArray=new ConcurrentHashMap<String, V>(); //存储key,对应的valueobject //加入值 public void add(String key,V redPackageObejct){ synchronized (this){ this.RPKeyList.add(key); this.RedPackegeArray.put(key,redPackageObejct); } } //删除一个值 public void del(String key) throws Exception{ synchronized (this){ if(this.RPKeyList.contains(key) && this.RedPackegeArray.containsKey(key)) { this.RPKeyList.remove(key); V redPackageObejct=this.RedPackegeArray.remove(key); }else { throw new Exception("ConcurrentHashMapArrayList is error, del :"+key); } } } //获得一个object public V get(String key) throws Exception{ synchronized (this){ if(this.RPKeyList.contains(key) && this.RedPackegeArray.containsKey(key)){ return this.RedPackegeArray.get(key); }else { //抛出异常 throw new Exception("ConcurrentHashMapArrayList is error, get :"+key); } } } //获取最近插入的数据 从最新的往前找; public ArrayList<V> getHeardList(int len){ ArrayList<V> data=new ArrayList<V>(); synchronized (this){ for (int i=1;i<len;i++){ int thisIndex=this.RPKeyList.size()-i; if(thisIndex>0){ String thiskey =this.RPKeyList.get(thisIndex); data.add(this.RedPackegeArray.get(thiskey)); } } } return data; }}

说明:这个类包括了安全性的增、删、改,和读取最新数据的顺序读取方法。

标签: #java有序