Android开发Day15(2019-8-16) 集合相关知识

目的:

掌握集合中的相关知识,复习并且掌握数组的遍历方式

技术及其相关知识:

1.复习文件相关的基础知识

String - StringBuffer&StringBuilder
File:文件的创建 目录的创建删除
文件的输入和输出:
OutputStream InputStream
FileOutputStream FileInputStream
FileWriter FileReader
ObjectOutputStream ObjectInputStream
BufferedOutputStream BufferedInputStream
RandomAccessFile mode:rw(可读可写)
close();

2.数组和集合的优劣与特点

数组:存储多个对象
int[] score = {1,2,3};
int[] score = new int[10];
弊端:数组是不可变的 内容可变
实际开发中需要一个能够随时改变的数组 -> 集合Collection
Collection抽象接口 定义集合的相关操作
--List 接口 列表 数组
特点:有序 可重复
--ArrayList
--LinkedArrayList
--Set"集合"
特点:无序 不重复
--HashSet
Map接口 映射关系 Key-Value 键值对 键不能相同 值可以相同
语文 98
英语 98

3.集合的元素个数是可变的

//Collection接口的方法
        Collection<String> t1 = new ArrayList();

添加元素:
add
addAll

        t1.add("Jack");
        t1.add("Merry");
        System.out.println(t1);

删除元素:
remove

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

获取元素个数:
size

//获取元素个数
        System.out.println(t1.size());

是否包含一个对象:
contains

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

是否为空:
imEmpty

//判断是否为空
        if (t1.isEmpty()){
            System.out.println("是空的");
        }else{
            System.out.println("不是空的");
        }

是否相同:
equals

//判断两个集合是否相同
        Collection<String> t2 = new ArrayList<>();
        t2.add("Merry");
        t2.add("Jack");
        t2.add("Rose");
        t2.add("Tom");

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

清空:
clear

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

4.三种常用的遍历方法

(1)使用Iterator来遍历
        // hasNext  判断是否有元素
        // next  获取下一个对象
        // remove  删除当前遍历过后的对象
        System.out.println("--------------------");
        Iterator iterator = t2.iterator();

        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
//        while (iterator.next() != null){
//            System.out.println(iterator.next());
//        }

(2)for-each 增强for循环 快速循环
for (String obj:t2){
            System.out.println(obj);
        }
(3)for-i
for (int i = 0 ; i<t2.size() ; i++){
            System.out.println(((ArrayList<String>) t2).get(i));
        }

5.ArrayList操作

添加元素add
        ArrayList<Integer> score = new ArrayList<>();
        score.add(2);
        score.add(3);
        score.add(0,1);//在指定位置插入
        System.out.println(score);
访问指定元素get
        score.get(1);
修改一个元素set
        score.set(0,0);
        System.out.println(score);
删除remove
        score.remove(0);//删除指定位置的元素
        System.out.println(score);

        score.remove((Integer)2);//删除指定的对象
        System.out.println(score);

        score.clear();//删除所有 情况
        System.out.println(score);
        ArrayList<Integer> a2 = new ArrayList<>();
        a2.add(1);
        a2.add(2);
        a2.add(3);
将一个集合里面的内容添加到当前集合中
        score.addAll(a2);
        System.out.println(score);

        ArrayList<Integer> a3 = new ArrayList<>();
        a3.add(1);
        a3.add(2);
取两个集合的交集retainAll()
        score.retainAll(a3);//取两个集合的交集
        System.out.println(score);
访问某个对象在集合里面的索引(第一次出现indexOf();最后一次出现lastIndexO())
        ArrayList<Integer> a4 = new ArrayList<>();
        a4.add(1);
        a4.add(2);
        a4.add(2);
        a4.add(1);
        System.out.println(a4.indexOf(1));//第一次出现的位置
        System.out.println(a4.lastIndexOf(1));//最后一次出现的位置
将ArrayList转化为普通数组
        Integer[] objects = new Integer[a4.size()];
        a4.toArray(objects);
        for (Integer i:objects) {
            System.out.print(i);
        }

        System.out.println("--------------------");
        Object[] objects1 = a4.toArray();
        for (Object i:objects1){
            System.out.println(i);
        }

        System.out.println("--------------------");
        Iterator iterator = a4.iterator();
        while (iterator.hasNext()){
        System.out.println(iterator.next());

6.Lambda表达式

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

       //Lambda表达式
       //nums.removeIf( obj -> obj % 2 ==0 );
       nums.removeIf(new Predicate<Integer>() {
           @Override
           public boolean test(Integer obj) {
               return obj % 2 == 0;
           }
       });
       System.out.println(nums);
        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);});
        4.如果只有一个参数  参数类型可以省略
        ArrayClass ac = new ArrayClass();
        int[] num = {1,2,3,4,5,6};
        ac.test(num,element -> {System.out.println(element);});
        5.如果代码块里面只有一行语句  大括号可以忽略
        ArrayClass ac = new ArrayClass();
        int[] num = {1,2,3,4,5,6};
        ac.test(num,element -> System.out.println(element));
//闭包 enclusure 把函数作为一个方法的参数
class ArrayClass{
    public void test(int[] target,Show s){
        for (int element:target){
            s.customShow(element);
        }
    }
}

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

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

7.java.util.ArrayList < E > 的一些方法

java.util.ArrayList < E > 的一些方法

8.数组和ArrayList的比较

数组和ArrayList的比较

实际使用:

1.写一个小demo

创建一个类Person:name age属性
创建ArrayList对象保存多个Person对象
1.统计年龄大于30的人数
2.统计名字中有张的人数

Person类

    public class Person {
    private String name;
    private int age;

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

MyClass主程序

import java.util.ArrayList;

public class MyClass {
    public static void main(String[] args){
        ArrayList<Person> people = new ArrayList<>();
        people.add(new Person("刘转",50));
        people.add(new Person("李盐漏",40));
        people.add(new Person("王大拿",60));
        people.add(new Person("张阉宁",20));
        people.add(new Person("环喜",25));

        System.out.println("年龄大于30的:");
        for (int i=0 ; i <people.size() ; i++){
            if (people.get(i).getAge()>30) {
                System.out.println(people.get(i).getName());
            }
        }

        System.out.println("-----------------");
        System.out.println("名字里面带有张的:");
        for (Person p:people){
            if (p.getName().contains("张")) {
                System.out.println(p.getName());
            }
        }
    }
}
2.任务:自己编写一个ArrayList的类功能

自己实现ArrayList功能 支持所有对象的存储

  • 什么叫泛型
  • add
  • add(i,o)
  • remove(i)
  • remove(o)
  • remove(s,e)
  • set(i,o)
  • sort
  • Person::getAge();

心得感悟:

今天学习的这个和之前学习String的有很多相似点。思维难度不算很大,但是却需要去理解,需要去了解使用方法。
这两天眼睛看的好酸啊,我太难了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,442评论 0 4
  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 797评论 0 2
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,980评论 0 13
  • 今日任务1、TreeSet介绍(掌握TreeSet集合的应用)2、Comparable 接口介绍(掌握)3、Com...
    Villain丶Cc阅读 1,878评论 0 1
  • 我看见你的双眸 像闪耀星光的夜晚 像难以触摸的蓝天 像燃成灰烬的火焰 不再复燃 我发现你的双眸 不再有泛起的...
    贾卓涅阅读 265评论 0 4