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());
}
}
java使用数组实现Map集合
最新推荐文章于 2024-05-14 19:34:31 发布