Map的认识和基础理解

Map<Key,Value>

Map集合类是一个基于哈希表实现的接口,下面有实现类HashMap
SortedMap是继承自Map的接口,实现类为TreeMap

在这里插入图片描述

HashMap

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)

1.7版本HashMap基于的数据结构是数组+链表
1.8版本基于的是数据结构是数组+链表+红黑树.

这里只是简单的整理一下hashMap的使用

构造方法:
在这里插入图片描述
常用的方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("苹果", 123);
        map.put("梨", 456);
        map.put("西瓜", 789);
        //for (String key : map.keySet()) {
        //    Integer value = map.get(key);
        //    System.out.println(key + " = " + value);
      //  }
      for(Map.Entry<String,Integer> e:map.entrySet()){
      string key=e.getKey();
      Integer value=e.getValue();
      System.out.println(key + " = " + value);
    }
}

最后注意:hashMap是无序的

TreeMap

TreeMap 是一个有序的key-value集合,它是通过红黑树实现的

这里也只记录一下简单的用法.

构造方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基本用法与hashmap相同, 最后TreeMap是有序的

所以使用TreeMap时,放入的Key,必须实现Comparable的接口
String Integger 这些类已经实现了Comparable接口,可直接使用.如果没有实现Comparable接口,就需要自定义一个排序算法.
例:下面这个student类实现Comparable接口,覆写CompareTo()

import java.util.*;

public class Test {
    public static void main(String[] args) {
        Map<Student, Integer> map = new TreeMap<>();

        map.put(new Student("张三", 89), 1);
        map.put(new Student("李四", 46), 2);
        map.put(new Student("王五", 49), 3);
        for (Student key : map.keySet()) {
            System.out.println(key);
        }
        System.out.println(map.get(new Student("张三", 89)));
    }
}

class Student implements Comparable<Student> {
    public String name;
    public int score;
    Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    @Override
    public int compareTo(Student o) {
        Student p = (Student) o;
        if (this.score == p.score) {
            return 0;
        }
        return this.score < p.score ? -1 : 1;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值