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包,程序是 ...
随机推荐
- chinacloud大数据新闻
2015年大数据发展八大趋势 (0 篇回复) “数据很丰满,信息很骨感”:Sight Machine想用大数据的方法,打碎两者间的屏障 (0 篇回复) 百度携大数据"圈地" ...
- 西南科技大学第十一届ACM程序设计大赛发言稿
西南科技大学第十一届ACM程序设计大赛发言稿 各位老师.志愿者及参赛选手: 大家好,我是来自计科学院卓软1301的哈特13,很荣幸今天能站在这里代表参赛选手发言. 回想起来,我参加ACM比赛已经快两年 ...
- 【转】UINavigationBar 使用总结
原文网址:http://www.jianshu.com/p/f0d3df54baa6 UINavigationBar是我们在开发过程中经常要用到的一个控件,下面我会为大家介绍一些常用的用法. 1. 设 ...
- 【转】蓝牙ble app开发(三) -- 抓包
原文网址:http://blog.csdn.net/lckj686/article/details/43156617 关于android 蓝牙app开发抓包的重要性在 android 蓝牙ble ap ...
- jquery 图片上传本地预览V1.2
基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari 代码进行小小的压缩 如果看源码 自己解压就行了 版本已升级 修复jquery版本问题 支持任意jqu ...
- Linux中的设备文件与设备号
设备文件与设备号 在Linux下,一切皆文件,设备也不例外,为了管理这些设备,系统为它们各自都编了号,而每个设备号又分为主设备号和次设备号.主设备号用来区分不同类型的设备,而次设备号用来区分同一类 ...
- MFC无边框窗体不响应任务栏点击问题
为了提升用户体验,需要隐藏主窗体的边框,使用图片绘制新的标题栏.标题栏绘制之后,发现用户点击任务栏上应用程序的图标,应用程序不会随着点击交替隐藏显示. 分析结果是问题出现窗体风格设置上. 最初为了省事 ...
- 【HTML】Advanced7:Embedded Content: Video, Audio, and Canvas
1.video <video src="kitties.mp4" poster="fluffy.jpg"(display before video is ...
- 有关按位DP
这是一道正式比赛的题目 数据范围是 10^999 ~ 10^1000 的两个整数以及一个k我记得好像是不超过100,计算两个数中间有多少个每一位相乘最后和k取摸等于0的数.这道题对于不会按位dp的人是 ...
- 44 个 JavaScript 变态题解析
当初笔者做这套题的时候不仅怀疑智商, 连人生都开始怀疑了…. 不过, 对于基础知识的理解是深入编程的前提. 让我们一起来看看这些变态题到底变态不变态吧! 第1题 ["1", &qu ...