ListHashtable带有一个List orderedKeys,orderedKeys中的key如果是整形,orderedKeys能够自动排序。
来源:互联网 发布:剑三人物捏脸数据 编辑:程序博客网 时间:2024/06/05 18:41
package org.liango.util;import java.util.ArrayList;import java.util.Hashtable;import java.util.List;/** * Hashtable that maintains the input order of the data elements * - Note only put, putall, clear and remove maintains the ordered list * */public class ListHashtable extends Hashtable {protected List orderedKeys = new ArrayList();public synchronized void clear() {super.clear();orderedKeys = new ArrayList();}public synchronized Object put(Object aKey, Object aValue) {if (orderedKeys.contains(aKey)) {int pos = orderedKeys.indexOf(aKey);orderedKeys.remove(pos);orderedKeys.add(pos, aKey);} else {if (aKey instanceof Integer) {Integer key = (Integer) aKey;int pos = getFirstKeyGreater(key.intValue());if (pos >= 0)orderedKeys.add(pos, aKey);elseorderedKeys.add(aKey);} elseorderedKeys.add(aKey);}return super.put(aKey, aValue);}/** * @param aKey * @returns calculate position at which the first key is greater otherwise * return -1 if no key can be found which is greater * */private int getFirstKeyGreater(int aKey) {int pos = 0;int numKeys = getOrderedKeys().size();for (int i = 0; i < numKeys; i++) {Integer key = (Integer) getOrderedKey(i);int keyval = key.intValue();if (keyval < aKey)++pos;elsebreak;}if (pos >= numKeys)pos = -1;return pos;}public synchronized Object remove(Object aKey) {if (orderedKeys.contains(aKey)) {int pos = orderedKeys.indexOf(aKey);orderedKeys.remove(pos);}return super.remove(aKey);}/** * This method reorders the ListHashtable only if the keys used are integer * keys. * */public void reorderIntegerKeys() {List keys = getOrderedKeys();int numKeys = keys.size();if (numKeys <= 0)return;if (!(getOrderedKey(0) instanceof Integer))return;List newKeys = new ArrayList();List newValues = new ArrayList();for (int i = 0; i < numKeys; i++) {Integer key = (Integer) getOrderedKey(i);Object val = getOrderedValue(i);int numNew = newKeys.size();int pos = 0;for (int j = 0; j < numNew; j++) {Integer newKey = (Integer) newKeys.get(j);if (newKey.intValue() < key.intValue())++pos;elsebreak;}if (pos >= numKeys) {newKeys.add(key);newValues.add(val);} else {newKeys.add(pos, key);newValues.add(pos, val);}}// reset the contentsthis.clear();for (int l = 0; l < numKeys; l++) {put(newKeys.get(l), newValues.get(l));}}public String toString() {StringBuffer x = new StringBuffer();x.append("Ordered Keys: ");int numKeys = orderedKeys.size();x.append("[");for (int i = 0; i < numKeys; i++) {x.append(orderedKeys.get(i) + " ");}x.append("]\n");x.append("Ordered Values: ");x.append("[");for (int j = 0; j < numKeys; j++) {x.append(getOrderedValue(j) + " ");}x.append("]\n");return x.toString();}public void merge(ListHashtable newTable) {// This merges the newtable with the current oneint num = newTable.size();for (int i = 0; i < num; i++) {Object aKey = newTable.getOrderedKey(i);Object aVal = newTable.getOrderedValue(i);this.put(aKey, aVal);}}/** * @return Returns the orderedKeys. */public List getOrderedKeys() {return orderedKeys;}public Object getOrderedKey(int i) {return getOrderedKeys().get(i);}/** * This method looks through the list of values and returns the key * associated with the value.. Otherwise if not found, null is returned * * @param aValue * @return */public Object getKeyForValue(Object aValue) {int num = getOrderedValues().size();for (int i = 0; i < num; i++) {Object tmpVal = getOrderedValue(i);if (tmpVal.equals(aValue)) {return getOrderedKey(i);}}return null;}public List getOrderedValues() {List values = new ArrayList();int numKeys = orderedKeys.size();for (int i = 0; i < numKeys; i++) {values.add(get(getOrderedKey(i)));}return values;}public Object getOrderedValue(int i) {return get(getOrderedKey(i));}}
ListHashtable带有一个List orderedKeys,orderedKeys中的key如果是整形,orderedKeys能够自动排序。
- ListHashtable带有一个List orderedKeys,orderedKeys中的key如果是整形,orderedKeys能够自动排序。
- 定义一个函数,判断三个整形边长能否构成三角形,如果是三角形,则判断它是否是直角三角形。
- 在一个list列表中的多个dict字典按照键值对key-value来进行排序
- python 按照list中的dic的某key排序
- 如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口
- 编写冒泡排序,排序一个整形数组
- jstl中取map,其中map的key是一个对象,value是一个list
- 排序一个list数组中的元素
- 用list.sort(key)排序
- 根据key值,list排序
- python字典排序、按照list中的字典的某个key排序
- 写入表中的时间是一样的,如果按时间排序是怎么排的
- 如果这是一个梦
- 如果给Contact的List加一个用字母排序的导航
- 【C语言】编写冒泡排序,排序一个整形数组。
- Explorer : 发布一个key-value存储系统,带有客户端和服务器端
- 写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)
- 写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码编写出一个从字符串到长整形的函数?)
- 库跃动
- 函数指针和指针函数的基本概念
- Linux 软件包管理
- awk学习--基础篇
- 从JKS文件中读取密钥
- ListHashtable带有一个List orderedKeys,orderedKeys中的key如果是整形,orderedKeys能够自动排序。
- 认识CSS中盒子模型
- iModel Studio-程序员的创作画板
- awk学习--例子篇
- 考研第一天
- 无人值守的性能测试 -- for 淘宝技术嘉年华 TCon2011
- 大话通信-通信基础知识 第二章 笔记
- controller中dao报nullPointerException
- 在UltraEdit的wordfile中添加python的语法支持