java使用数组实现Map集合

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());
	 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值