Map笔记总结

Map :存储的是键值对,一对一对出现的,要保证键的唯一性.

Map常见的三个子类. 1.HashTable 底层是哈希表结构,不能存在null的情况.该集合是线程同步的.效率低 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
2.HashMap 底层是哈希表数据结构,允许null值和null键,该集合不同步. 效率高
3.TreeMap 底层是二叉树结构, 线程不同步,具备排序的特点.可以给Map集合中的键排序. 与Set很像,Set集合的底层就是使用了Map集合方法.

Map其共性方法有:

1.添加   put()   putAll() 2.删除   clear();   remove(); 3.判断   containsValue(Object value)   containsKey(Object key)   isEmpty(); 4.获取   get();   size();   values();

基本共性方法代码演示:

复制代码
import java.util.*;
class MapDemo
{
    public static void main(String [] args) { Map<String,String> map = new HashMap<String,String>(); //Hash无序的. //添加元素,添加了相同的键,后添加的值会将原先的键对应的值替换掉.put方法会返回原先被覆盖的值.  sop("Put :"+map.put("01","zhangsan01")); sop("Put :"+map.put("01","wangwu")); map.put("02","zhangsan02"); map.put("03","zhangsan03"); //判断是否包含 sop("containsKey : zhangsan01 "+"------"+map.containsKey("01")); //sop("remove : "+map.remove("03")); //找寻键,并打印出其对应的值: zhangsan03 //获取 sop("get : "+map.get("02")); map.put("04",null); sop("get : "+map.get("04")); //可以通过个get方法的返回值来判断一个 键 是否存在. 通过返回null来判断. //获取Map集合中的所有值 Collection<String> coll = map.values(); sop(coll); sop(map); } public static void sop(Object obj) { System.out.println(obj); } }
复制代码

 

Map的重点方法:   entrySet()   KeySet() 这两种方法就是Map集合取出元素的方式:

Map集合两种取出方式:

1.Set<k> keySet 将Map中所有的键存入到Set集合.Set具备迭代器,可以用迭代取出所有的键. 在根据get方法,获取每个键所对应的值.
Map集合取出原理:转成Set集合.在通过迭代器取出.

 

2.Set<Map.Entry<k,v>>  entrySet

将map集合中的 映射关系 存入到Set集合中,这个关系的数据类型是 : Map.Entry

其中Entry其实是一个内部接口.定义在map接口里面

格式如下: interface Map {   public static interface  Entry   {     public static void getValue();     public static void getKey();   }
}
class HashMap implements Map {   class Hash implements Map.Entry   {     public Object getValue(){};     public Object getKey(){};   } }

两种取出方式的代码演练:

复制代码
/*

Map集合两种取出方式:
    1.Set<k> keySet 
            将map中所有的键存入到Set集合.Set具备迭代器,可以用迭代取出所有的键.
            在根据get方法,获取每个键锁对应的值.
            
            Map集合取出原理:转成Set集合.在通过迭代器取出.
            
            
    2.Set<Map.Entry<k,v>>  entrySet ,将map集合中的 映射关系 存入到Set集合中,这个关系的数据类型是 : Map.Entry
    
    Entry其实是一个内部接口.定义在map接口里面
    interface Map
    {
        public static interface  Entry
        {
            public static void getValue();
            public static void getKey();
        }
        
    }
    
    class HashMap implements Map
    {
        class Hash implements Map.Entry
        {
            public Object getValue(){};
            public Object getKey(){};
        }
    }
    
*/

import java.util.*;
class MapDemo2 { public static void main(String [] args) { Map<String,String> map = new HashMap<String,String>(); map.put("01","zhangsan01"); map.put("02","zhangsan02"); map.put("03","zhangsan03"); map.put("04","zhangsan04"); //将map集合中的 映射关系 取出.  Set<Map.Entry<String,String>> mapEntry = map.entrySet(); Iterator<Map.Entry<String,String>> it = mapEntry.iterator(); while(it.hasNext()) { Map.Entry<String,String> me = it.next(); String key = me.getKey(); String value = me.getValue(); sop("Key :"+key+"Value :"+value); } /* //获取Map集合的所有键,并放在Set集合中. 获取方法: keySet(); Set<String> keySet = map.keySet(); //迭代取出所有的键. Iterator<String> it = keySet.iterator(); while(it.hasNext()) { String key = it.next(); //有了键以后可以通过Map集合的get(key)方法获取其对应的值. String value = map.get(key); sop("Key :"+key+" Value :"+value); } */ } public static void sop(Object obj) { System.out.println(obj); } }
复制代码

 

相关练习:

复制代码
/*
练习:
        
        每一个学生都有对应的归属地。
        键值对:    学生Student为键,地址类型String值。
        学生属性:姓名,年龄。
        注意:姓名和年龄相同的视为同一个学生。
        保证学生的唯一性。


        1.描述学生。

        2.定义map容器。将学生作为键,地址作为值。存入。

        3.获取map集合中的元素。


*/

import java.util.*;

class MapTest { public static void main(String [] args) { Map<Student,String> map = new HashMap<Student,String>(); map.put(new Student("zhangsan01",21),"beijing"); map.put(new Student("zhangsan02",22),"shanghai"); map.put(new Student("zhangsan03",23),"guangzhou"); map.put(new Student("zhangsan04",24),"shenzhen"); //第一种取出方式:keySet Set<Student> keySet = map.keySet(); Iterator<Student> it = keySet.iterator(); while(it.hasNext()) { Student stu = it.next(); String addr = map.get(stu); sop("第一种取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", address : "+addr); } sop("-----------------------------------------"); //第二种取出方式:entrySet  Set<Map.Entry<Student,String>> entrySet = map.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(); sop("第二种取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", adresss :"+addr); } } public static void sop(Object obj) { System.out.println(obj); } } 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) { if(!(s instanceof Student)) throw new ClassCastException("类型匹配失败"); 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*17; } public boolean equals(Object obj) { if(!(obj instanceof Student)) throw new ClassCastException("类型匹配失败"); Student stu = (Student)obj; return this.getName().equals(stu.getName()) && this.age==stu.age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
复制代码

转载于:https://www.cnblogs.com/wangtingyi/p/4757077.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值