zoukankan      html  css  js  c++  java
  • java集合及其方法

    1.集合框架

       我们已经学习过使用数组来批量存储某一类数据;

       但是,数组还是存在一些不足,比如长度不可变(建立对象的时候就已经定义好长度);

       查找某一个数据时,要依靠索引值来遍历数组进行条件查找,数据量很大时就很耗时;

       于是,就有了某一类长度可变,不依靠索引查找的存储数据的方法------集合。

       实现这一功能的类(接口)有两种:Collection接口、Map接口;

       Collection接口下有三个子接口:List接口、Set接口、Queue接口(不常用)

       我们常用到的这些接口下的类有:ArrayList类(List接口)、HashSet类(Set接口)、HashMap类(Map接口)

    2.ArrayList类及其方法

       List list = new ArrayList();                 //父类的引用指向子类的对象,这是向上类型转换

       list.add(Obj);                                     //用add()方法向该数组列表末尾位置添加一个对象

       list.add(n,Obj);                                  //向索引 n 位置插入对象Obj,前提是列表长度大于n-1

       list.get(0);                                         //返回list这个数组列表的索引为0位置上的对象,注意这是一个对象

       小贴士:如果我们向list中add的对象是一个Course Obj = new Course()出来的对象,那么,

                      读出来的时候Course temp = (Course)list.get(0);强制转换类型(Course).

    3.批量添加多个对象(addAll())

       Course[] Obj2 = {new Course(1,"高等数学"),new Course(2,"经济学")};     //定义一个Course数组

       list.addAll(Arrays.asList(Obj2));                                       //先把数组转化为数组列表,然后添加到list中

       list.addAll(n,Arrays.asList(Obj2));                                    //向索引为n的位置添加数组列表

    4.数组列表的长度以及遍历

       我们知道一个数组的长度可以通过length来获得;

       但是,一个数组列表的长度呢?那就是size()方法;

       private void show() {
                     int size=list.size();
                     for (int j=0;j<size;j++) {
                                    Courses temp =(Courses)list.get(j);
                                    System.out.println("课程编号:"+temp.id);
                                    System.out.println("课程名称:"+temp.name);
                     }
       } 

    5.删除list数组列表中的对象(组)

       删除单个对象:

            list.remove(index);                           //删除数组列表索引位置上的元素(对象)

            Course cr =(Course) list.get(index);

            list.remove(cr);                                 //先传递对象,再删除对象

       删除多个对象(组):

            Course [] courses = {(Course)list.get(4),(Course)list.get(5)};  //获取4、5位上的对象,集合成一个数组

            list.removeAll(ArrayasList(courses));                                      //数组转化为数组列表,然后删除

    6.泛型

       所谓泛型是指,在新建数组列表的时候就人为规定存进去的数据类型,如果存了规定类型及其子类型

       之外的类型,会报错如果没有应用泛型,那么默认是Object,这就是为什么前面遍历时,读取数组列表

       对象的时候会要求强制转化对象为Course类型,因为拿出来的时候数据是一个Object类型的。

       List <Course> list = new ArrayList <Course>();//泛型定义,规定这个list数组列表只能存Course类及其子类对象

       泛型规定的类型不能是基本数据类型,如int double,如果一定要用,则要用他们的包装类Integer、Double等

    7.Map接口HashMap类

       与List不同的是,Map接口为集合中的每个对象定义了一个人为设定的Key值,Map集合是无序的;

       所以不存在List类的索引,查找时是根据Key查找的。他的泛型定义如下

       Map courselistofmap <K,V> = new HashMap<K,V>();          //K表示Key值的类型,V表示数组对象的类型

       Course cour = new Course(201703,"线性代数");                  //新建一门课程,包括课程编号和课程名称

       courselistofmap.put(Key,cour);                                            //HashMap列表的对象插入采用put()方法

                                                                                                      Key是插入的时候定义的,在这里为了记忆

                                                                                                      一般引用传入的课程编号作为Key值

       Set <int> keyset = courselistofmap.keySet();                         //Map接口下的keySet()方法返回所有键的集合

       Set <Entry<int,Course>> entryset = courselistofmap.entrySet(); //entrySet()返回所有键值对集合

                                                                                          HashMap列表中每个对象称为entry(键值对)

                                                                                          在键值对中,这个值又是一个对象,在这里是课程对象

       for(Entry<int,Course> entry:entryset) {                                   //foreach遍历键值对集合

                      System.out.println(entry.getKey());                          //单个键值对(entry)的getKey()方法返回键

                      System.out.println(entry.getValue().name);             //getValue()方法返回值(课程对象)

       }

       Course newcour = new Course(201704,"经济法");              //新建一个新的课程

       courselistofmap.put(Key,newcour);                                      //用新对象替换之前Key位置上的对象

    方法归类:

    List list1 = new ArrayList();                        //新建一个ArrayList对象list1(有序列表)

    list1.add(Obj);                                            //向数组列表末尾添加对象Obj

    list1.add(n,Obj2);                                       //向n索引位置添加单个对象Obj2,原先对象被挤到后一位

    list1.get(n);                                                //取得n索引位置上的对象(对象类别是Object操作时要强转)

    list1.addAll(Arrays.asList(arr));                 //先将对象数组转化为数组列表,然后添加到数组列表list1中

    list1.size();                                                 //数组列表的长度

    list1.remove(n);                                         //删除n索引位置上的对象

    list1.remove(list1.get(2));                          //删除列表索引2位置上的对象list1.get(2)

    list1.removeAll(ArraysasList(arr));            //删除一个由原列表中对象组成的数组

    List <Course> list2 = new ArrayList<Course>();  //泛型,定义数组列表时就规定了接受的对象类型只能是Course

    Map <K,V> list3 = new HashMap <K,V>(); //新建一个Map哈希表,表中对象都是一个Entry对象(键值对)

    list3.put(Key,Obj3);                                      //向一个哈希表中添加一个Entry对象(Key,Obj3),

                                                                          或者修改Key所对应的映射

    list3.keySet();                                               //返回哈希表的所有键的集合

    list3.entrySet();                                             //返回哈希表的所有键值对的集合,相当于n个Entry对象(键值对)

    entry.getKey();                                             //返回单个Entry对象的Key值

    entry.getValue();                                          //返回单个Entry对象的Value值(一个对象)

  • 相关阅读:
    POJ-2018 Best Cow Fences(二分加DP)
    POJ-2039 To and Fro
    POJ-2029 Get Many Persimmon Trees(动态规划)
    POJ-2081 Recaman's Sequence
    POJ-2081 Terrible Sets(暴力,单调栈)
    Java实现 LeetCode 740 删除与获得点数(递推 || 动态规划?打家劫舍Ⅳ)
    Java实现 LeetCode 739 每日温度(暴力循环)
    Java实现 LeetCode 739 每日温度(暴力循环)
    Java实现 LeetCode 739 每日温度(暴力循环)
    Java实现 LeetCode 738 单调递增的数字(暴力)
  • 原文地址:https://www.cnblogs.com/eco-just/p/7716685.html
Copyright © 2011-2022 走看看