Java之HashMap和TreeMap

Map集合概述

Collection接口下的集合,元素都是单个存储的,称为单列集合。

比如身份证和个人,学生与学号,这种一一对应的关系叫做映射。

Java中提供了Map集合,用于保存具有映射关系的数据,称为双列集合。

Map集合特点

Map<K,V>

Map是一种键值对集合,每一个元素都包含了一个键对象和一个值对象。

Map集合中,键不允许重复,值可以重复。(比如身份证和姓名)

键和值是一一对应的,通过键可以找到与之对应的唯一的值。

HashMap

常用方法

项目Value
V put(K key,V value)添加元素
V get(Object key )根据指定的值在Map中取得对应的值
V remove(Object key )根据键删除键值对元素
void clear()移除所有的键值对元素,清空Map集合
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()获取集合的长度,也就是集合中键值对的个数
 public static void main(String[] args) {
        //HashMap<键,值>
        HashMap<String, String> hashMap = new HashMap<>();

        //put添加
        hashMap.put("001","张三");
        hashMap.put("002","李四");
        hashMap.put("003","王五");
        hashMap.put("003","王五");//键相同时,键不变,值被覆盖

        //remove根据键删除
        hashMap.remove("001");

        //get根据键获取
        String s = hashMap.get("002");
        System.out.println(s);

        //clear清空
        hashMap.clear();

        //判断containsKey()包含键,存在返回true
        System.out.println(hashMap.containsKey("001"));

        //containsValue() 包含值
        System.out.println(hashMap.containsValue("张三"));

    }

集合遍历

根据键找值遍历

键找值遍历

1.从集合中获取所有的键

2.遍历这个集合,根据每个键获取值

public static void main(String[] args) {
        //HashMap<键,值>
        HashMap<String, String> hashMap = new HashMap<>();

        //put添加
        hashMap.put("001","张三");
        hashMap.put("002","李四");
        hashMap.put("003","王五");
        hashMap.put("003","王五");//键相同时,键不变,值被覆盖

        //键找值遍历
        //1.从集合中获取所有的键
        Set<String> set = hashMap.keySet();
        //2.遍历这个集合,根据每个键获取值
        for(String s : set){
            String value = hashMap.get(s);
            System.out.println(s+":"+value);
        }
    }

根据键值对遍历

1.获取键值对的集合 entrySet()

2.遍历set集合,获取每个entry对象的键值对 getkey() getvalue()

public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<>();

        //put添加
        hashMap.put("001","张三");
        hashMap.put("002","李四");
        hashMap.put("003","王五");
        hashMap.put("003","王五");//键相同时,键不变,值被覆盖

        //1.获取键值对的集合  entrySet()
        Set<Map.Entry<String, String>> set = hashMap.entrySet();

        //2.遍历set集合,获取每个entry对象的键值对 getkey()  getvalue()
        for (Map.Entry<String,String> entry : set){
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+":"+value);
        }
    }

HashMap详情

HashSet底层其实就是借助了HashMap实现存储

//HashSet构造方法就是去new了一个HashMap
public HashSet() {
        map = new HashMap<>();
    }

所以HashSet和HashMap用法相差不大

链接: HashSet

HashMap<键,值>
保证键的唯一,默认是根据键的地址判断是否重复,需要重写键的equals和hashCode方法

重写后:

public static void main(String[] args) {
        HashMap<Student, String> hashMap = new HashMap<>();
        hashMap.put(new Student("张三",22),"广州");
        hashMap.put(new Student("李四",11),"深圳");
        hashMap.put(new Student("王五",45),"北京");
        hashMap.put(new Student("王五",45),"成都");//键保存不变,值进行覆盖

        //键值对方式
        Set<Map.Entry<Student, String>> entries = hashMap.entrySet();
        for (Map.Entry<Student,String> map:entries){
            Student key = map.getKey();
            String value = map.getValue();
            System.out.println(key.getName()+","+key.getAge()+","+value);
        }
    }

在这里插入图片描述

TreeMap

TreeSet底层就是使用了TreeMap实现存储的

链接: TreeSet

 public static void main(String[] args) {
        //自然排序数字类型
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        treeMap.put(2,"张三");
        treeMap.put(1,"李四");
        treeMap.put(4,"王五");
        System.out.println(treeMap);

        //字符串按编码顺序排序
        TreeMap<String, String> treeMap2 = new TreeMap<>();
        treeMap2.put("D","张三");
        treeMap2.put("A","李四");
        treeMap2.put("B","王五");
        System.out.println(treeMap2);

        TreeMap<Student, String> treeMap3 = new TreeMap<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getAge() - o2.getAge();
            }
        });
        treeMap3.put(new Student("张三",22),"广州");
        treeMap3.put(new Student("李四",11),"深圳");
        treeMap3.put(new Student("王五",45),"北京");
        treeMap3.put(new Student("王五",45),"成都");

    }

最后

如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值