> 文章列表 > JAVA初学下(仅做笔记)

JAVA初学下(仅做笔记)

JAVA初学下(仅做笔记)

一. Map集合(双列集合)

1.特点

键不能重复,值可以重复

Map接口位于最高层

2.常见API

2.1基本功能

    

    

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

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

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

2.2Map集合的获取功能

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

3.1成员内部类

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

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

 

 

 3.2ArrayList的Iterator  是成员内部类

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

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

 3.3静态内部类

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

4.遍历方式

4.1通过 键 去找 值

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

 public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("海绵宝宝", 1);map.put("派大星", 2);map.put("章鱼哥", 3);//键找值//1.获取所有的键(key),放在一个单列集合中Set<String> myKeySet = map.keySet();//通过迭代器遍历单列集合,并用Map的get(KEY k)方法来获取Iterator<String> 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<String, Integer> map = new HashMap<>();map.put("海绵宝宝", 1);map.put("派大星", 2);map.put("章鱼哥", 3);//Entry接口是 Map接口的内部接口,所以要用Map.Entry//这和内部类很像的,外部类.内部类  对象名=new 外部类().内部类()Set<Map.Entry<String, Integer>> entries = map.entrySet();//通过迭代器去遍历单列集合,不过这时候里面的类型是 Entry接口,// 这里使用接口的多态,为了方便学习该接口的一些方法Iterator<Map.Entry<String, Integer>> it = entries.iterator();while (it.hasNext()) {Map.Entry<String, Integer> entry = it.next();Integer value = entry.getValue();String key = entry.getKey();System.out.println(key + " = " + value);}
//增强for遍历 遍历单列集合for (Map.Entry<String, Integer> 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来完成的。

 Map<String, Integer> map = new HashMap<>();map.put("海绵宝宝", 1);map.put("派大星", 2);map.put("章鱼哥", 3);map.forEach(new BiConsumer<String, Integer>() {@Overridepublic void accept(String key, Integer value) {System.out.println(key + " = " + value);}});

二. Map接口 的实现类

 1.HashMap

1.1HashMap特点

 

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

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

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

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

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

 

1.2 练习1

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