要有序能够用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. Azure 中的多个 VM NIC 和网络虚拟设备

    YU-SHUN WANG Azure 网络高级项目经理 在 2014 年欧洲 TechEd 大会上,我们宣布了在Azure VM 中为多个网络接口 (NIC) 提供支持,并与多家重要厂商合作,在 Az ...

  2. RMAN catalog备份恢复方案

    对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选.尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少 ...

  3. Parallel for loops in .NET C# z

    The start index: this is inclusive, i.e. this will be the first index value in the loop The end inde ...

  4. HDU 4003-Find Metal Mineral(树状背包)

    题意: n个节点的树给出每个边的权值,有k个机器人,求由机器人走完所有节点的最小花费(所有机器人开始在根节点) 分析: 仔细看了几遍例题后,发现这个题的状态很巧妙,先从整体考虑,一个机器人走完所有边回 ...

  5. POJ2104 K-th Number 划分树 模板题啊

    /*Source Code Problem: 2104 User: 96655 Memory: 14808K Time: 1282MS Language: G++ Result: Accepted S ...

  6. WebDriver运行异常列表

    1. WebDriverException: Component returned failure code: 0x804b000a 这个异常通常是因为在navigate到url时,丢失了http,务 ...

  7. 使用 EasyBCD 安装Ubuntu 14.04 Error 15: file not found错误的解决方法

    今天安装Window7 和 Ubuntu 14.04 双系统时,出现如下异常,记录一下. 安装过程是参考 http://www.linuxidc.com/Linux/2014-04/100369.ht ...

  8. uva 12296 Pieces and Discs

    题意: 有个矩形,左下角(0,0),左上角(L,W). 思路: 除了圆盘之外,本题的输入也是个PSLG,因此可以按照前面叙述的算法求出各个区域:只需把线段视为直线,用切割凸多边形的方法 :每次读入线段 ...

  9. CentOS安装nvidia显卡驱动

    1.下载 nvidia 相应的驱动: 2.修改/etc/modprobe.d/blacklist.conf文件,在里面加入blacklist nouveau. 3.重建image $ mv /boot ...

  10. 最近升级了一下小老婆(8核 2x8G DDR3 128G SSD)

    晒图(笔者的硬件知识属于小白级别, 且看且参考吧): 另外优化一下休眠&虚拟内存功能节省SSD空间: 1. 台式机, 休眠功能基本没必要, 果断关掉 C:\Windows\system32&g ...