【Java-Day19】集合1(Collect单列集合)

目录

前言

Collection集合体系:

Collection(单列集合)

[Collection 两大分支:List、Set](#Collection 两大分支:List、Set)

创建集合对象:

Collection接口常用方法:

[一、add(E e):添加元素](#一、add(E e):添加元素)

[二、remove(Object o):删除元素](#二、remove(Object o):删除元素)

[三、contains(Object o):判断是否包含](#三、contains(Object o):判断是否包含)

四、clear():清空集合

五、isEmpty():判断集合是否为空

六、size():获取集合长度


前言

集合是Java 提供的一组"容器",专门用来存放多个对象。

数组也能存多个数据,但数组长度固定,添加、删除元素不方便、功能少。而集合更加灵活,集合长度可以自动变化,也提供了大量常用方法。

Java 集合体系主要分两大类:

  • Collection:单列集合,一次存一个元素。
  • **Map:**双列集合,一次存一对键值对。

Collection集合体系:

Collection(单列集合)

Collection是单列 集合的顶层接口,它里面的方法是全部单列集合(List,Set)都可以继承使用的。

注意:

Collection是一个接口 ,我们不能直接创建他的对象。

所以,现在我们学习他的方法时,只能创建他实现类的对象。(通过多态创建)。

多态:

1.左边是List父( 接口, 抽象规范): 只规定 add()、get()、remove() 这些方法名,不写具体实现。

2.右边是子类(实现类): 重写了 List 所有方法,底层用数组存数据。

3.父类引用指向子类对象List 引用 = new ArrayList()

4.编译看左,运行看右:

编译时 只能调用 List 中定义的方法(add/remove/get),运行时实际执行的是 ArrayList 重写后的方法实现

Collection 两大分支:List、Set

创建集合对象:

java 复制代码
//数组集合
List<String> list = new ArrayList<>();
//换成链表集合,左边List不变
List<String> list = new LinkedList<>();

Collection接口常用方法:

| 方法名称 | 说明 |
| public booleanadd(E e) | 把给定的对象添加到当前集合中 |
| public voidclear() | 清空集合中所有的元素 |
| public boolean remove(E e) | 把给定的对象在当前集合中删除 |
| public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
| public boolean isEmpty() | 判断当前集合是否为空 |

public int size() 返回集合中元素的个数 / 集合的长度

一、add(E e):添加元素

java 复制代码
Collection<String> c = new ArrayList<>();
boolean result = c.add("张三");
System.out.println(result); // true
  • List 添加一般返回 true。
  • Set 如果添加重复元素,可能返回 false。

二、remove(Object o):删除元素

java 复制代码
Collection<String> c = new ArrayList<>();
c.add("张三");
boolean result = c.remove("张三");
System.out.println(result); // true
  • 如果元素存在,删除成功,返回 true。
  • 如果元素不存在,删除失败,返回 false。
  • 如果集合中有多个相同元素,remove 只删除第一个匹配的。

三、contains(Object o):判断是否包含

java 复制代码
Collection<String> c = new ArrayList<>();
c.add("张三");
System.out.println(c.contains("张三")); // true

注意:

contains 底层依赖 equals() 判断对象是否存在的/一致的。

  • list.contains(obj) // 源码逻辑:挨个遍历,调用元素.equals(传入参数)

如果是String,判断是正确的,因为String重写了 equals()。

如果集合中存储的是自定义对象 ,没有重写equals方法,那么默认使用object类中的equals 方法进行判断,而jobject类中equals方法,依赖地址值 进行判断。所以如果要按内容判断,需要在自定义的Javabean类中重写 equals()。

重写也可以使用快捷键自动重写。

java 复制代码
public class Main {
    public static void main(String[] args) {
        Collection<Student> c = new ArrayList<>();

        c.add(new Student("张三", 18));

        System.out.println(c.contains(new Student("张三", 18))); // true
    }
}

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // contains 会用 equals 比较对象内容
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }
}

四、clear():清空集合

java 复制代码
c.clear();

clear 是清空集合,不是把集合变量变成 null。

五、isEmpty():判断集合是否为空

**isEmpty 判断的是 size() 是否为 0。**它不是判断集合变量是不是 null。

六、size():获取集合长度

  • 数组获取长度:arr.length
  • 字符串获取长度:str.length()
  • 集合获取长度:collection.size()
相关推荐
Xin_ye100861 小时前
C# 零基础到精通教程 - WPF 专题三:高级控件与自定义控件
开发语言·c#·wpf
SoftLipaRZC1 小时前
C语言自定义类型:结构体完全指南
c语言·开发语言
方也_arkling1 小时前
【Java-Day19】集合3 List中常见的方法和5种遍历方式
java·开发语言
AI玫瑰助手1 小时前
Python函数:局部变量与全局变量的作用域
开发语言·python·信息可视化
我是一颗柠檬1 小时前
【Redis】主从复制Day9
java·数据库·redis·后端
8Qi81 小时前
LeetCode 208:实现 Trie(前缀树)—— Java 题解 ✅
java·算法·leetcode·二叉树·tire树
Wenzar_1 小时前
GeoHash+Redis Streams实时围栏系统实战
java·数据库·redis·junit
可乐ea1 小时前
【知识获取与分享社区项目 | 项目日记第 20 天】search_after 游标分页:解决 Elasticsearch 深分页稳定性问题
java·大数据·elasticsearch·搜索引擎·全文检索