ListOrderedMap
要有序能够用List,要便于查找能够用Map,那既要有序又便于查找呢?
近期我就遇到了这样一个问题。Java没有给我们提供现成的类。我们全然能够自己开发个类继承List和Map(Java原来就有不能够同一时候继承List和Map的Bug,因此特意去看了下这个Bug的状态——Closed,呵呵,应该是非常老的版本号才有的问题,用新版本号的朋友不用操心会遇到这个问题),可是全然不是必需白花那个力气。由于Apache的Commons
Collections的Jar包里已经为我们提供了一个相当完备的类来满足我们这种要求全然是绰绰有余。因此我们如今要做的不过引入Jar包,然后使用这个现成的好东西——ListOrderedMap就能够啦。
让我们来看看代码:
ListOrderedMaplist = new ListOrderedMap();
for(int i = 0;i <</SPAN> objs.length; i++) {
list.put(objs[i].getId(), objs[i]);
}初始化非常easy吧,没有一点技术难度。往里边放数据和Map没一点区别,须要注意的是Map我们能够在初始化的时候加上类型,比方Map。可是ListOrderedMap不能够,就这么点区别,要记得哦。
可是这个区别也是ListOrderedMap让人最不惬意的地方。由于这说明他是类型不安全的。
接下来。看看我们都用到了ListOrderedMap的哪些方法:
int themeId = ((Obj)list.getValue(0)).getThemeId();
int index = list.indexOf(key);
if (index == list.size() - 1) {
obj= (Obj)list.getValue(0);
} else if (index != -1) {
obj= (Obj)list.getValue(index + 1);
}getValue(int index)直接依据Index取得Value,当然也能够直接依据Index取得Key值。方法名可不是getKey(int index)。而是直接get(int index)就能够啦。
接着我们想取到当前Key值后面一个Key值所相应的Value,首先用indexOf(Object key)取得Index。然后计算其后面的Index再依据此Index取值。假设想取得当前Key值后面一个Key值。则不必要先取Index,这么麻烦。ListOrderedMap里有直接的方法能够取得当前Key值的前一个Key值和后一Key值。各自是previousKey(Object
key)方法和nextKey(Object key)方法,返回null值表示到头(或尾)了。或者没有找到和当前Key值匹配的Key值。
个至于这边为什么要有If和Else if,原因非常easy。和一般的索引一样,返回值是-1就表示没有找到。我们在这里做了一个循环,并且我的这个ListOrderedMap的数列是确保长度大于0的,所以我把index==list.size()-1的推断放在了前边,假设不能确定长度是否大于0。还是先推断返回值是否为-1为好。
本文仅仅简介了ListOrderedMap的几种比較有用的方法。其它方法用法能够參考Apache站点上的相关API:http://commons.apache.org/collections/api-release/index.html
ListOrderedMap的更多相关文章
- ListOrderedMap与Map的区别
ListOrderedMap位于commons-collections的jar包里,与普通的map相比,ListOrderedMap的key可保持原有顺序,在某些情况比如做报表的时候,非常实用. 代码 ...
- json-lib的使用《二》
上篇文章主要集中在了使用json-lib来实现JSON字符串和java中的对象的互转上,忽视了json-lib本身的功能,json-lib中有两个类比较重要:JSONObject和JSONArray, ...
- Java转json
一.json介绍 1. 作用:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. 2.json以key-value的格式书写,数 ...
- java转换json需要导入的jar包,org/apache/commons/lang/exception/NestableRuntimeException
缺少相应jar包都会有异常,根据异常找jar包导入...... 这里我说下lang包,因为这个包我找了好半天: 我用的是: commons-lang3-3.1.jar 出现异常: jav ...
- 导出所选行为excle
要实现的是将所选行导出.例如勾选这两条
- json+servlet+ajax
json-lib-2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar c ...
- Android学习笔记之Json的使用....
PS:当你的能力还驾驭不了你的目标时,那你需要沉下心来历练... 学习内容: 1.Json的使用... 2.Json信息过滤... 3.从网络上获取Json数据... 4.解析Json数据获取各个属性 ...
- json学习系列(2)-生成JSONObject的方法
生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子: 先定义一个User实体类: package com.pcitc.json; /** * 用户实体类 * ...
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
做一个map和字符串的转换,需要导入这些jar包,这是最基本的一些jar包. 经过多方尝试得出结论入下: 首先导入基本包:json-lib-2.2.3-jdk15.jar 如果没有这个jar包,程序是 ...
随机推荐
- JAVA并行框架学习之ForkJoin
当硬件处理能力不能按照摩尔定律垂直发展的时候,选择了水平发展,多核处理器已经广泛应用.未来随着技术的进一步发展,可能出现成百上千个处理核心,但现有的程序运行在多核心处理器上并不能得到较大性能的提升,主 ...
- poj2月下旬题解
poj2388 水题 poj1273 最大流初步 poj2456 简单的二分答案 poj2309 论lowbit的重要性 poj1734 floyd求最小环 poj1001 细节题 poj2184 0 ...
- [Unity3d]小地图的制作
继续今天的学习心得,unity中小地图的制作,实现了小地图中红色小箭头代表场景中的主角,然后人物方向的转变,小地图中箭头也随之改变方向. 效果图 右上角就是小地图,上面有个红色小箭头就是代表主 ...
- Logminer实战
相信许多DBA同学都曾遇到过这种情况,由于各种各样的原因,必须对数据库做不完全恢复:但又不确定应该恢复到哪个时间点或SCN才合适,因而反复的执行不完全恢复,悲剧掉了一地,中枪的有木有?温馨提示下,在生 ...
- 将你的Asp.NET应用程序嵌入到SharePoint
转:http://www.cnblogs.com/Clank/archive/2007/05/21/754073.html 为什么要将Asp.net应用程序嵌入到SharePoint?这个我们不讨论! ...
- Entity Framework 并发处理
什么是并发? 并发分悲观并发和乐观并发. 悲观并发:比如有两个用户A,B,同时登录系统修改一个文档,如果A先进入修改,则系统会把该文档锁住,B就没办法打开了,只有等A修改完,完全退出的时候B才能进入修 ...
- 说下 winOS / IOS / android /Linux 视频、音频 编码解码问题
最近有朋友遇到一个问题, ios 上传视频文件,想在本地压缩下,然后再上传到服务器. 问有没有什么 视频处理的库, 最近Khronos的webgl 支持HTML5 ,(原理 WebGL 是openGL ...
- 用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理
1.问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考) 答: Oracle有自己的锁机制.就算你开100条 ...
- kettle作业(job)调用转换,设置变量,写日志到数据库中【转】
首先建立转换:从数据库表到日志 表输入的设置: 日志设置: 新建job: 转换选择刚才建好的输出日志转换.变量设置如下: 此ID就是转换中的${ID},执行job,可以看到控制台输出日 ...
- Oracle学习网址
Oracle Error Search: http://www.ora-error.com/ Oracle Database Error Message - Oracle Documentation: ...