Map和Set(Java)

1.搜索

1.1概念

Map和Set是一种专门用来进行搜索的容器或者是数据结构,其搜索的效率与其具体的实例化子类有关。Map和Set是一种适合动态查找的集合容器。

1.2模型

一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-Value的键值对,所以模型会有两种:
1.纯Key模型,比如:
快速查找某个名字在不在通讯录中;
2.Key-Value模型,比如:
学校的管理系统,每个人的学号都对应着自己的一个名字。学校就相当于Key,姓名,性别,身高,体重,年龄,年级…就相当于于value.
Map中存储的就是Key-Value这样的键值对,Set中只存储了Key。 Key-value键值对根据Key来找Value。

2.Map的使用

TreeSet 和HashSet用法相同,底层实现不同
在这里插入图片描述
TreeMap和HashMap用法相同,底层实现不同。
在这里插入图片描述
如果是根据Key找Value的内容,就使用Map。

import java.util.HashMap;
import java.util.Map;
public static TestMap(){
   public static void main(Strings [] args){
   Map<String,String> map=new HashMap<>();
   //1.使用put方法插入键值对
   //Map内部的元素之间的先后顺序和插入顺序关系不大
   //当put的时候,发现Key已经存在,此时就会覆盖原有的Value
   map.put("及时雨","宋江");
   map.put("黑旋风"."李逵");
   map.put("行者","武松");
   map.put("及时雨","宋公明");
   System.out.println(map);
   //2.使用get方法,根据Key获取Value
   //如果要是Key不存在,get返回null
   String value=map.get("行者");
   System.out.println(value);
   //3。还可以使用getOrDefault来根据key获取value
   //如果Key不存在,getOrDefault返回一个默认值
   String value2=map.getOrDefault("小李广","花荣");
   System.out.println(value2);
   //4.使用isEmpty判定空
   System.out.println(map.isEmpty());
   //5.使用size方法来获取到键值对的个数
   System.out.println(map.size());
   //6.使用clear来清空所有的键值对
   map.clear();
   System.out.println(map.isEmpty());
   System.out.pringln(map.size());
   //6.遍历map(Map设计出来不是为了遍历)
   //遍历Map是比较复杂的,需要先把Map转换为Set
   for(Map.Entry<String,String> entry:map.entrySet()){
   //map.entrySet()把Map这样的键值对结构进行了转换
   //转换成了一个Set,Set里面的每一个元素都是Entry
   //每个Entry里面包含了Key和Value
   System.out.println(entry.getKey()+":"+entry.getValue());
   	}
   	//8.还可以单独获取到所有的Key和所有的Value
   	for(String key:map.getKey()){
   	System.out.println(key);
   		}
   	for(String value:map.vales()){
   		System.out.println(value);
   		}
   }
}

3.Set的使用

如果只是判定Key是否存在,则需要使用Set.

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestSet {
    public static void main(String[] args) {
        Set<String> set=new HashSet<>();
        //因为Set继承自collection,所以collection的add,contains,remove方法都适用
        //1.适用add插入元素
        //如果出现重复的Key,只保存一份
        //借助set这样的特性,可以去重
        set.add("C++");
        set.add("python");
        set.add("c");
        set.add("java");
        set.add("java");
        System.out.println(set);

        //2.使用contains方法判断元素是否存在
        boolean ret=set.contains("java");
        System.out.println(ret);

        //3.使用remove方法进行删除元素
        set.remove("java");
        System.out.println(set);
        //Set中的元素不能改,如果非要改,则需要删除在插入

        //4.使用isEmpty来判空
        System.out.println(set.isEmpty());
        //5.使用size来确定元素个数
        System.out.println(set.size());
        //6.使用clear清空元素
        set.clear();
        System.out.println(set.isEmpty());
        System.out.println(set.size());
        
        //7.遍历
        //1)直接使用for-each进行遍历
        //啥样的类能使用for-each,如果能支持迭代器
        //迭代:实现了Iterator接口
        for(String key:set){
            System.out.println(key);
        }
        //2)使用迭代器进行迭代
        //迭代器存在的意义就是遍历集合类
        Iterator<String> it=set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值