Map集合 笔记

Map集合

地图不能包含重复的键,每个键可以映射到最多一个值,是一个接口HashMap保证键的唯一性
Map集合 笔记_第1张图片

//创建集合对象
Map map = new HashMap(); 
//map里添加元素 V put(K key , V value)将指定的值与该映射中的指定关键词相关联
map.put("itheima001","张曼玉");
map.put("itheima002","王祖贤");
map.put("itheima003","林青霞");
sout(map);

Map集合 笔记_第2张图片
HahMap重写了toString方法,把键和值用等号拼接起来,然后输出,键是唯一的,不能重复,当键重复的时候,我们后来的值就会把以前的值覆盖掉
Map集合 笔记_第3张图片

Map集合的基本功能

Map集合 笔记_第4张图片

//创建集合对象
Map map = new HashMap(); 
//map里添加元素 V put(K key , V value)
map.put("张无忌","赵敏");
map.put("郭靖","黄蓉");
map.put("杨过","小龙女");

//根据键删除键值对元素 V remove(Object key); 然后返回键值对对应的元素
sout(map.remove(key:"郭靖"));//输出键值郭靖对应的元素黄蓉
sout(map.remove(key:"郭襄"));//输出键值对郭襄对应的元素,发现没有键值郭襄,所以返回空元素null

//清除所有键值对元素 void clear
map.clear();

//判断集合是否包含指定的键 boolean containsKey(Object key);
sout(map.containsKey(key:"郭靖"));//判断集合是否包含郭靖这个键,发现包含则返回true;
sout(map.containsKey(key:"郭襄"));//判断集合是否包含郭襄这个键,发现不包含就返回false;

//判断集合是否为空 boolean isEmpty
sout(map.isEmpty());

//测试集合长度 int size();
sout(map.size());

//输出集合对象
sout(map);

Map集合 笔记_第5张图片
删除
Map集合 笔记_第6张图片
清空
Map集合 笔记_第7张图片
判断是否包含指定的键
Map集合 笔记_第8张图片
判断集合是否为空
Map集合 笔记_第9张图片
测试集合长度
Map集合 笔记_第10张图片

Map集合的获取功能

Map集合 笔记_第11张图片

//根据键获取值V get(Object key);
sout(map.get("张无忌"));
sout(map.get("张三丰"));//如果说获取的键或者获取的键的元素在集合中不存在就返回null,如果存在就返回键对应额值

//获取所有键的集合Set keySet();
Set keySet = map.keySet();
//增强for循环遍历
for(String key : keySet){
    sout(key);
}

///获取所有值的集合Collection values();
Collection values = map.values();
//增强for循环遍历
for(String value : values){
    sout(value);
}

根据键获取值
Map集合 笔记_第12张图片
获取所有的集合
Map集合 笔记_第13张图片
获取所有的集合
Map集合 笔记_第14张图片

Map集合的遍历

方式一

遍历键,通过键去找对应的值再输出
Map集合 笔记_第15张图片

//获取所有键的集合Set keySet();
Set keySet = map.keySet();
//增强for循环遍历每一个键
for(String key : keySet){
    //根据键去找值,用get方法实现
   String value = map.get(key);
   sout(key +","+ value);
}

输出结果
Map集合 笔记_第16张图片

方式二

获取所有键值对对象的集合,找到对象提取里面的键和值
Map集合 笔记_第17张图片

//获取所有键值对对象的集合Set> entrySet();
Set> entrySet = map.entrySet();//前面是键,后面是值
//遍历键值对对象的集合,得到每一个键值对对象
for( me : entrySet){
    //根据键值对对象获取键和值
    String key = me.getKey();
    String value = me.getValue();
    sout(key +","+ value);
}

输出结果
Map集合 笔记_第18张图片

案例 HashMap存储学生对象并遍历

Map集合 笔记_第19张图片
学生类
Map集合 笔记_第20张图片
创建HashMap集合

//创建HashMap集合对象 键是String类型,值是student类型
HashMap hm = new HashMap();
//创建学生对象
Student s1 = mew Student(name:"林青霞",age:30);
Student s2 = mew Student(name:"张曼玉",age:35);
Student s3 = mew Student(name:"王祖贤",age:33);

//将学生添加到集合
hm.put("itheima001",s1);
hm.put("itheima002",s2);
hm.put("itheima003",s3);

//遍历
//方式1 键找值
Set keySet = hm.keySet();
//增强for循环遍历每一个键
for(String key : keySet){
    //根据键去找值,用get方法实现
   Student value = hm.get(key);
   sout(key +","+ value.getName()+","+ value.getAge());
}


//方式2 遍历键值对对象找键和值
Set> entrySet = hm.entrySet();//前面是键,后面是值
for( me : entrySet){
    //根据键值对对象获取键和值
    String key = me.getKey();
    Student value = me.getValue();
    sout(key +","+ value.getName()+","+ value.getAge());
}

输出结果
Map集合 笔记_第21张图片

案例 HashMap存储学生对象并遍历(和上面不一样)

保证键的唯一性,自定义保证唯一性,这次学生作为键存在,并且保证唯一性,因为键是唯一的,所以学生就唯一,
Map集合 笔记_第22张图片
学生类
Map集合 笔记_第23张图片
创建HashMap集合

//创建HashMap集合对象 键是student类型,值是String类型,
HashMap hm = new HashMap();
//创建学生对象
Student s1 = mew Student(name:"林青霞",age:30);
Student s2 = mew Student(name:"张曼玉",age:35);
Student s3 = mew Student(name:"王祖贤",age:33);

//将学生添加到集合 值是位置
hm.put(s1,"西安");
hm.put(s2,"武汉");
hm.put(s3,"郑州");

//遍历
//方式1 键找值
Set keySet = hm.keySet();
//增强for循环遍历每一个键
for(Student key : keySet){
    //根据键去找值,用get方法实现
   String value = hm.get(key);
   sout(key.getName() +","+ key.getAge()+","+value);
}

输出
Map集合 笔记_第24张图片

如果我新建的两个对象成员内容是一样的,那么我们认为是同一个对象,重复的元素,所以s4在添加的时候如果键是一样的,s4应该会覆盖掉s3的位置
//创建HashMap集合对象 键是student类型,值是String类型,
HashMap hm = new HashMap();
//创建学生对象
Student s1 = mew Student(name:"林青霞",age:30);
Student s2 = mew Student(name:"张曼玉",age:35);
Student s3 = mew Student(name:"王祖贤",age:33);

Student s4 = mew Student(name:"王祖贤",age:33);

//将学生添加到集合 值是位置
hm.put(s1,"西安");
hm.put(s2,"武汉");
hm.put(s3,"郑州");

hm.put(s4,"北京");

//遍历
//方式1 键找值
Set keySet = hm.keySet();
//增强for循环遍历每一个键
for(Student key : keySet){
    //根据键去找值,用get方法实现
   String value = hm.get(key);
   sout(key.getName() +","+ key.getAge()+","+value);
}

键相同值应该覆盖掉,如果覆盖掉需要重写hashCode()和equals()方法
Map集合 笔记_第25张图片
重写 alt+insert重写
Map集合 笔记_第26张图片
Map集合 笔记_第27张图片

案例 ArrayList集合存储 HashMap元素并遍历

Map集合 笔记_第28张图片
Map集合 笔记_第29张图片

//创建ArrayList集合
ArrayList> array = new ArrayList>();

//创建HashMap集合并添加键值对元素
HashMap hm1 = new HashMap(); 
hm1.put("孙策","大乔");
hm1.put("周瑜","小乔");
//把HashMap作为元素添加到ArrayList集合
array.add(hm1);

HashMap hm2 = new HashMap(); 
hm2.put("郭靖","黄蓉");
hm2.put("杨过","小龙女");
//把HashMap作为元素添加到ArrayList集合
array.add(hm2);

HashMap hm3 = new HashMap(); 
hm3.put("令狐冲","任盈盈");
hm3.put("林平之","岳灵珊");
//把HashMap作为元素添加到ArrayList集合
array.add(hm3);


//遍历ArrayList集合
for(HashMap hm : array){
    Set keySet = hm.KeySet();
    for(String key : keySet){
        String value = hm.get(key);
        sout(key +","+ value);
    }
}

输出结果
Map集合 笔记_第30张图片

案例 HashMap集合存储ArrayList元素并遍历

Map集合 笔记_第31张图片
Map集合 笔记_第32张图片

//创建HashMap集合,键是String类型,值是ArrayList类型
HashMap> hm = new HashMap>(); 

//创建ArrayList集合,并添加元素
ArrayList sgyy = new ArrayList();
//添加元素
sgyy.add("诸葛亮");
sgyy.add("赵云");
//把ArrayList集合作为元素添加到HashMap集合
hm.put("三国演义",sgyy);


//创建ArrayList集合,并添加元素
ArrayList xyj = new ArrayList();
//添加元素
xyj.add("唐僧");
xyj.add("孙悟空");
//把ArrayList集合作为元素添加到HashMap集合
hm.put("西游记",xyj);


//创建ArrayList集合,并添加元素
ArrayList shz = new ArrayList();
//添加元素
shz.add("武松");
shz.add("鲁智深");
//把ArrayList集合作为元素添加到HashMap集合
hm.put("水浒传",shz);

//遍历 遍历HashMap集合
Set keySet = hm.KeySet();
for(String key : keySet){
    sout(key);
    ArrayList value = hm.get(key);
    //遍历ArrayList集合
    for(String s : value){ 
        sout("\t"+s);
    } 
}

输出结果
Map集合 笔记_第33张图片

案例 统计字符串中每个字符出现的次数

Map集合 笔记_第34张图片
Map集合 笔记_第35张图片

//键盘录入一个字符串
Scanner sc = new Scanner(System.in);
sout("请输入一个字符串:");
String line = sc.nextLine();

//创建HashMap集合,键是Character,值是Interger
HashMap hm = new HashMap(); 

//遍历字符串得到每一个字符
for(int i = 0;i keySet = hm.keySet();
for(Character key : keySet){
    Interger value = hm.get(key);
    sb.append(key).append("(").append(value).append(")");    
}//此时里面四StringBuilder类型,需要转化成String类型
String result = sb.toString();

//输出结果
sout(result);

Map集合 笔记_第36张图片
TreeMap可以对键进行排序
Map集合 笔记_第37张图片
Map集合 笔记_第38张图片

你可能感兴趣的:(java)