JAVA初学下(仅做笔记)

一. Map集合(双列集合)

1.特点

键不能重复,值可以重复

JAVA初学下(仅做笔记)_第1张图片

Map接口位于最高层

JAVA初学下(仅做笔记)_第2张图片

2.常见API

2.1基本功能

JAVA初学下(仅做笔记)_第3张图片

    

    

①注意V put(K key,V value)这个方法,

当加入 的键值对元素的键(key) 不存在时,就会将 键值对 加到双列集合中,此时返回值为null

当加入 的键值对元素 的键(key)已在双列集合中存在时 ,就会 覆盖原有 键(key) 对应的值(value) ,并将value返回。

2.2Map集合的获取功能

JAVA初学下(仅做笔记)_第4张图片

3.对于接口内的接口很懵,回顾一下过去的内部类

3.1成员内部类

①两种 获取 成员内部类对象的方式

②Iterator迭代器是 集合的内部类,通过调用方法来获取对象。

JAVA初学下(仅做笔记)_第5张图片

 JAVA初学下(仅做笔记)_第6张图片

 JAVA初学下(仅做笔记)_第7张图片

 3.2ArrayList的Iterator  是成员内部类

JAVA初学下(仅做笔记)_第8张图片

3.2内部类怎样 使用外部类 的成员变量,成员方法。

注意Outer是一个类名,它是可以改变的,用 类名.this 来调用外部类的成员变量或方法

 3.3静态内部类

记得加new 后加括号,因为 此时是 创建内部类的对象,可以想象,平常创建对象的时候都会加括号,跟构造方法有关。

JAVA初学下(仅做笔记)_第9张图片

4.遍历方式

4.1通过 键 去找 值

通过 Map的keySet()方法可以获得 包含所有key的一个单列集合

 public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("海绵宝宝", 1);
        map.put("派大星", 2);
        map.put("章鱼哥", 3);
        //键找值
        //1.获取所有的键(key),放在一个单列集合中
        Set myKeySet = map.keySet();
        //通过迭代器遍历单列集合,并用Map的get(KEY k)方法来获取
        Iterator it = myKeySet.iterator();
        while (it.hasNext()) {
            String key = it.next();
            Integer value = map.get(key);
            System.out.println("key:" + key + "value:" + value);
        }
        //通过增强for遍历
        for (String key : myKeySet) {
            Integer value = map.get(key);
            System.out.println("key:" + key + "value:" + value);
        }
        //使用lambda表达式
        myKeySet.forEach(
                key -> {
                    Integer value = map.get(key);
                    System.out.println("key:" + key + "value:" + value);
                }
        );
    }

4.2通过 键值对对象 来获取 键和值

 public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("海绵宝宝", 1);
        map.put("派大星", 2);
        map.put("章鱼哥", 3);
        //Entry接口是 Map接口的内部接口,所以要用Map.Entry
        //这和内部类很像的,外部类.内部类  对象名=new 外部类().内部类()
        Set> entries = map.entrySet();
        //通过迭代器去遍历单列集合,不过这时候里面的类型是 Entry接口,
        // 这里使用接口的多态,为了方便学习该接口的一些方法
        Iterator> it = entries.iterator();
        while (it.hasNext()) {

            Map.Entry entry = it.next();
            Integer value = entry.getValue();
            String key = entry.getKey();
            System.out.println(key + " = " + value);
        }
//增强for遍历 遍历单列集合
        for (Map.Entry entry : entries) {
            Integer value = entry.getValue();
            String key = entry.getKey();
            System.out.println(key + " = " + value);
        }
        //lambda表达式遍历单列集合
        entries.forEach(
                stringIntegerEntry -> {
                    System.out.println(stringIntegerEntry.getKey() + " = " + stringIntegerEntry.getValue());

                });
    }

4.3通过lambda表达式遍历 双列集合

前面我们通过 键找值     键值对对象    两种方式 来获取 获取一个单列集合 并对其进行遍历。

现在,我们可以直接 里面 Map的forEach()方式来直接获取key和value。

对于Map的forEach的底层原理,其实是利用 增强for来完成的。

JAVA初学下(仅做笔记)_第10张图片

 Map map = new HashMap<>();
        map.put("海绵宝宝", 1);
        map.put("派大星", 2);
        map.put("章鱼哥", 3);

map.forEach(new BiConsumer() {
            @Override
            public void accept(String key, Integer value) {
                System.out.println(key + " = " + value);
            }
        });

二. Map接口 的实现类

JAVA初学下(仅做笔记)_第11张图片

 1.HashMap

1.1HashMap特点

JAVA初学下(仅做笔记)_第12张图片

JAVA初学下(仅做笔记)_第13张图片

JAVA初学下(仅做笔记)_第14张图片

 

 ①利用 key去计算哈希值,如果Key是 自定义引用类型 因此需要重写key的hashCode方法,如果不是自定义类型,不需要重写。

②在同一索引下有多个元素,当被添加的元素的哈希值通过计算得到的index为该索引时,就会 比较键(key)是否相同,若相同则 将要添加的元素的值(value)会 覆盖  原来集合中存在的键(key)的值。 

若key与索引下的所有元素的key不同,则会将key挂在链表下面。

在单列集合中 ,通过比较属性值是否相等来去重。

因此当自定义数据类型时,需要重写键(key)的equals方法。

JAVA初学下(仅做笔记)_第15张图片

 

1.2 练习1

1.3 回顾 怎样重写 equals()方法

 

你可能感兴趣的:(笔记)