要有序能够用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]);

 }

初始化非常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的更多相关文章

  1. ListOrderedMap与Map的区别

    ListOrderedMap位于commons-collections的jar包里,与普通的map相比,ListOrderedMap的key可保持原有顺序,在某些情况比如做报表的时候,非常实用. 代码 ...

  2. json-lib的使用《二》

    上篇文章主要集中在了使用json-lib来实现JSON字符串和java中的对象的互转上,忽视了json-lib本身的功能,json-lib中有两个类比较重要:JSONObject和JSONArray, ...

  3. Java转json

    一.json介绍 1. 作用:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. 2.json以key-value的格式书写,数 ...

  4. java转换json需要导入的jar包,org/apache/commons/lang/exception/NestableRuntimeException

    缺少相应jar包都会有异常,根据异常找jar包导入......     这里我说下lang包,因为这个包我找了好半天:   我用的是: commons-lang3-3.1.jar  出现异常: jav ...

  5. 导出所选行为excle

    要实现的是将所选行导出.例如勾选这两条

  6. 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 ...

  7. Android学习笔记之Json的使用....

    PS:当你的能力还驾驭不了你的目标时,那你需要沉下心来历练... 学习内容: 1.Json的使用... 2.Json信息过滤... 3.从网络上获取Json数据... 4.解析Json数据获取各个属性 ...

  8. json学习系列(2)-生成JSONObject的方法

    生成JSONObject一般有两种方式,通过javabean或者map类型来生成.如下面的例子: 先定义一个User实体类: package com.pcitc.json; /** * 用户实体类 * ...

  9. java中json包的使用以及字符串,map,list,自定义对象之间的相互转换

    做一个map和字符串的转换,需要导入这些jar包,这是最基本的一些jar包. 经过多方尝试得出结论入下: 首先导入基本包:json-lib-2.2.3-jdk15.jar 如果没有这个jar包,程序是 ...

随机推荐

  1. JS计算字符串所占字节数

    最近项目有个需求要用js计算一串字符串写入到localStorage里所占的内存,众所周知的,js是使用Unicode编码的.而Unicode的实现有N种,其中用的最多的就是UTF-8和UTF-16. ...

  2. Return Negative

    Return Negative In this simple assignment you are given a number and have to make it negative. But m ...

  3. wsse:InvalidSecurity Error When Testing FND_PROFILE Web Service in Oracle Applications R 12.1.2 from SOAP UI (Doc ID 1314946.1)

    wsse:InvalidSecurity Error When Testing FND_PROFILE Web Service in Oracle Applications R 12.1.2 from ...

  4. java中synchronized的用法详解

    记下来,很重要. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchron ...

  5. codevs3732 解方程

    %%%.设f(x)=a0+a1x+a2x^2+ - + anx^n.求f(x)=0的x. 数据范围很大,高精度只能骗分. 运用类似hash的思想. 如果这个等式mod p 还成立(p为质数)那它很可能 ...

  6. 微软 Virtual studion Code

    在 Build 2015 大会上,微软除了发布了 Microsoft Edge 浏览器和新的 Windows 10 预览版外,最大的惊喜莫过于宣布推出免费跨平台的 Visual Studio Code ...

  7. C# List 用法与示例

    Problem. You have questions about the List collection in the .NET Framework, which is located in the ...

  8. unix network programming(3rd)Vol.1 [第1章]《读书笔记系列》

    文章最开头介绍了 获取时间的C/S 模型的代码, 还用了实现了IPV6的版本 unix 介绍了errno值,以及在多进程/多线程中的问题 多线程中不用全局errno,而是用返回值 处理error 详细 ...

  9. 任务栏窗口和状态图标的闪动 z

    Demo程序: 实现任务栏窗体和图标的闪动: 整个程序是基于Windows Forms的,对于任务栏右下角状态图标的闪动,创建了一个类型:NotifyIconAnimator,基本上是包装了Windo ...

  10. codeforces 676D Theseus and labyrinth BFS搜索

    分析:一个n*m的矩阵,每个格子有12个状态,每次按一次,每个格子转90度,所以整个矩阵只有4种状态,然后爆搜就好了 #include <cstdio> #include <iost ...