您的位置:首页 > 编程语言 > PHP开发

Java 自定义 的Array类,类似PHP中的数组

2014-12-29 17:54 579 查看
Java里有键值对数组,Hashmap,但是问题来了,它不能保持顺序,这对我们数据库排序的结果影响太大了

自己扩展一个,使用到之前的KV类
此类的对象,用for ... in 遍历, 多种方法增加数据
根据实际情况,增加了键名修正功能

import java.util.Iterator;
import java.util.Vector;

/**
* 有序键值对数组对象
*
* @author 蓝冰大侠
*
*/
public class Array implements Iterable<KV> {
// 实际保存数据的有序数组
private Vector<KV> items = new Vector<KV>();

/**
* 带初始数据的构造函数
*
* @param items
*/
public Array(KV... items) {
for (KV item : items) {
this.items.addElement(item);
}
}

/**
* 不带初始数据的构造函数
*/
public Array() {
}

/**
* 返回全部数据
*
* @return
*/
public Vector<KV> 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<KV> iterator() {
return new ArrayIterator();
}

/**
* 遍历类
*
* @author 蓝冰大侠
*
*/
class ArrayIterator implements Iterator<KV> {
// 索引
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;
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: