06-集合

来源:互联网 发布:ubuntu添加中文输入法 编辑:程序博客网 时间:2024/06/05 06:36
        1.集合:
            概述:用来存储长度不固定数据的容器

            1     int num = 1;

            1 2 3 4  int[] arr = {1,2,3,4}; // 长度是固定   数组里面的元素的数据类型 是一致

            "jack" 18  1.76     ----> 类(姓名,年龄,身高) ---> 对象

            学号  :  姓名   ----->    HashMap  集合  ---->键值对的形式   ????


                HashMap : 无序   存储个数不固定   HashMap大小不固定,可以动态添加数据    键是不能重复的 值可以重复

                    1.声明:
                        HashMap<String,String> map;

                    2.定义
                                HashMap<Integer, String> map1 = new HashMap<Integer,String>(); // 推荐
                                HashMap<Integer,String> map2 = new HashMap<>(); // 推荐  jdk8开始支持第一种写法
                                HashMap<Integer, String> map3 = new HashMap();

                    3.常用方法

                        put()   往集合中添加键值对

                        size()  存放了多少个键值对.

                        get()  返回指定键所映射的值  根据键 取对应的值

                        isEmpty()  判断集合是否有键值对  没有的话就是 true 否则就是 false

                        containsKey()  判断是否包含 指定的键

                        containsValue()  判断是否包含 指定的值

                        clear()      清空集合中所有的键值对


                ArrayList  : 有序的集合  并且有下标   和数组一样下标从0开始,有顺序的
                    1.声明:
                            ArrayList names;   

                    2.定义:
                            ArrayList names = new ArrayList();
                            ArrayList<String> list1 = new ArrayList();
                            ArrayList<String> list = new ArrayList<>(); // 推荐
                            ArrayList<String> list2 = new ArrayList<String>();// 推荐
                            ArrayList list3 = new ArrayList<>();
                            ArrayList list4 = new ArrayList();



                    常用的方法:
                        add()  添加元素

                        get()  根据索引获取对应的值  索引是从 0 开始的

                        remove(); 根据索引删除指定的值 删除之后,后面的元素会上位

                        isEmpty()  判断是否为空

                        indexOf()  根据指定的对象返回该对象在集合中首次出现的索引,如果没有就返回 -1;


                        lastIndexOf()  根据指定的对象返回 该对象在集合中最后一个位置上的索引  如果没有就返回 -1


                        set(int index, E element)   用指定的元素替代此列表中指定位置上的元素。

                        size() 获取集合的长度

                        toArray() 把集合转化成数组

                        Arrays.toString  把数组转化成字符串


        2.包装类

                基本数据类型   -----    引用数据类型
                            // 自动装箱        自动的把基本数据类型  包装成  引用数据类型      int   Integer
                                    Integer i3 = 28;
                                    String str3 = i3.toString();
                                    System.out.println("str3 = " + str3);


                引用数据类型   ----     基本数据类型

                                // 自动拆箱       自动把引用数据类型   转化成   基本数据类型
                                            Integer i3 = 28;
                                            int  num = i3;
                                            System.out.println(num + 1);// 29





                             Integer(引用数据类型)        int



                        // 基本数据类型                  引用数据类型
                        //        byte                    Byte
                        //        short                     Short
                        //        int                        Integer
                        //        long                    Long
                        //        char                    Character
                        //        float                     Float
                        //        double                    Double
                        //        boolean                    Boolean

            3.泛型  <>
                    泛型  :  限制对象类型的种类
                            集合的泛型规定只能存放引用数据类型(对象类型),如果需要存放基本数据只能使用包装类

                        // 泛型:
                                // 官方理解: 特指某种指定的数据类型
                               //  大白话: 就是用来限定  集合中应该存储什么类型的数据      限制键的类型 和 值的类型
                            //            特点: 泛型只能是引用数据类型
        知识点补充
                集合的体系图:

                        单列集合:

                             Collection 接口:

                                    List 接口:
                                         ArrayList 类

                                         LinkedList 类

                                         Vector  类


                                    Set 接口:

                                        HashSet

                                        TreeSet


                        双列集合:

                            Map 接口:
                                HashMap 类

                                TreeMap 类


                求长度: 数组 : length  数组的属性
                        String: length() 方法
                        集合:  size()  方法


                集合转化为数组       toArray();  数组转化为字符串  toString()
                        ArrayList<String> list; // null

                            list = new ArrayList<>();
                            list.add("张三丰");
                            list.add("张无忌");
                            list.add("欧阳锋");
                            list.add("洪七公");
                            list.add("张三丰");
                            System.out.println(list);
                            Object[] objArr = list.toArray();  // 集合转化成数组
                            System.out.println(objArr);
                            String str = Arrays.toString(objArr); // 数组转化成字符串
                            System.out.println(str);


                数组转化为集合  Arrays.asList();

                        如果数组是引用数据类型,那么就会把数组中的每个元素 存储到集合中去    转化成集合后,那么这个集合 不可以进行添加删除操作     可以进行修改操作
                        如果是基本数据类型的数组 ,那么就会把整个数组当成一个对象 存储到集合中去


                        // 数组转化为集合
                            Integer[] arr = {1,2,3,4,5};
                             java.util.List<Integer> asList = Arrays.asList(arr);
                             //  不可以进行添加删除操作     可以进行修改操作
                            System.out.println(asList);    // [1, 2, 3, 4, 5]

                //            asList.add(22);
                //            asList.remove(2);
                            asList.set(2, 30);
                            System.out.println(asList);
                            // 如果数组是引用数据类型,那么就会把数组中的每个元素 存储到集合中去    转化成集合后,那么这个集合 不可以进行添加删除操作     可以进行修改操作
                            // 如果是基本数据类型的数组 ,那么就会把整个数组当成一个对象 存储到集合中去
                            int[] arr2 = {1,2,3,4};
                            java.util.List<int[]> asList2 = Arrays.asList(arr2);
                            System.out.println(asList2);
                            System.out.println(asList2.size());



            课堂练习:
                    public static void main(String[] args) {
                            // TODO 自动生成的方法存根

                            // Integer     int
                            //  把 int 类型  的数据   ------>  Integer 类型的对象
                            Integer i = new Integer(18);// 18   ----> 对象 i   验证一下 i 是否 是18  把int类型 的18 转化为包装类 Integer类型的对象
                            String str = i.toString();// 把Integer 类型的对象 转换成字符串对象
                            System.out.println(str);// 18
                            System.out.println(i + 1);  // 自动拆箱 

                            Integer i2 = Integer.valueOf(19);// 把int 类型的19  包装成了 一个Integer 类型的对象
                            System.out.println("i2 = " + i2);

                            // 如果转化成功,就可以调用 Integer 类里面的方法
                            String str2 = i2.toString();
                            System.out.println("str2 = " + str2);

                            // 自动装箱        自动的把基本数据类型  包装成  引用数据类型      int   Integer
                            Integer i3 = 28;
                            String str3 = i3.toString();
                            System.out.println("str3 = " + str3);


                            //  Integer 类型                  int 类型
                            // 自动拆箱       自动把引用数据类型   转化成   基本数据类型
                            int  num = i3;
                            System.out.println(num + 1);// 29

                            int value = i3.intValue();
                            System.out.println(value + 2); // 30


                            //
                            int res = Integer.parseInt("123"); // 123  int  String str; 参数 :  数字字符串

                            System.out.println(res + 1);


                            // 基本数据类型                  引用数据类型
                            //        byte                    Byte
                            //        short                     Short
                            //        int                        Integer
                            //        long
                            Long
                            //        char                    Character
                            //        float                     Float
                            //        double                    Double
                            //        boolean                    Boolean

                        }



            补充知识:

                分类: 此处先写三个循环     循环: 循环的次数(确不确定)    循环条件   循环体(也就是我们的大括号里面的代码)
                                            如果次数不确定,一定要知道循环结束的条件
                                            如果次数确定,那么直接写条件
                    普通for循环:
                        格式:
                                  ①      ②    ③
                            for(int i=0; i<次数; i++) {    //这个循环的作用是: 打印0-9之间的数字
                                ④
                                System.out.println(i);    //这是循环体
                            }

                        执行顺序:
                            第一次:  ①,  ②, ④, ③
                            第二次:  ②, ④, ③
                            第三次:  ②, ④, ③
                            ......
                            最后一次:  ②  //条件满足就执行循环体,不满足就结束循环



                    while循环:
                        格式:
                            int i = 0; ①
                            while(i <次数) { ②
                                System.out.println(i); ④
                                i++;③
                            }
                        执行顺序:
                            第一次:  ①,  ②, ④, ③
                            第二次:  ②, ④, ③
                            第三次:  ②, ④, ③
                            ......
                            最后一次:  ②  //条件满足就执行循环体,不满足就结束循环

                    增强for循环:
                        ArrayList<String> list = new ArrayList<String>();
                        //往集合中添加元素, 此处代码略
                        //遍历集合
                        //数据类型 变量名 要遍历的集合(或者数组)
                        for(String str : list) {
                            //打印集合中的元素
                            System.out.println(str);
                        }



                //        for(数据类型 变量名 : 数组名\集合){ // 数据类型: 数组里面的每个元素的数据类型
                //            // 循环体
                //        }

                //        for(String name : arr){
                //            System.out.println(name);
                //        }



        键盘输入:

                步骤:
                    A: 导包.
                        import java.util.Scanner;
                    B: 创建对象.
                        Scanner sc = new Scanner(System.in);
                    C: 接收用户录入的内容即可.
                        String line = sc.nextLine();
                        int num = sc.nextInt();


        HashMap 集合遍历

                    // 集合的遍历   HashMap 遍历      无序   没有下标
                    HashMap<String, String> map = new HashMap<>();
                    map.put("k1", "v1");
                    map.put("k2", "v2");
                    map.put("k3", "v3");
                    map.put("k4", "v4");
                    map.put("k5", "v5");

                    // 遍历      拿到键
                    Set<String> set = map.keySet(); // AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet
                    //   set  可能有
                    for(String str : set){
            //            System.out.println(str);  // set 集合中存储的就是  map集合中的所有的键
                        String value = map.get(str);
                        System.out.println(str + "...." +value);
                    }


                    // Entry<String, String>    HashMap<String,String>
                    Set<Entry<String, String>> entrySet = map.entrySet();// 拿出来的是键值对

                    for(Entry<String, String> entry : entrySet){
                        String key = entry.getKey();
                        String value = entry.getValue();
                        System.out.println(key +"..." + value);
                        }


        数组和 集合 ArrayList 的遍历

                        int[] arr = {1,2,3,4};
                        for(int num : arr){
                            System.out.println(num);
                        }
                        System.out.println("=====================");
                        for(int i = 0;i<arr.length;i++){
                            System.out.println(arr[i]);
                        }

                        System.out.println("=====================");
                        ArrayList<String> arrayList = new ArrayList<>();
                        arrayList.add("jack");
                        arrayList.add("rose");
                        arrayList.add("jim");
                        arrayList.add("lily");
                        for(String str : arrayList){
                            System.out.println(str);
                        }
                        System.out.println("=====================");
                        for(int i = 0;i<arrayList.size();i++){
                            String str = arrayList.get(i);
                            System.out.println(str);
                        }