要有序可以用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 < objs.length; i++) {
list.put(objs[i].getId(), objs[i]);
}
初始化很简单吧,没有一点技术难度,往里边放数据和Map没一点区别,需要注意的是Map我们可以在初始化的时候加上类型,比如Map<String, String>,但是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
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yao_2008/archive/2009/09/01/4501296.aspx
分享到:
相关推荐
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间的数据传输,因为其简洁和高效。...这两个类虽然名字相同,但来自不同的开源项目,提供了相似但不完全相同的...
这篇内容将详细探讨这些关键知识点。 1. **JSON对象的基本概念** JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。`JSONObject`是JSON在Java中的...
JSON相关JAR包和文档 1、commons-beanutils-1.7.0.jar 2、commons-collections-3.2.jar 3、commons-lang-2.3....org/apache/commons/collections/map/ListOrderedMap这个异常。 把这些JAR包导入到工程就可以直接使用了
ListOrderedMap map = new ListOrderedMap(); JSONObject json = JSONObject.fromObject(jsonStr); for (Object k : json.keySet()) { Object v = json.get(k); if (v instanceof JSONArray) { List, Object>>...
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/...
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/...
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/...
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/...
使用json常用到的6个包,解决报org.apache.commons.collections.map.ListOrderedMap和org.apache.commons.lang.exception.NestableRuntimeException错误
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean java.lang.NoClassDefFoundError: org/apache/...
Json需要的依赖包,全部导进去就行.避免出现java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/...
java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar不加这个包 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/...
2. **commons-collections.jar**: 包含了集合操作的各种实用工具类,如`ListOrderedMap`,在处理JSON时可能需要用到。如果缺少此包,你会看到`java.lang.NoClassDefFoundError: org/apache/commons/collections/map/...
commons-collections.jar org/apache/commons/collections/map/ListOrderedMap commons-lang-2.4.jar org/apache/commons/lang/exception/NestableRuntimeException commons-logging-1.1.1.jar org/apache/commons/...
同样,若出现java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap错误,则意味着缺少commons-collections.jar文件或其版本有误。在使用外部库进行JSON数据处理时,确保所有必需的...