map接口的实现首先要在实现类中实现一个entry类,用来保存键值对
SimpleMap类内部存储数据结构是List
public class SimpleMap<K,V> implements Map<K,V> {
//静态的Entry类用来保存键值对
static class SimpleEntry implements Entry,Comparable{
Object key,value;
public SimpleEntry(Object key) {
this.key = key;
}
public SimpleEntry(Object key, Object value) {
this.key = key;
this.value = value;
}
@Override
public int compareTo(Object o) {
SimpleEntry simpleEntry = (SimpleEntry) o;
return ((Comparable)key).compareTo(simpleEntry.key);
}
@Override
public Object getKey() {
return key;
}
@Override
public Object getValue() {
return value;
}
@Override
public Object setValue(Object value) {
this.value = value;
return value;
}
@Override
public String toString() {
return "SimpleEntry{" +
"key=" + key +
", value=" + value +
'}';
}
}
//map的长度
private int size = 0;
//map的存储集合
private static ArrayList<SimpleEntry> mapList = new ArrayList<>();
@Override
public int size() {
return size;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public boolean containsKey(Object key) {//是否包含某个key
for (int i = 0; i < size; i++) {
if (mapList.get(i).getKey().equals(key)){
return true;
}
}
return false;
}
@Override
public boolean containsValue(Object value) {//是否包含某个value
for (int i = 0; i < size; i++) {
if (mapList.get(i).getKey().equals(value)){
return true;
}
}
return false;
}
@Override
public V get(Object key) {//根据key获取value
for (int i = 0; i < size; i++) {
if (mapList.get(i).getKey().equals(key)){
return (V)mapList.get(i).getValue();
}
}
return null;
}
@Override
public V put(K key, V value) {//存键值对
SimpleEntry simpleEntry = new SimpleEntry(key,value);
for (int i = 0; i < size; i++) {
if (mapList.get(i).getKey().equals(key)){
return (V)"添加失败";
}
}
mapList.add(simpleEntry);
this.size++;
return (V)"添加成功";
}
@Override
public V remove(Object key) {//删除键值对
SimpleEntry willRemove = null;
for (int i = 0; i < size; i++) {
if (mapList.get(i).getKey().equals(key)){
willRemove = mapList.get(i);
break;
}
}
mapList.remove(willRemove);
this.size--;
return (V)willRemove;
}
@Override
public void putAll(Map<? extends K, ? extends V> m) {//将一个map中所有键值对加入
Set set = m.entrySet();
for(Object obj:set){
Entry objEntry = (Entry)obj;
this.put((K)objEntry.getKey(),(V)objEntry.getValue());
}
}
@Override
public void clear() {//清空键值对
mapList.clear();
size=0;
}
@Override
public Set<K> keySet() {//获取键的集合
Set set = new HashSet();
for (int i = 0; i < size; i++) {
set.add(mapList.get(i).getKey());
}
return set;
}
@Override
public Collection<V> values() {//获取所有值的集合
List list = new ArrayList();
for (int i = 0; i < size; i++) {
list.add(mapList.get(i).getValue());
}
return list;
}
@Override
public Set<Entry<K, V>> entrySet() {//获取所有键值对的集合
Set set = new HashSet();
for (int i = 0; i < size; i++) {
set.add(mapList.get(i));
}
return set;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("{");
for (int i = 0; i < size; i++) {
builder.append(mapList.get(i).getKey()).append(" : ")
.append(mapList.get(i).getValue()).append("\n");
}
builder.append("}");
return builder.toString();
}
}