30.0/集合/ArrayList/LinkedList

目录

30.1什么是集合?

30.1.2为什么使用集合

30.1.3自己创建一个集合类

[30.1.3 集合框架有哪些?](#30.1.3 集合框架有哪些?)

30.1.2使用ArrayList集合

30.2增加元素

30.3查询的方法

30.4删除

[30.5 修改](#30.5 修改)

30.6泛型


30.1什么是集合?

  1. 我们之前讲过数组,数组中它也可以存放多个元素。
  2. 集合就是一个容器,里面可以存放若干个元素。

30.1.2为什么使用集合

数组的长度是固定,而且数组中数据类型必须统一。

int[] arr=new int[10];

引入了集合。可以存放。

集合它是一个类,只是该类中存在增加元素,删除元素,修改元素,统计元素的个数等方法。

30.1.3自己创建一个集合类

它也可以无限的增加元素,增加任意类型的元素。

java 复制代码
package demo01;

import java.util.Arrays;


public class MyArray {
    //存放集合元素的
    private Object [] arr=new Object[3];
    //表示集合中元素的个数
    private int size;
    /**
     * 添加元素
     * @param o
     */
    public void add(Object o){
         //判断数组是否已满。
         if(size==arr.length){
             //扩容--并把原来数组中得元素放入新数组
            arr=Arrays.copyOf(arr,arr.length*2);
         }
         arr[size]=o;
         size++;
    }

    /**
     * 根据下标获取指定元素
     * @param index
     * @return
     */
    public Object get(int index){
        if(index<0||index>=size){
            throw new RuntimeException("给定下标越界");
        }
        return arr[index];
    }

    //获取集合的长度--元素的个数
    public int size(){
        return size;
    }
}

你都可以想到创建一个类,该类可以不断的增加元素,jdk官方一定也会想到创建一个类,可以不断的增加元素。官方会根据不同的数据结构创建不同的类。而官方提供的这些类---集合框架。

30.1.3 集合框架有哪些?

底层也是使用数组。允许元素重复,而且根据下标获取元素,查询效率非常高。删除和添加慢。

30.1.2使用ArrayList集合

必须创建该类的对象。

public ArrayList(){} 默认分配数组的个数10个

public ArrayList(int size){} 人为指定数组元素的个数

30.2增加元素

java 复制代码
public class Test02 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("java01");
        list.add("java02");
        list.add(15);
        list.add(25.6);
        list.add(true);//往集合尾部追加。

        list.add(3,"欧炜健");
        list.add(3,"赖林龙");

        System.out.println(list);


    }
}

30.3查询的方法

java 复制代码
package demo02;

import java.util.ArrayList;
import java.util.Objects;


public class Test {
    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        list.add(new People("赖林龙",18));
        list.add(new People("胡荣纯",17));
        list.add(new People("吴韩煜",19));
        list.add(new People("赖林龙",18));

        boolean is = list.contains(new People("胡荣纯", 17));
        System.out.println(is); //equals方法比较。

        int i = list.indexOf(new People("吴韩煜", 19));
        System.out.println("第一次出现的位置:"+i);

        //求集合中元素的个数:
        int size = list.size();
        System.out.println("集合中元素的个数:"+size);

        //遍历集合
        for(int a=0;a<list.size();a++){
            Object o = list.get(a);
            System.out.println(o);
        }

        System.out.println("=================================增强循环==========================");
        for (Object o : list) {
            System.out.println(o);
        }

    }
}
class People{
    private String name;
    private int age;

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

    @Override
    public boolean equals(Object o){
        //this//表示调用当前方法的对象
        //重写equals
        if(this==o){
            return true;
        }
        if(! (o instanceof People)){
            return false;
        }
        People p= (People) o;
        if(p.getAge()==this.getAge()&&p.getName().equals(this.getName())){
            return true;
        }
        return false;

    }

    public People() {
    }

    public People(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;
    }
}

定义一个学生类: name,school,age

创建一个集合对象ArrayList. 里面存放5个学生。

<1>判断某个学生对象是否在集合中

<2>查看指定学生第一次在集合中出现的位置

<3>求集合中元素的个数

<4>遍历集合---使用两种方式

30.4删除

java 复制代码
ArrayList list=new ArrayList();
        list.add(new People("赖林龙",18));
        list.add(new People("胡荣纯",17));
        list.add(new People("吴韩煜",19));
        list.add(new People("赖林龙",18));
        list.add(new People("吴韩煜",19));

        list.remove(3);//根据下标删除指定的元素
        list.remove(new People("吴韩煜",19));//根据内容移除,第一个。
        list.clear();//清空内容

        System.out.println("=================================增强循环==========================");
        for (Object o : list) {
            System.out.println(o);
        }

30.5 修改

java 复制代码
ArrayList list=new ArrayList();
        list.add(new People("赖林龙",18));
        list.add(new People("胡荣纯",17));
        list.add(new People("吴韩煜",19));
        list.add(new People("赖林龙",18));
        list.add(new People("吴韩煜",19));

        list.set(2,new People("张学友",16));//修改指定位置上的内容
        List list1 = list.subList(1, 3); //截取集合
        System.out.println(list1);

30.6泛型

<E>:表示泛型标识符---在创建类对象时指定数据类型,如果没有指定那么该类型为Object.

java 复制代码
public class Test03 {
    public static void main(String[] args) {
        //规定集合中存放的数据类型。--获取元素是就是对应的类型。
        ArrayList<People> list=new ArrayList<>();
        list.add(new People("赖林龙",18));
        list.add(new People("胡荣纯",17));
        list.add(new People("吴韩煜",19));
        list.add(new People("无效五",19));
        list.add(new People("赖林龙",18));
        list.add(new People("吴志雄",18));
        list.add(new People("吴韩煜",19));
        list.add(new People("吴三桂",18));

        //找到集合中所有姓吴的
        for (People people : list) {
            boolean b = people.getName().startsWith("吴");
            if(b){
                System.out.println(people);
            }
        }
    }
}
相关推荐
hh随便起个名9 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
Dingdangcat8611 小时前
城市交通多目标检测系统:YOLO11-MAN-FasterCGLU算法优化与实战应用_3
算法·目标检测·目标跟踪
tang&11 小时前
滑动窗口:双指针的优雅舞步,征服连续区间问题的利器
数据结构·算法·哈希算法·滑动窗口
拼命鼠鼠11 小时前
【算法】矩阵链乘法的动态规划算法
算法·矩阵·动态规划
LYFlied12 小时前
【每日算法】LeetCode 17. 电话号码的字母组合
前端·算法·leetcode·面试·职场和发展
式51612 小时前
线性代数(八)非齐次方程组的解的结构
线性代数·算法·机器学习
橘颂TA13 小时前
【剑斩OFFER】算法的暴力美学——翻转对
算法·排序算法·结构与算法
叠叠乐13 小时前
robot_state_publisher 参数
java·前端·算法
hweiyu0013 小时前
排序算法:冒泡排序
算法·排序算法
brave and determined13 小时前
CANN训练营 学习(day9)昇腾AscendC算子开发实战:从零到性能冠军
人工智能·算法·机器学习·ai·开发环境·算子开发·昇腾ai