码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA——Map和HashMap的基本用法以及自己实现HashMap

时间:2020-08-28 11:49:39      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:sys   main   boolean   tree   rgs   remove   link   null   list   

Map接口:

1、实现Map接口的类用来存储键(key)-值(value)对

2、Map接口的实现类有HashMap和TreeMap

3、Map类中存储的键-值对通过键来标识,所以键值不能重复

常用方法类:

Object put(Object key,Object value);
Object get(Object key);
Object remove(Object key);
boolean containKey(Object key);
boolean containValue(Object value);
int size();
boolean isEmpty();
void putAll(Map t);
void clear();
public class TestMap {

	public static void main(String[] args) {
		Map map=new HashMap();
		map.put("Lisa", new blackPink("Jennie"));
        map.put("Rosie", new blackPink("Jisoo"));
        //map.remove("Lisa");
        blackPink bPink=(blackPink) map.get("Lisa");//get方法返回的是object 要转型 这里是把地址给了bPink
        map.remove("Lisa");//只是移出容器
        System.out.println(bPink.name);
	}

}
class blackPink{
	String name;
	public blackPink(String name)
	{
		this.name=name;
	}
}

自己实现HashMap:

package collection;

import java.util.LinkedList;

/**
 * Map:存放键值对,根据键对象找值对象,键不能重复
 * 哈希码是通过对象地址进行计算得出来的
 * Map底层是数组+链表
 * @author Administrator
 *
 */
public class MyMap {
	LinkedList [] arr=new LinkedList[999];
	int size;

	public void put(Object key,Object value)
	{
		MyEntry entry=new MyEntry(key,value);
		int a=key.hashCode()%arr.length;
		//a:1000->1 b:10000->13
		if(arr[a]==null)
		{
			LinkedList list=new LinkedList();
			arr[a]=list;
			list.add(entry);
		}
		else {
			LinkedList list=arr[a];
			for(int i=0;i<list.size();i++)
			{
				MyEntry entry2=(MyEntry) list.get(i);
				if(entry2.equals(key))
				{
					entry2.value=value;
					return ;
				}
			}
			arr[a].add(entry);
		}
	}
	public Object get(Object key)
	{
		int a=key.hashCode()%arr.length;
		if(arr[a]!=null)
		{
			LinkedList list=arr[a];
			for(int i=0;i<list.size();i++)
			{
				MyEntry entry=(MyEntry)list.get(i);		
				if(entry.key.equals(key))
				{
					return entry.value;
				}
			}
		}
		return null;
	}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根

	}

}

class MyEntry {
	Object key;
	Object value;
	
	public MyEntry(Object key,Object value)
	{
		this.key=key;
		this.value=value;
	}

	public MyEntry() {
		// TODO 自动生成的构造函数存根
	}
}

  

JAVA——Map和HashMap的基本用法以及自己实现HashMap

标签:sys   main   boolean   tree   rgs   remove   link   null   list   

原文地址:https://www.cnblogs.com/zmt-blackpink-JL/p/13548816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!