ListOrderedMap

要有序可以用List,要便于查找可以用Map,那既要有序又便于查找呢?

最近我就遇到了这样一个问题,Java没有给我们提供现成的类,我们完全可以自己开发个类继承List和Map(Java原来就有不可以同时继承List和Map的Bug,因此特意去看了下这个Bug的状态——Closed,呵呵,应该是很老的版本才有的问题,用新版本的朋友不用担心会遇到这个问题),但是完全没必要白花那个力气,因为Apache的Commons
Collections
的Jar包里已经为我们提供了一个相当完备的类来满足我们这样的要求完全是绰绰有余。因此我们现在要做的仅仅是引入Jar包,然后使用这个现成的好东西——ListOrderedMap就可以啦。

让我们来看看代码:

ListOrderedMap
list = new ListOrderedMap();

 for(int i = 0;
i <</SPAN> objs.length; i++) {

 list.put(objs[i].getId(), objs[i]);

 }

初始化很简单吧,没有一点技术难度,往里边放数据和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,原因很简单,和一般的索引一样,返回值是-1就表示没有找到。我们在这里做了一个循环,而且我的这个ListOrderedMap的数列是确保长度大于0的,所以我把index==list.size()-1的判断放在了前边,如果不能确定长度是否大于0,还是先判断返回值是否为-1为好。

本文只简单介绍了ListOrderedMap的几种比较实用的方法,其他方法使用方法可以参考Apache网站上的相关API:http://commons.apache.org/collections/api-release/index.html

时间: 2024-10-27 02:48:17

ListOrderedMap的相关文章

apache.commons.collections.map.ListOrderedMap

报这个异常: java.lang.ClassNotFoundException: org.apache.commons.collections.map.ListOrderedMap 解决方法:commons-collections-3.2.jar没有或版本不对.比如commons-collections-4即报此异常

ListOrderedMap与Map的区别

ListOrderedMap位于commons-collections的jar包里,与普通的map相比,ListOrderedMap的key可保持原有顺序,在某些情况比如做报表的时候,非常实用. 代码例子如下: public class TestListOrderedMap { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.p

Java中的List转换成JSON报错(四)

1.错误描述 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap at net.sf.json.JSONObject.<init>(JSONObject.java:1450) at net.sf.json.util.CycleDetectionStrategy.<clinit>(CycleDetec

common 包引入常见报错

版权声明:本文为博主原创文章,未经博主允许不得转载. 缺少相应jar包都会有异常,根据异常找jar包导入...... 这里我说下lang包,因为这个包我找了好半天: 我用的是: commons-lang3-3.1.jar  出现异常: java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException可以看出是因为缺少jar包,但是很明显我已经导入了,为什么还会报这个错呢? 找了半天

(2)-生成JSONObject的方法

生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class User { public String username; public String password; public String getUsername() { return username; } public void setUsername(String

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException

转载:http://www.tuicool.com/articles/Vvia6f 缺少相应jar包都会有异常,根据异常找jar包导入...... 这里我说下lang包,因为这个包我找了好半天: 我用的是: commons-lang3-3.1.jar  出现异常: java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException 可以看出是因为缺少jar包,但是很明显我已经导入了,

java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRunt

原因:json在使用的时候,不仅要有json开头的这一个包,其他包全都要加入,一共: commons-beanutils.jar commons-collections.jar commons-lang.jar commons-logging.jar ezmorph-1.0.6.jar json-lib-2.2.3-jdk15.jar 另外出现:org/apache/commons/collections/map/ListOrderedMap这个错误也是没有加全包导致的,缺少包:common-c

java web 使用json要加入的jar 文件

如果有类似错误可以参考,版本不同,记得看下里面包名是否和报错信息对应的上. commons-beanutils-1.8.0.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean commons-collections.jar 不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedM

JS和JAVA使用JSON方法解析

JS和JAVA使用JSON方法解析 一.JS部分================== 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键. 例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = {