java
package cn.ziqirj.common.utils;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
/**
* 模拟Map集合,key不可重复,按插入顺序排序
* @author zhangji
*
* @param <T>
*/
public class CustomOrderlyMap<T> {
@Getter
private List<String> keys = new ArrayList<>();
@Getter
private List<T> values = new ArrayList<>();
private List<map<T>> kv = new ArrayList<>();
public CustomOrderlyMap() {}
/**
* 添加元素
* @param key 键
* @param value 值
*/
public void add(String key, T value) {
Integer index = getIndex(key);
if(null != index && index != -1) {
values.set(index, value);
kv.get(index).setValue(value);
return ;
}
keys.add(key);
values.add(value);
kv.add(new map<T>(key, value));
}
/**
* 批量添加元素
* @param customMap 集合
*/
public void addAll(CustomOrderlyMap<T> customMap) {
if(null == customMap || customMap.size() == 0) {
return ;
}
List<map<T>> kvl = customMap.kv;
for(map<T> map : kvl) {
this.add(map.getKey(), map.getValue());
}
}
/**
* 移除元素
* @param key 键
*/
public void remove(String key) {
Integer index = getIndex(key);
if(null == index || index == -1 ) {
return ;
}
keys.remove(index);
values.remove(index);
kv.remove(index);
}
/**
* 移除元素
* @param obj 值
*/
public void remove(T obj) {
Integer index = getIndex(obj);
if(null == index || index == -1 ) {
return ;
}
keys.remove(index);
values.remove(index);
kv.remove(index);
}
/**
* 清空集合
*/
public void removeAll() {
this.keys = new ArrayList<>();
this.values = new ArrayList<>();
this.kv = new ArrayList<>();
}
/**
* 关闭集合
*/
public void close() {
this.keys.clear();
this.values.clear();
this.kv.clear();
}
/**
* 设置元素
* @param key 键
* @param value 值
*/
public void set(String key, T value) {
Integer index = getIndex(key);
if(null == index || index.intValue() == -1)
return ;
values.set(index, value);
kv.get(index).setValue(value);
}
/**
* 获取元素
* @param key 键
* @return T
*/
public T get(String key) {
Integer index = getIndex(key);
if (null == index || index == -1)
return null;
return kv.get(index).getValue();
}
/**
* 获取集合大小
* @return Integer
*/
public Integer size() {
return this.kv.size();
}
/**
* 判断集合是否为空
* @return boolean
*/
public boolean isEmpty() {
return this.kv.isEmpty();
}
/**
* 打印集合
*/
public void print() {
if(isEmpty()) {
System.out.println("null");
}
System.out.print("CustomMap : [");
for(map<T> m : this.kv) {
System.out.print(m.toString());
}
System.out.println("]");
}
/**
* 获取key的索引
* @param key 键
* @return Integer
*/
private Integer getIndex(String key) {
int length = this.keys.size();
if (length == 0) {
return -1;
}
for (int i = 0; i < length; i++) {
if (key.equals(keys.get(i))) {
return i;
}
}
return null;
}
/**
* 获取value的索引
* @param t 值
* @return Integer
*/
private Integer getIndex(T t) {
int length = this.values.size();
if (length == 0) {
return -1;
}
for (int i = 0; i < length; i++) {
if (t.equals(values.get(i))) {
return i;
}
}
return null;
}
}
@Setter
@Getter
class map<T> {
private String key;
private T value;
public map(String key, T value) {
super();
this.key = key;
this.value = value;
}
@Override
public String toString() {
return "[K:" + key + " --> V:" + value + "]";
}
}