黑马程序员技术交流社区

标题: 自己实现Map接口简单方法实现<抠脚版> [打印本页]

作者: My_Android    时间: 2016-5-26 09:35
标题: 自己实现Map接口简单方法实现<抠脚版>

  1. import java.util.Map;

  2. /**
  3. * 自定义实现Map的功能
  4. * 不完美的实现方法
  5. * Map:存放键值对,根据键对象找对应值的对象
  6. * @author hasee
  7. *
  8. */
  9. public class SxtMap001 {
  10.         SxtEntry[] arr = new SxtEntry[999];
  11.         private int size;
  12.         /**
  13.          * 添加一个键值对元素对象
  14.          * @param key
  15.          * @param value
  16.          */
  17.         public void put(Object key,Object value){
  18.                 SxtEntry e = new SxtEntry(key,value);
  19.                 //每次添加元素遍历集合的key是否相,如果相等覆盖value值。
  20.                 for(int i=0;i<size;i++){
  21.                         if(key.equals(arr[i].key)){
  22.                                 arr[i].value = value;
  23.                                 return ;
  24.                         }
  25.                 }
  26.                 arr[size++] = e;
  27.         }
  28.         /**
  29.          * 通过键对象,找相对应的值对象
  30.          * @param key
  31.          * @return
  32.          */
  33.         public Object get(Object key){
  34.                 for(int i=0;i<size;i++){
  35.                         if(key.equals(arr[i].key)){
  36.                                 return arr[i].value;
  37.                         }
  38.                 }
  39.                 return null;
  40.         }
  41.         /**
  42.          * 通过键对象删除键值对对象
  43.          * @param key
  44.          */
  45.         public void remove(Object key){
  46.                 for(int i=0;i<size;i++){
  47.                         if(key.equals(arr[i].key)){
  48.                                 System.arraycopy(arr, i+1, arr, i, size-i-1);
  49.                         }
  50.                 }
  51.                 size--;
  52.         }
  53.         /**
  54.          * 检测键key对象是否存在,存在返回true
  55.          * @param key
  56.          * @return
  57.          */
  58.         public boolean containsKey(Object key){
  59.                 for(int i=0;i<size;i++){
  60.                         if(key.equals(arr[i].key)){
  61.                                 return true;
  62.                         }
  63.                 }
  64.                 return false;
  65.         }
  66.         /**
  67.          * 检测值value对象是否存在,存在返回true
  68.          * @param value
  69.          * @return
  70.          */
  71.         public boolean containsValue(Object value){
  72.                 for(int i=0;i<size;i++){
  73.                         if(value.equals(arr[i].value)){
  74.                                 return true;
  75.                         }
  76.                 }
  77.                 return false;
  78.         }
  79.         /**
  80.          *  把一个Map集合的所有元素内容,添加到该集合里面
  81.          * @param t
  82.          */
  83.         public void putAll(SxtMap001 t){
  84.                 for(int i=0;i<t.size();i++){
  85.                         SxtEntry s= t.arr[i];
  86.                         put(s.key,s.value);
  87.                 }
  88.         }
  89.         /**
  90.          * 集合有没有元素,没有返回true
  91.          * @return
  92.          */
  93.         public boolean isEmpty(){
  94.                 return size == 0;
  95.         }
  96.         /**
  97.          * 删除集合的所有内容
  98.          */
  99.         public void clear(){
  100.                 SxtEntry[] s = new SxtEntry[arr.length];
  101.                 arr = s;
  102.                 size = 0;
  103.         }
  104.        
  105.         public int size(){
  106.                 return size;
  107.         }
  108. }

  109. /**
  110. * 定义一个类表示键对象和值对象
  111. */
  112. class SxtEntry{
  113.         Object key;
  114.         Object value;
  115.         public SxtEntry(Object key,Object value){
  116.                 this.key = key;
  117.                 this.value = value;
  118.         }
  119. }
复制代码










欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2