发表于: 2019-11-16 21:59:45

1 1208


准备收尾任务一

暂时没遇到什么问题

明天的计划 把任务一遗留问题解决进入任务二

收获:复习基础知识集合框架 Map 面试常问的知识点

* A:Map接口概述   
*查看API可以知道:
*将键映射到值的对象
*一个映射不能包含重复的键
*每个键最多只能映射到一个值
* B:Map接口和Collection接口的不同
* Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口)
* Map的键唯一,Collection的子体系Set是唯一的
* Map集合的数据结构值针对键有效,跟值无关;如:TreeMap:键是用二叉树算法,HashMap:键是hash算法
        * Collection集合的数据结构是针对元素有效

图解


 A:Map集合的功能概述
* a:添加功能
* V put(K键,V值):添加元素。
*如果键是第一次存储,就直接存储元素,返回null
*如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
* b:删除功能
* void clear():可移除所有的键值对元素(先删除建后删除值都删除)
* V remove(Object key):根据键删除键值对元素,并把值返回
* c:判断功能
* boolean containsKey(Object key):判断集合是否包含指定的键
* boolean containsValue(Object value):判断集合是否包含指定的值
* boolean isEmpty():判断集合是否为空
* d:获取功能
* Set <Map.Entry <K,V >> entrySet():
* V get(Object key):根据键获取值
* Set <K> keySet():获取集合中所有键的集合
* Collection <V> values():获取集合中所有值的集合
* e:长度功能

* int size():返回集合中的键值对的个数


import java.util.Collection;

import java.util.HashMap;

import java.util.Map;

public class Demo1_Map {

public static void main(String[] args) {

//demo1();//添加数据

//demo2();//删除数据,判断是否包含键或者值

demo3();//获取map中的所有的值

}

private static void demo3() {

Map<String, Integer> map = new HashMap<>();

map.put("张三", 23);

map.put("李四", 24);

map.put("王五", 25);

map.put("赵六", 26);

Collection<Integer> c = map.values();

System.out.println(c);

System.out.println(map.size());

}

public static void demo2() {

Map<String, Integer> map = new HashMap<>();

map.put("张三", 23);

map.put("李四", 24);

map.put("王五", 25);

map.put("赵六", 26);

//Integer value = map.remove("张三"); //根据键删除元素,返回键对应的值

//System.out.println(value);

System.out.println(map.containsKey("张三")); //判断是否包含传入的键

System.out.println(map.containsValue(100)); //判断是否包含传入的值

System.out.println(map);

}

public static void demo1() {

Map<String, Integer> map = new HashMap<>();

Integer i1 = map.put("张三", 23);//存入的过程先判断有没有"张三",没有就添加,有就覆盖,返回的是被覆盖的部分

Integer i2= map.put("李四", 24);

Integer i3 = map.put("王五", 25);

Integer i4 = map.put("赵六", 26);

Integer i5 = map.put("张三", 26); //相同的键不存储,值覆盖,把被覆盖的值返回

System.out.println(map);

System.out.println(i1);

System.out.println(i2);

System.out.println(i3);

System.out.println(i4);

System.out.println(i5);

}

}


(Map集合的遍历之键找值)
* A:键找值思路:
* 获取所有键的集合
* 遍历键的集合,获取到每一个键
* 根据键找值

图解:

public class Demo2_Iterator {

/**

* 通过查看Map集合的api发现没有iterator方法,那么双列集合如何迭代呢?

* 根据键获取值

*/

public static void main(String[] args) {

//demo1();//使用keySet方法,通过获取所有的键的集合,在遍历此集合,根据键再获取其对应的值

demo2();

}

private static void demo1() {

Map<String, Integer> map = new HashMap<>();

map.put("张三", 23);

map.put("李四", 24);

map.put("王五", 25);

map.put("赵六", 26);

// Integer i = map.get("张三"); //根据键获取值

// System.out.println(i);

//获取所有的键

Set<String> keySet = map.keySet(); //获取所有键的集合

Iterator<String> it = keySet.iterator(); //获取迭代器

while(it.hasNext()) { //判断集合中是否有元素

String key = it.next(); //获取每一个键

Integer value = map.get(key); //根据键获取值

System.out.println(key + "=" + value);

}

}

//使用增强for循环

private static void demo2() {

Map<String, Integer> map = new HashMap<>();

map.put("张三", 23);

map.put("李四", 24);

map.put("王五", 25);

map.put("赵六", 26);

//使用增强for循环遍历

for(String key : map.keySet()) { //map.keySet()是所有键的集合

System.out.println(key + "=" + map.get(key));

}

}

}

Map集合的遍历之键值对对象找键和值)
* A:键值对对象找键和值思路:
* 获取所有键值对对象的集合
* 遍历键值对对象的集合,获取到每一个键值对对象
* 根据键值对对象找键和值
* B:案例演示
* C:源码分析

LinkedHashMap的特点
* 底层是链表实现的可以保证怎么存就怎么取
TreeMap集合键是Student值是String的案例,可以实现按照键值进行排序)
* TreeMap集合键是Student值是String的案例(按照年龄排序,年龄相等按照姓名排序
 HashMap和Hashtable的区别
* Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
* Hashtable不可以存储null键和null值,HashMap可以存储null键和null值
总结:
    /**
     * Collection
     *         List(存取有序,有索引,可以重复)
     *             ArrayList
     *                 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
     *             LinkedList
     *                 底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
     *             Vector
     *                 底层是数组实现的,线程安全的,无论增删改查都慢
     *             如果查找和修改多,用ArrayList
     *             如果增和删多,用LinkedList
     *             如果都多,用ArrayList
     *         Set(存取无序,无索引,不可以重复)
     *             HashSet
     *                 底层是哈希算法实现
     *                 LinkedHashSet
     *                     底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
     *             TreeSet
     *                 底层是二叉树算法实现
     *             一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
     *             TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别
     * Map
     *         HashMap
     *             底层是哈希算法,针对键
     *             LinkedHashMap
     *                 底层是链表,针对键
     *         TreeMap
     *             底层是二叉树算法,针对键
     *         开发中用HashMap比较多
     */



返回列表 返回列表
评论

    分享到