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

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 自定义 的Array类,类似PHP中的数组)