/**
* @see java.lang.Object#toString()
*/
public String toString() {
StringBuffer tmp = new StringBuffer("[");
for (int i = 0; i < this.size; i++) {
tmp.append(keys.get(i));
tmp.append("=");
tmp.append(values.get(i));
if (i != this.size - 1) {
tmp.append(",");
}
}
tmp.append("]");
return tmp.toString();
}
public static void main(String[] args) {
String[] keys = new String[] {"01", "01", "03", "03"};
String[] values = new String[] {"011value", "012value", "011value",
"031value"};
Mapor mapor = new Mapor();
int size = keys.length;
for (int i = 0; i < size; i++) {
mapor.put(keys[i], values[i]);
}
System.out.println("mapor=" + mapor);
mapor = new Mapor(Mapor.DENY_SAME_VALUE_BUT_KEY);
for (int i = 0; i < size; i++) {
mapor.put(keys[i], values[i]);
}
/**
* 键值对应集合
*
* @author marvy
*/
public class Mapor implements Map, Serializable, Cloneable {
/**
* <code>serialVersionUID</code>
*/
private static final long serialVersionUID = 7214434983321214663L;
// 允许键值重复
public static final int DENY_NOTHING = 0;
// 不允许键重复
public static final int DENY_SAME_KEY_BUT_VALUE = 1;
// 不允许值重复
public static final int DENY_SAME_VALUE_BUT_KEY = 2;
// 不允许建与值同时重复
public static final int DENY_SAME_VALUE_AND_KEY = 3;
// 值
private List values;
// 键
private List keys;
// 大小
private int size = 0;
// 模式
private int mode = DENY_NOTHING;
switch (mode) {
case DENY_NOTHING:
break;
case DENY_SAME_KEY_BUT_VALUE:
break;
case DENY_SAME_VALUE_BUT_KEY:
break;
case DENY_SAME_VALUE_AND_KEY:
break;
default:
throw new IllegalArgumentException(
"模式应该为Mapor.DENY_NOTHING、Mapor.DENY_SAME_KEY_BUT_VALUE、Mapor.DENY_SAME_VALUE_BUT_KEY、Mapor.DENY_SAME_VALUE_AND_KEY中的一个!");
}
this.mode = mode;
}
/**
* 得到集合模式
*
* @return 集合模式
*/
public int getMode() {
return this.mode;
}
/**
* @see java.util.Map#size()
*/
public int size() {
return this.size;
}
/**
* @see java.util.Map#clear()
*/
public void clear() {
this.size = 0;
this.values = new Vector();
this.keys = new Vector();
}
/**
* @see java.util.Map#isEmpty()
*/
public boolean isEmpty() {
return this.size == 0 || values.isEmpty();
}
/**
* @see java.util.Map#containsKey(java.lang.Object)
*/
public boolean containsKey(Object key) {
return this.keys.contains(key);
}
public boolean containsKeyByValue(Object key, Object value) {
/**
* @see java.util.Map#putAll(java.util.Map)
*/
public void putAll(List addKeys, List addValues) {
if (addKeys == null || addValues == null
|| addValues.size() != addKeys.size()) {
throw new IllegalArgumentException("不匹配的键值长度!");
}
for (int i = 0; i < addKeys.size(); i++) {
this.put(addKeys.get(i), addValues.get(i));
}
}
/**
* @see java.util.Map#entrySet()
*/
public Set entrySet() {
return null;
}
/**
* @see java.util.Map#keySet()
*/
public Set keySet() {
return new HashSet(this.keys);
}
/**
* @see java.util.Map#get(java.lang.Object)
*/
public Object get(Object key) {
int index = this.keys.indexOf(key);
if (index < 0) {
return null;
}
return this.values.get(index);
}
/**
* 得到键所对应的值集合
*
* @param akey 建
* @return 键所对应的值集合
*/
public List getValuesByKey(Object akey) {
if (akey == null) {
return new Vector();
}
Vector selectedValues = new Vector();
for (int i = 0; i < this.keys.size(); i++) {
if (this.keys.get(i).equals(akey)) {
selectedValues.add(this.values.get(i));
}
}
return selectedValues;
}
/**
* 得到值所对应的键集合
*
* @param aValue 值
* @return 值所对应的键集合
*/
public List getKeysByValue(Object aValue) {
if (aValue == null) {
return new Vector();
}
Vector selectedKeys = new Vector();
for (int i = 0; i < this.values.size(); i++) {
if (this.values.get(i).equals(aValue)) {
selectedKeys.add(this.keys.get(i));
}
}