Map接口
--实现Map接口的类用来存储键(key)-值(value)对
--Map接口的实现类有HasMap和TreeMap
--键值对通过键来唯一标识,不能重复
map底层是数组+链表
package TestList; import java.util.HashMap; import java.util.Map; public class TestMap { public static void main(String[] args) { Map map=new HashMap(); //put map.put("张三", new Wife("aaa")); map.put("李四", new Wife("bbb")); System.out.println(map.containsKey("张三"));//true System.out.println(map.containsValue(new Wife("aaa")));//false //get Wife w=(Wife)map.get("张三"); System.out.println(w.name);//aaa //remove /* * 将对象从容器中移除,但是对象本身还存在 map.remove("张三"); System.out.println(w.name);//aaa map.remove("李四"); Wife w1=(Wife)map.get("李四"); System.out.println(w1.name);//NullPointerException */ } } class Wife{ String name; public Wife(String name) { this.name=name; } }
package TestList; /** * map底层是数组+链表 */ import java.util.LinkedList; public class MyMapLinked { //List数组 LinkedList[] arr=new LinkedList[999]; int size; public void put(Object key,Object value) { //获取键值对象 MyEntry e=new MyEntry(key,value); //获取key的哈希值 int hash=key.hashCode(); hash=hash<0?-hash:hash; int a=hash%arr.length; if(arr[a]==null) { //创建List对象 LinkedList list=new LinkedList(); list.add(e);//将entry放入List arr[a]=list;//List放入array } else { //获取List对象 LinkedList list=arr[a]; for(int i=0;i<list.size();i++) { MyEntry e1=(MyEntry)list.get(i); if(e1.key.equals(key)) { e1.value=value; } } } } public Object get(Object key) { //获取key的哈希值 int a=key.hashCode()%arr.length; if(arr[a]!=null) { LinkedList list=arr[a]; for(int i=0;i<list.size();i++) { MyEntry e=(MyEntry)list.get(i); if(e.key.equals(key)) { return e.value; } } } return null; } public static void main(String[] args) { MyMapLinked map=new MyMapLinked(); map.put("张三","aaa"); map.put("李四","bbb"); map.put("李四","ccc"); System.out.println(map.get("张三"));//aaa System.out.println(map.get("李四"));//ccc } }
原文:https://www.cnblogs.com/hapyygril/p/12493120.html