Java 集合Map --16

来源:互联网 发布:js 禁止div滚动条事件 编辑:程序博客网 时间:2024/05/16 11:53

Map集合

该集合存储键值对。
一对一对往里存,而且要保证键的唯一性
1.添加元素
这里写图片描述
2.删除
clear()
3.判断
containsKey(Object key)
containsValue(Object value)
4.获取
get(Object key)
size()
values()

entrySet()
keySet()

Map集合:
|–Hashtable
底层是哈希表数据结构,不可以存入null值和null健。该集合是线程同步的,jdk1.0出现的,效率低
|–HashMap
底层是哈希表数据结构,允许使用null值和null健。该集合是不同步的,jdk1.2出现的,效率高
|–TreeMap
底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序
和Set很像,Set底层就是使用了Map集合

import java.util.*;class MapDemo{    public static void main(String[] args)    {        Map<Integer,String> map = new HashMap<Integer,String>();        //添加元素        //put方法新的值会替换老的值        map.put(01,"zhangsan1");        map.put(02,"zhangsan2");        map.put(03,"zhangsan3");        sop("containsKey:"+map.containsKey(02));        sop("containsValue:"+map.containsValue("zhangsan3"));        //sop("remove:"+map.remove(02));        //获取        sop("get:"+map.get(02));        sop(map);        //获取map集合中所有的值        Collection<String> coll = map.values();        sop(coll);        //HashMap可以使用null值和null健        map.put(null,"haha");        sop("get:"+map.get(null));    }    public static void sop(Object obj)    {        System.out.println(obj);    }}

这里写图片描述

map集合的两种取出方式

1,Set keySet
将map中所有的键存入到Set集合,因为set具备迭代器。
所以可以迭代方式取出所有的键。再根据get方法,获取每一个键对应的值

Map集合的取出原理:将map集合转成set集合,再通过迭代器取出

import java.util.*;class MapDemo22{    public static void main(String[] args)    {        Map<String,String> map = new HashMap<String,String>();        //添加元素        map.put("02","zhangsan1");        map.put("03","zhangsan2");        map.put("04","zhangsan3");        map.put("01","zhangsan4");        //先获取map集合 所有键的Set集合,keySet();        Set<String> keySet = map.keySet();        //有了Set集合,就可以获取其迭代器        Iterator<String> it = keySet.iterator();        while(it.hasNext())        {            String key = it.next();            //有了键可以通过map集合的get方法获取其对应的值            String value = map.get(key);            System.out.println("key:"+key+",value:"+value);        }    }   }

这里写图片描述
这里写图片描述

Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口

interface Map{    public static interface Entry    {        public abstract Object getKey();        public abstract Object getValue();    }}class HashMap implements Map.Entry{       class Hash implements Map.Entry    {        public Object getKey(){}        public Object getValue(){}    }}
import java.util.*;class MapDemo2{    public static void main(String[] args)    {        Map<String,String> map = new HashMap<String,String>();        //添加元素        map.put("02","zhangsan1");        map.put("03","zhangsan2");        map.put("04","zhangsan3");        map.put("01","zhangsan4");        //将Map集合中的映射关系取出。存入到Set集合中。        Set<Map.Entry<String,String>> entrySet = map.entrySet();        Iterator<Map.Entry<String,String>> it = entrySet.iterator();        while(it.hasNext())        {            Map.Entry<String,String> me = it.next();//获取关系            String key = me.getKey();//获取键            String value = me.getValue();//获取值            System.out.println(key+":"+value);        }    }}

这里写图片描述

练习

每一个学生都有对应的归属地
学生属性:姓名,年龄
注意:姓名年龄相同视为同一个学生
保证学生的唯一性

1,描述学生
2,定义map容器,将学生作为健,地址作为值,存入
3,获取map集合中的元素

import java.util.*;class Student implements Comparable<Student>{    private String name;    private int age;    Student(String name,int age)    {        this.name = name;        this.age = age;    }    public int compareTo(Student s)    {        int num = new Integer(this.age).compareTo(new Integer(s.age));        if(num==0)            return this.name.compareTo(s.name);        return num;     }    public int hashCode()    {        return name.hashCode()+age*34;    }    public boolean equals(Object obj)    {        if(!(obj instanceof Student))            throw new ClassCastException("类型不匹配");        Student s = (Student)obj;        return this.name.equals(s.name) && this.age==s.age;    }    public String getName()    {        return name;    }    public int getAge()    {        return age;    }    public String toString()    {        return name+".."+age;    }}class MapTest{    public static void main(String[] args)    {        HashMap<Student,String> hm = new HashMap<Student,String>();        hm.put(new Student("lisi03",22),"beijing");        hm.put(new Student("lisi03",23),"beijing");        hm.put(new Student("lisi02",21),"chongqing");        hm.put(new Student("lisi02",21),"wuhan");        hm.put(new Student("lisi00",25),"jilin");        hm.put(new Student("lisi",20),"shanghai");        //第一种取出方式  keySet        Set<Student> keySet = hm.keySet();        Iterator<Student> it = keySet.iterator();        while(it.hasNext())        {            Student stu = it.next();            String addr = hm.get(stu);            System.out.println(stu+".."+addr);        }        //第二种取出方式  entrySet        Set<Map.Entry<Student,String>> entrySet = hm.entrySet();        Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();        while(iter.hasNext())        {            Map.Entry<Student,String> me = iter.next();            Student stu = me.getKey();            String addr = me.getValue();            System.out.println(stu+"....."+addr);        }    }}

这里写图片描述

可以排序的Map集合。TreeMap

import java.util.*;class StuNameComparator implements Comparator<Student>{    public int compare (Student s1,Student s2)    {        int num = s1.getName().compareTo(s2.getName());        if(num==0)            return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));        return num;    }}class MapTest2{    public static void main(String[] args)    {        TreeMap<Student,String> tm = new TreeMap<Student,String>(new StuNameComparator());        tm.put(new Student("lisi6",23),"nanjing");        tm.put(new Student("alisi1",22),"beijing");        tm.put(new Student("lisi4",21),"shanghai");        tm.put(new Student("blisi3",24),"wuhan");        tm.put(new Student("lisi2",25),"tianjin");        Set<Map.Entry<Student,String>> entrySet = tm.entrySet();        Iterator<Map.Entry<Student,String>> it = entrySet.iterator();        while(it.hasNext())        {            Map.Entry<Student,String> me = it.next();            Student stu = me.getKey();            String addr = me.getValue();            System.out.println(stu+":::"+addr);        }    }}

这里写图片描述

0 0
原创粉丝点击