• 第十八天笔记


    黑马程序员 <a href="http://www.itheima.com" target="blank">java培训</a>

    第十八天笔记

    1.Map集合概述和特点

    Collection集合---set list 它们都是单列集合

    Map-----它是一个双列结合,它在存储是是以key-value存在的,它的key值是唯一的。

    Map是一个接口,它和collection无关,它们是并列结构。

    2.Map集合的功能概述

    主要学习:hashmap   treemap

    Map中的方法:

    3.添加操作 put

    Public object put(Object key,Object value)

    参数:key value 表示要存储的键值对

    返回值:如果为null,代表key不重复,key-value存储了,如果不为null,代表key重复了,返回的是被替换的元素。

    1. 获取操作 get

    Public object get(Object key)

    作用:根据key获取相应的value值。

    1. 获取操作 keySet

    Public Set keySet()

    作用:获取map集合中所有key的一个Set集合。

    1. 获取操作 vslues

    Public  Collection  vslues()

    作用:获取map中的value的一个Collection集合

    1. 获取操作 entrySet

    Public  set<Entry>  entrySet()

    作用:获取所有的key-value映射的一个set集合。

    1. 删除操作  clear

    Public void clear()

    Public Object remove(Object key)

    作用:根据key解除映射关系,返回的就是value值。

    1. 得到集合的长度

    Public int size();

    1. 判断操作

    Public boolan isEmpty()

    Public Boolean containsKey( Object  key) 判断是否包含指定的key值

    Public Boolean containsValue(Object value) 判断是否包含指定的value值

    public class MapDemo2 {
    
        public static void main(String[] args) {
    
            // putTest();
            // clearTest();
    
            // removeTest();
            checkTest();
        }
    
        // 1.存储 put
        public static void putTest() {
            Map<String, Integer> map = new HashMap<String, Integer>();
            System.out.println(map.put("张三", 10));
            map.put("李四", 20);
            map.put("王五", 30);
            System.out.println(map.put("张三", 100));
            System.out.println(map);
        }
    
        // 2.删除
        public static void clearTest() {
            Map<String, Integer> map = new HashMap<String, Integer>();
            map.put("李四", 20);
            map.put("王五", 30);
    
            map.clear();// 清空map
    
            System.out.println(map);
        }
    
        // 3.remove
        public static void removeTest() {
            Map<String, Integer> map = new HashMap<String, Integer>();
            map.put("李四", 20);
            map.put("王五", 30);
    
            System.out.println(map.remove("李四"));
    
            System.out.println(map);
        }
    
        // 4.判断
        public static void checkTest() {
            Map<String, Integer> map = new HashMap<String, Integer>();
            map.put("李四", 20);
            map.put("王五", 30);
    
            // 判断是否为空
            System.out.println(map.isEmpty());
            //判断是否包含指定的key
            System.out.println(map.containsKey("李四"));
            //判断是否包含指定的value
            System.out.println(map.containsValue(20));
    
            System.out.println(map);
        }
    }

    4.Map集合获取功能测试

    1. get
    2. keyset
    3. value
      public class MapDemo3 {
      
          public static void main(String[] args) {
              // getTest();
              // keySetTest();
              valuesTest();
          }
      
          // 1.get
          public static void getTest() {
              Map<String, String> map = new HashMap<String, String>();
              map.put("one", "aaa");
              map.put("two", "bbb");
              map.put("3", "ccc");
      
              String v1 = map.get("one1");
              System.out.println(v1);
      
              String v3 = map.get(3);
              System.out.println(v3);
          }
      
          // 2.keySet
          public static void keySetTest() {
              Map<String, String> map = new HashMap<String, String>();
              map.put("one", "aaa");
              map.put("two", "bbb");
              map.put("3", "ccc");
      
              Set<String> set = map.keySet();
              System.out.println(set);
          }
      
          // 3. values
          public static void valuesTest() {
              Map<String, String> map = new HashMap<String, String>();
              map.put("one", "aaa");
              map.put("two", "bbb");
              map.put("3", "ccc");
              Collection<String> c = map.values();
              System.out.println(c);
          }
      }

    5. Map集合的遍历值键找值

    使用map.KeySet方法得到所有的Set

    遍历Set,就得到了每一个key,在根据map.get(key),对应的value。

    public class MapDemo4 {
    
        public static void main(String[] args) {
            //1.定义Map集合,装入数据
            Map<String, String> map = new HashMap<String, String>();
            map.put("one", "aaa");
            map.put("two", "bbb");
            map.put("3", "ccc");
            //2.得到所有的key
            Set<String> keys=map.keySet();
            
            //3.遍历keys这个Set集合,就得到了Map集合中所有的key
            for(String key:keys){
                //4.根据key获取对应的value.
                System.out.println("key:"+key+"  value:"+map.get(key));
            }
        }
    }

    6. Map集合的遍历值键值对对象找键和值

      entrySet方法返回的是一个Set集合,而集合中的对象是Map.Entry类型,对于Entry,我们可以使用泛型来规范它,它的泛型就是Map集合的泛型。

      Set<Map.Entry<K, V>> entrySet(); entrySet方法的返回值是Set集合,集合中的元素是 Map.Entry ,通过查找源代码发现 Entry是一个接口,而这个接口是定义在Map接口中。

    public class MapDemo5 {
    
        public static void main(String[] args) {
            // 1.定义Map集合,装入数据
            Map<String, String> map = new HashMap<String, String>();
            map.put("one", "aaa");
            map.put("two", "bbb");
            map.put("3", "ccc");
    
            // 2.调用map集合的entrySet方法
            // Set<Entry<String, String>> set = map.entrySet();
            // //
            // entrySet方法返回的是一个Set集合,而集合中的对象是Map.Entry类型,对于Entry,我们可以使用泛型来规范它,它的泛型就是Map集合的泛型
            // for (Entry<String, String> en : set) { // 从Set集合中遍历出来的就是Map.Entry类型对象
            // System.out.println(en.getKey() + "  " + en.getValue()); //
            // 可以通过Map.Entry的getKey,getValue,获取对应的key与value.
            //
            // }
            
            // for(Map.Entry<String, String> en:map.entrySet()){
            //
            // }
            //
            // for(String key:map.keySet()){
            //
            // }
        }
    }

    7.关于集合的选择

    Collection

                       List

                                ArrayList  LinkedList  Vector

                       Set 

                                HashSet   TreeSet

    Map

                HashMap

                TreeMap

    关于集合选择:

    1. 存储时是直接存储值,还是以key-value存储。

    Collection    Map

    1. 如果选择了Map集合

    在实际开发中,对于Map集合,我们就选择HashMap,不使用TreeMap。

    虽然TreeMap集合可以排序,但是在实际操作中,排序也不使用它。

    8.集合Collections工具类

    Collections它是集合的工具类。这个类在java.util包下,它主要功能是对Collection这样的集合进行操作。它的方法全是静态的。

    常用方法:

    binarySearch  二分法查找

             copy  集合的复制

             fill  对集合中元素赋值

             max  min 得到集合中最大值与最小值

             reverse 对集合元素进行反转

             shuffle  对集合中元素进行乱序

             sort

             swap 对集合中指定位置上的两个元素进行交换

    synchronizedXxx(List  Set  Collection Map)将非同步的集合转换成同步集合

    public class CollectionsDemo1 {
    
        public static void main(String[] args) {
            // maxAndminTest();
    
            // sortTest();
    
            // reverseTest();
    
            // shuffleTest();
    
            // swapTest();
    
            // fillTest();
    
            // copyTest();
    
            binarySearchTest();
        }
    
        // binarySearch 二分法查找,要求首先有顺序
        public static void binarySearchTest() {
            List<Integer> list = new ArrayList<Integer>();
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(5);
            list.add(6);
            list.add(7);
            list.add(8);
            list.add(9);
            int index = Collections.binarySearch(list, 4);
            System.out.println(index);
        }
    
        // copy
        public static void copyTest() {
            List<Integer> list = new ArrayList<Integer>();
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(4);
            List<Integer> dest = new ArrayList<Integer>();
            dest.add(5);
            dest.add(6);
            dest.add(7);
            dest.add(8);
    
            Collections.copy(dest, list);
            System.out.println(dest);
        }
    
        // fill
        public static void fillTest() {
            List<Integer> list = new ArrayList<Integer>();
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(4);
    
            Collections.fill(list, 5); // 将集合中所有元素使用5替换.
    
            System.out.println(list);
    
        }
    
        // swap 将指定位置上的元素交换
        public static void swapTest() {
            List<Integer> list = new ArrayList<Integer>();
    
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(4);
    
            System.out.println(list);
            Collections.swap(list, 1, 2); // 将集合中索引值为1,2的元素位置交换
    
            System.out.println(list);
        }
    
        // 1.max min
        public static void maxAndminTest() {
            List<Integer> list = new ArrayList<Integer>();
    
            list.add(10);
            list.add(300);
            list.add(110);
            list.add(1109);
            Integer max = Collections.max(list);
            System.out.println(max);
            Integer min = Collections.min(list);
            System.out.println(min);
    
            // 问题:如果集合中的元素象我们上面的是Integer,那么它们的比较可以按数字比较,如果集合中是Student对象哪,那么max,min获取的是什么?
            // 如果集合中元素是Student,如果Student类具有自然顺序,它们可以获取最大值,或最小值。
            // 如果没有自然顺序,就必须使用max,min重载的方法
            // max(Collection c,Comparator cc)
    
        }
    
        // 2.sort
        public static void sortTest() {
    
            List<Integer> list = new ArrayList<Integer>();
    
            list.add(10);
            list.add(300);
            list.add(110);
            list.add(1109);
    
            // 调用Collections中的sort方法
            System.out.println(list);
    
            Collections.sort(list);
    
            System.out.println(list); // 从小到大排序 根据元素自然顺序
    
            // 注意:使用sort排序,集合中元素要具有自然顺序,如果没有自然顺序,那么我们就需要使用 sort(List c,Comparator
            // cc);
        }
    
        // 3.要对集合排序,降序排
        public static void reverseTest() {
            List<Integer> list = new ArrayList<Integer>();
    
            list.add(10);
            list.add(300);
            list.add(110);
            list.add(1109);
    
            Collections.sort(list);// 从小到大
            Collections.reverse(list); // 反转
    
            System.out.println(list);
        }
    
        // 4.乱序
        public static void shuffleTest() {
            List<Integer> list = new ArrayList<Integer>();
    
            list.add(10);
            list.add(300);
            list.add(110);
            list.add(1109);
    
            Collections.sort(list);// 从小到大
            System.out.println(list);
    
            Collections.shuffle(list); // 乱序
            System.out.println(list);
        }
    
    }
  • 相关阅读:
    前端经典面试题解密:JS的new关键字都干了什么?
    前端经典面试题解密-add(1)(2)(3)(4) == 10到底是个啥?
    JavaScript模块化-CommonJS、AMD、CMD、UMD、ES6
    关于面试题:[1, 2, 3].map(parseInt)问题的剖析
    浅析API和SDK
    重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)
    重读《学习JavaScript数据结构与算法-第三版》- 第5章 队列
    重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈
    重读《学习JavaScript数据结构与算法-第三版》- 第3章 数组(二)
    FreeSql (三十五)CodeFirst 自定义特性
  • 原文地址:https://www.cnblogs.com/liman/p/4430728.html
Copyright © 2020-2023  润新知