java小白从入门到精通(基础十)

一. Java中的集合

数据结构:计算机组织数据的方式
java小白从入门到精通(基础十)_第1张图片
集合是不是数据结构?

集合不是标准的数据结构:而是java中给我们提供的数据结构;

集合这种数据结构包含了很多的高级操作;

二. java中集合的分类

  • Set: 无需,并且不可重复的集合
  • List: 有序,可重复的集合
  • Map:具有映射关系的集合

三. 集合的继承关系

|-Collection

​ |-List

​ |-Set

|-Map

​ |-HashMap

四. List之ArrayList

1. ArrayList的创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6hkhVXxT-1596527468132)(upload/image-20200707144330246.png)]

2. 给ArrayList添加元素

java小白从入门到精通(基础十)_第2张图片

3. 深入解析ArrayList的创建过程(了解)

java小白从入门到精通(基础十)_第3张图片

4. 给ArrayList添加元素

java小白从入门到精通(基础十)_第4张图片

5. ArrayList添加元素深入解析(了解)

java小白从入门到精通(基础十)_第5张图片

6.移除元素

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PaZFHwFd-1596527468154)(upload/image-20200707152925108.png)]

  • 把当前需要移除的的元素位置+1号元素向左移动一个位置,当前元素+1位置后面的每个元素都要执行这个操作;最后把指针要向左移动;

7. 获取ArrayList的大小

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CbI7HDPg-1596527468155)(upload/image-20200707154125605.png)]

java小白从入门到精通(基础十)_第6张图片

8. addAll方法

java小白从入门到精通(基础十)_第7张图片
addAll方法,底层是调用的数组的拷贝,把需要追加进来的集合,转换成数组,在对数据进行拷贝;
java小白从入门到精通(基础十)_第8张图片

9. 清空ArrayList

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lxK6gR2C-1596527936113)(upload/image-20200708104043652.png)]
底层实现: 把ArrayList的内部持有的数组的每个元素置为null,等待GC回收;然后再把指针定位到开始位置

10. ArrayList的克隆

java小白从入门到精通(基础十)_第9张图片
ArrayList克隆过后的新的集合和原来的集合没有关系了;

11. ArrayList的contains方法

在这里插入图片描述
java小白从入门到精通(基础十)_第10张图片
底层实现: 遍历内部的数组,逐个进行对比,如果有相同的返回true,反之返回false;

12. ArrayList的get方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6AZWngmb-1596527936119)(upload/image-20200708111453118.png)]
底层实现: 获取内部数组的指定位置的元素

13. ArrayList的indexof方法

在这里插入图片描述
底层实现:
java小白从入门到精通(基础十)_第11张图片

14. 判断ArrayList是否为空

在这里插入图片描述
底层实现:
java小白从入门到精通(基础十)_第12张图片

15. 移除多个元素

java小白从入门到精通(基础十)_第13张图片
底层实现: 逐个对比,有相同的则移除;

16. ArrayList的set方法

java小白从入门到精通(基础十)_第14张图片
给ArrayList指定位置设置值(修改操作);
java小白从入门到精通(基础十)_第15张图片

  1. 检查范围
  2. 获取旧值
  3. 设置新值
  4. 返回旧值

17. ArrayList的subList方法

java小白从入门到精通(基础十)_第16张图片
列表元素的截取,最后把截取的结果赋值给一个新的列表

18. ArrayList转换成数组

java小白从入门到精通(基础十)_第17张图片
底层实现: 就是数组的拷贝,把内部持有的数组,拷贝成新数组返回;
在这里插入图片描述

五. ArrayList的遍历操作

1.普通的for循环遍历

在这里插入图片描述

2. 增强for循环

java小白从入门到精通(基础十)_第18张图片

3. 使用迭代器遍历

在这里插入图片描述

4. java中的Iterable与Iterator

实现了iterable接口的类是可迭代的类: 就是可以使用增强for循环遍历,和迭代器遍历
Iterator:实现了这个接口的类可以作为一个迭代器(里面提供了一些抽象方法,hasNext,next…)

5. Comparator与Comparable

Comparable:实现了这个接口的类是可以进行比较的类(了解)
Comparator:实现了这个接口的类就是一个比较器

package com.uplooking.demo14;

import java.util.ArrayList;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("小明1", 20);
        Person p2 = new Person("小明2", 30);
        Person p3 = new Person("小明3", 40);
        Person p4 = new Person("小明4", 15);

        ArrayList<Person> personList = new ArrayList<>();
        personList.add(p1);
        personList.add(p2);
        personList.add(p3);
        personList.add(p4);
        personList.sort(new MyComparator());//传递比较器实现对象的比较
        System.out.println(personList);
    }
}

//自定义的比较器
class MyComparator implements Comparator<Person> {
    @Override
    public int compare(Person obj1, Person obj2) {
        return obj1.age - obj2.age;//o1-o2:升序   o2-o1:降序
    }
}

class Person {
    String name;
    Integer age;


    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

}

6. jdk8中List的新特性Stream流与Lambda表达式(了解)

抄scala这个编程语言中的函数式编程的思想,函数式编程主要应用于分布式计算与大数据并行计算;

package com.uplooking.demo15;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> ages = new ArrayList<>();
        ages.add(20);
        ages.add(30);
        ages.add(40);
        ages.add(15);
        //Stream流对象  fp(函数式编程)编程    function program
        //Stream流后面跟的称为算子(计算法则)
        //算子又分为两类: 1>(Action)动作算子  2>非动作算子
        ages.stream().forEach(i -> System.out.println(i));
        //   ages.stream().forEach(System.out::println);

        List<Integer> retList = ages.stream().map(i -> 100 + i).filter(i -> i % 2 == 0).collect(Collectors.toList());
        System.out.println(retList);
    }
}

你可能感兴趣的:(javase笔记,代码,java)