Java里有键值对数组,Hashmap,但是问题来了,它不能保持顺序,这对我们数据库排序的结果影响太大了

自己扩展一个,使用到之前的KV类

此类的对象,用for ... in 遍历, 多种方法增加数据

根据实际情况,增加了键名修正功能

import java.util.Iterator;

import java.util.Vector;

/**

* 有序键值对数组对象

*

* @author 蓝冰大侠

*

*/

public class Array implements Iterable {

// 实际保存数据的有序数组

private Vector items = new Vector();

/**

* 带初始数据的构造函数

*

* @param items

*/

public Array(KV... items) {

for (KV item : items) {

this.items.addElement(item);

}

}

/**

* 不带初始数据的构造函数

*/

public Array() {

}

/**

* 返回全部数据

*

* @return

*/

public Vector getItems() {

return items;

}

/**

* 添加一个值

*

* @param item

* @return

*/

public Array add(KV item) {

return set(item.key, item.value);

}

/**

* 冗余方法,同样添加一个值

*

* @param item

* @return

*/

public Array put(KV item) {

return set(item.key, item.value);

}

/**

* 快速添加一个键值对

*

* @param key

* @param value

* @return

*/

public Array add(String key, Object value) {

return set(key, value);

}

/**

* 同上

*

* @param key

* @param value

* @return

*/

public Array put(String key, Object value) {

return set(key, value);

}

/**

* 修改一个值

*

* @param key

* @param value

* @return

*/

public Array set(String key, Object value) {

// 如果原来有,修改

for (KV item : items) {

if (item.key.equalsIgnoreCase(key)) {

item.value = value;

return this;

}

}

// 否则 添加

items.addElement(new KV(key, value));

return this;

}

/**

* 移除一个值

*

* @param key

* @return

*/

public Array remove(String key) {

for (KV item : items) {

if (item.key.equalsIgnoreCase(key)) {

items.remove(item);

}

}

return this;

}

/**

* 取一个键值对

*

* @param index

* @return

*/

public KV get(int index) {

return items.get(index);

}

/**

* 根据键取值

*

* @param key

* @return

*/

public Object get(String key) {

for (KV item : items) {

if (item.key.equalsIgnoreCase(key)) {

return item.value;

}

}

return null;

}

/**

* 返回 遍历器

*

* @return

*/

public Iterator iterator() {

return new ArrayIterator();

}

/**

* 遍历类

*

* @author 蓝冰大侠

*

*/

class ArrayIterator implements Iterator {

// 索引

private int index = 0;

/**

* 是否有下一个

*/

public boolean hasNext() {

return index != items.size();

}

/**

* 取下一个

*/

public KV next() {

return items.get(index++);

}

/**

* 删除一个

*/

public void remove() {

items.remove(index);

}

}

/**

* 字段名修正大小写

*

* @param name

*/

public void rename(String... names) {

//逐个名称遍历

for (String name : names) {

//在保存的数据里遍历

for (KV item : items) {

//如果原来的键(不区分大小写)匹配,则修改为新的键

if (item.key.equalsIgnoreCase(name)) {

item.key = name;

}

}

}

}

}

更多推荐

java 有类似php关联数组,Java 自定义 的Array类,类似PHP中的数组