java使用数组实现Map集合

来源:互联网 发布:逐浪cms 编辑:程序博客网 时间:2024/06/06 09:22
package collection;import java.util.Arrays;import java.util.Collection;/*** @ClassName: ArrayImplMap* @Description:采用二维数组实现简单的Map集合(ArrayImplMap<String,String>)* 1、新建或扩充数组* 2、判断是否有值:*    Y:覆盖*    N:新增* @修改备注:*/public class ArrayImplMap { private int index = 0;  private String[][] map= null;  /** * new一个HashMap */public ArrayImplMap(){  if(map == null){  map = new String[0][0];  } }  /**  * 存储数据(如果Key值重复,则会被覆盖掉)  * @param k key值  * @param v value值  */ public void put(String k,String v){  boolean flag = isRepeat(map, k, v);//查看是否重复,如果重复则直接替换新的Value值  if(!flag){   map = getAddSize(map,index+1);//将数组空间增加一条存储位置,用于下面存储一条新数据。   map[index][0] = k;   map[index][1] = v;   index++;  } }     /*** @Description:清除map内数据*/ public void clear(){  index = 0;  map = new String[0][0]; }  /*判断Map是否为空*/ public boolean isEmpty(){ return map.length == 0; }  /*通过Key值获取数据 */ public String get(String key){  String value = null;  for(int i=0;i<map.length;i++){   if(key.equals(map[i][0])){    value = map[i][1];    break;   }  }  return value; }  /*Map总长度 */ public int size(){ return map.length; }  /*是否包含K的值 */ public boolean containsKey(String key){ return isContainsKey(key,0); }  /*是否包含V的值 */ public boolean containsValue(String value){ return isContainsKey(value,1); }  /*返回所有V的集合*/ public Collection<String> values(){  Collection<String> values =  Arrays.asList(values(1));  return values; }  /**  * 扩充空间:增加二维数组的存储空间,数据不变  * @param map 要增长的数组  * @param length 新的长度  * @return  */ private String[][] getAddSize(String[][] map,int length){  if(map ==null){  map = new String[1][2];// 创建单条数据数组长度  }  String[][] tmp = new String[length][2];//创建新的数组  System.arraycopy(map, 0, tmp, 0, map.length);//将原始数据拷贝到新的数组中  map = null;//不需要了,等待自动垃圾回收  return tmp; }  /*二维数组,根据传入参数考虑取得K的值还是V的值*/ private String[] values(int ind){  String[] v = new String[map.length];  for(int i=0;i<map.length;i++){   v[i] = map[i][ind];  }  return v; }   /*二维数组,判断是否保存K或V*/ private boolean isContainsKey(String key,int ind) {  boolean flag = false;  for(int i=0; i < map.length; i++){   if(key.equals(map[i][ind])){//查看是否存在此Key值    flag = true;    break;   }  }  return flag; }    /*** @Description:判断key是否存在,* 若存在 :修改其对应的value值* 若不存在 :返回false,* @param s map集合* @param k key* @param v value值* @return key存在标志* @修改备注:*/private boolean isRepeat(String[][] s,String k,String v){  boolean flag = false;  for(int i=0; i < s.length; i++){   if(k.equals(s[i][0])){//查看是否存在此Key值    s[i][1] = v;//使用新的Value值    flag = true;    break;   }  }  return flag; }  public static void main(String[] args) {  ArrayImplMap map = new ArrayImplMap();  System.out.println(map.size());  map.put("k", "k");  map.put("k", "k2");  map.clear();  System.out.println(map.size());  map.put("k", "k");  map.put("v", "q");  map.put("o", "d");  map.put("t", "k");  System.out.println(map.size());  System.out.println(map.containsKey("b"));  System.out.println(map.containsValue("k"));  map.clear();  map.put(null, null);  System.out.println(map.values()); }}