用list来模拟map中的put和get方法

来源:互联网 发布:广电网络新增频道 编辑:程序博客网 时间:2024/06/05 16:04
import java.util.*;class MapTest {public static void main(String[] args) {Tools ts=new Tools();ts.put(1,"zhangsan");ts.put(2,"lisi");System.out.println(ts.get(1));System.out.println(ts.get(2));}}class Tools{ArrayList al1=new ArrayList();ArrayList al2=new ArrayList();public void put(Object obj1,Object obj2){al1.add(obj1);al2.add(obj2);}public Object get(Object key){return al2.get(al1.indexOf(key));}}

打印结果:

zhangsan
lisi

表面上看这样是没有问题的,但是我们看到put函数有一句话写的很清楚:在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换。

下面的代码可以说明这个问题

class MapTest {public static void main(String[] args) {HashMap hm=new HashMap();hm.put(1,"num1");hm.put(2,"num2");hm.put(1,"num3");hm.put(4,"num3");//第二种遍历方法Set<Map.Entry<Integer,String>> set=hm.entrySet() ;for (Map.Entry<Integer,String> me:set ){System.out.println(me.getKey()+"---"+me.getValue());}}}
打印结果为:

1---num3
2---num2
4---num3

打印结果告诉我们有相同键的添加,后面一个会覆盖前面一个。而我们自定义的put函数显然不具备这个特点。

看下面代码

import java.util.*;class MapTest {public static void main(String[] args) {Tools ts=new Tools();ts.put(1,"zhangsan");ts.put(2,"lisi");ts.put(1,"zhangsan");for (int i=0;i<ts.size();i++ ){System.out.println(ts.get(i));}}}class Tools{ArrayList al1=new ArrayList();ArrayList al2=new ArrayList();public void put(Object obj1,Object obj2){al1.add(obj1);al2.add(obj2);}public Object get(int index){return al2.get(index);}public int size(){return al1.size();}}
打印结果为:

zhangsan
lisi
zhangsan
显然ArrayList将两个相同的键和值存了进去。

改进方法为:在Tools中进行判断

代码为:

class Tools{ArrayList al1=new ArrayList();ArrayList al2=new ArrayList();public void put(Object obj1,Object obj2){if (al1.contains(obj1)&&al2.contains(obj2))return ;al1.add(obj1);al2.add(obj2);}public Object get(int index){return al2.get(index);}public int size(){return al1.size();}}

这样的话打印结果为:

zhangsan
lisi



0 1
原创粉丝点击