Android学习--集合学习 ArrayList功能实现

总结

今天的学习是集合概念以及ArrayList用法学习,话不多说,开始

集合概念

/**

  • String— StringBuffer & StringBuilder
  • Fikr:文件的创建 目录创建删除
  • 文件的输入和输出:OutputStream InputStream
  •              FileOutputStream  FileInputStream
    
  •              FileWriter        FilReader
    
  •              ObjectOutputStream  ObjectInputStream
    
  •              BufferedOutputStream   BufferedInputStream
    
  •              RandomAccessFile   mode:rw
    
  •              close()
    
  • 数组:存储多个对象
  • int[] score={1,2,3};
  • int[] score=new int[10];
  • 弊端:数组长度不可变 内容可变
  • 实际开发中需要一个能够随时改变的数据——>集合Collection
  • Collection抽象接口 定义集合的相关操作
  • --List接口 列表 数组 特点 :有序、可重复
  •      \--ArrayList
    
  •      \--LinkedArrayList
    
  • \Set接口 “集合概念” 特点:无需 不重复
  • Map接口 映射关系 Key-Value 键值对 键不可能相同 值可以相同
  • --HashSet
  • 语文98
  • 英语98

  • 集合的元素个数是可变的
  • 添加元素
  • add
  • addAll

*/

以上是学习时做的笔记,图如下
image.png

image.png

开始主题————Array List用法学习

1、概念:ArrayList,可以看做是动态的数组。Add、Clear、Contains、Count、Remove、RemoveAt、ToArray(转换,再没关系)、索引器。

  • 1,首先是泛型学习

泛型

用ArrayList的麻烦的地方:数据放进去就不知道是什么类型的了;不能防止非法类型数据的放入;将ArrayList返回给其他函数,会令调用者很困惑。要区分变量、返回值类型和实际对象类型的区别。IntArrayList,StringArrayList又没完没了。

我们需要泛型的ArrayList,所以就有了List。List 除此之外并无不同,表示List中放的数据类型是int类型的,因为有声明类型时的约定,因此所有方法的参数、返回值都是确定类型的了。
案例:
(1)把分拣奇偶数的程序用泛型实现。分析算法复杂度。
(2)从一个整数的ArrayList、List中取出最大数。别用max方法。

1、List 实现了IEnumerable(泛型版本的IEnumerable)、ICollection (泛型版本的ICollection) 。
2、所有的List所有的方法也都是泛型的,泛型的集合提供的方法更多,Max、Min、Sort等。

  • 2.其次是add等各种用法介绍

(1)ArrayList有一个非常重要的方法Add,作用是把一堆东西放到动态数组里。

(2)Clear是清空这个ArrayList。

(3)Count是计算ArrayList的长度。

(4)Remove是移除ArrayList中的某个元素,Remove后面的括号里写这个元素本身。

(5)RemoveAt是移除ArrayList中的某个元素,根据下标来移除,剩余的元素依次往前替补。例如移除掉第一个,那么原来的第二个元素就变成了第一个元素,原来的第三个变成第二个。

(6)Contains是判断指定的元素是否在ArrayList中,返回值是一个bool类
下面是部分示例代码

public class myclass {
    public static void main(String[] args) {

        //Collection 接口方法
        Collection t1 = new ArrayList<>();
        t1.add("jack");
        t1.add("Marry");
        System.out.println(t1);

        //删除一个对象
        t1.remove("jack");
        System.out.println(t1);


        //判断是否包含一个元素
        if (t1.contains("Marry")) {
            System.out.println("有");
        } else {
            System.out.println("没有");
        }

        Collection t2 = new ArrayList<>();
        t2.add("Marry");
        t2.add("jack");

        if (t1.equals(t2)) {
            System.out.println("集合相同");
        } else {
            System.out.println("集合不相同");
        }

        //清空
        t1.clear();
        System.out.println(t1);


        //集合的例遍
        //1.使用Iterator来例遍
        //hasNext  判断是否有例遍
        //has    获取下一个对象
        //remove  杀出当前例遍后对象
        System.out.println("_______________");
      //  Iterator iterator = t2.iterator();
      //  while (iterator.hasNext()) ;
       // {
     //       System.out.println(iterator.next());
       // }

        //2.for each
        //   for(String )


        ArrayList nums = new ArrayList<>();
        nums.add(1);
        nums.add(2);
        nums.add(3);
        nums.add(4);


        //Lambda表达式
        nums.removeIf(new Predicate() {
            @Override
            public boolean test(Integer obj) {
                return obj % 2 == 0;
            }
        });
        System.out.println(nums);

        //for 快速循环
        for(Integer obj: nums){
            if(obj%2==0){
                nums.remove(obj);
            }
        }


      //1.
        ArrayClass ac=new ArrayClass();
        int[] num={1,2,3,4,5,6};
        PXDClass pc = new PXDClass();
        ac.test(num, pc);
        //2.使用匿名类
//        ArrayClass ac = new ArrayClass();
//        int[] num = {1,2,3,4,5,6};
//        ac.test(num, new Show() {
//            @Override
//            public void customShow(int element) {
//                System.out.println(element);
//            }
//        });

        //3. 使用Lambda表达式
        //如果参数是一个接口类对象,且接口里面只有一个方法
        //可以省略方法名  把这个方法作为参数
//        ArrayClass ac = new ArrayClass();
//        int[] num = {1,2,3,4,5,6};
//        ac.test(num, (int element) -> {
//            System.out.println(element);
//        });

            //如果只有一个参数  参数类型可以省略

        ac.test(num,element-> System.out.println(element));

    }
    //闭包 enclusure 把函数作为一个方法的参数
    static class ArrayClass{
        public void test(int[] target, Show s){
            for (int element: target){
                s.customShow(element);
            }
        }
    }

    //必须是接口 这个接口里面只有一个方法
    interface Show{
        void customShow(int element);
    }

    static class PXDClass implements Show{
        @Override
        public void customShow(int element) {
            System.out.println(element);
        }
    }

}

总结

今天的学习不是很透彻,还得继续练习。总之,Android学习也马上正式开始了。加油!!

你可能感兴趣的:(Android学习--集合学习 ArrayList功能实现)