唠唠SE的集合-01——Collection接口

0. 泛型

在使用集合之前,要先了解泛型:

当集合中存储的对象类型不同时,那么会导致程序在运行的时候的转型异常,所以jdk1.5加入了泛型机制。

以下内容要配合第一部分Collection同步。

1. Collection

为什么不愿意用数组?长度固定 ̄へ ̄

集合只能存储对象(引用数据类型),但数组可以存储基本数据类型

集合做什么

  1. 将对象添加到集合
  2. 从集合中删除对象
  3. 从集合中查找一个对象
  4. 从集合中修改一个对象

也就是增删改查

注意:集合和数组中存放的都是对象的引用而非对象本身

来瞅一个简单的栗子:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Collection collection = new ArrayList();
        collection.add(123);
        collection.add("abc");
        collection.add(new Date());
    }
}

为什么在Collection的下面出现了黄线?

jdk1.5之后引入泛型,集合在声明/创建时要标记集合所能存放的数据类型,这样再取出元素的时候就是对应的数据类型(无需强转

那我们来加上泛型,看看加入泛型之后的Collection:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Collection<Integer> collection = new ArrayList<Integer>();
        collection.add(123);
        collection.add("abc"); // 编译报错
        collection.add(new Date()); // 编译报错
    }
}

提示:Integer的集合不允许加入String!这就有点像int[] ,也就是数组了!保证每个集合只放一类东西。

(-- 后续涉及到泛型,统一用E或者T等大写字母表示 --)

Collection有两个子接口:List(表)和Set(集)

List有序,可重

Set无序,不可重

Collection作为单列集合的顶级接口,定义了一些通用方法:

增加

1:add() 将指定对象存储到容器中。add 方法的参数类型是T,便于接收任意对象,返回值为boolean,代表添加是否成功

2:addAll() 将指定集合中的所有元素添加到调用该方法和集合中

import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<Integer> collection = new ArrayList<Integer>();
        collection.add(5); // 一次添加一个元素
        collection.add(123); // jdk1.5新引入了自动拆装箱机制
        Collection<Integer> collection2 = new ArrayList<Integer>();
        collection2.addAll(collection); // 一次性导入一个集合
    }
}

删除

3:remove() 将指定的对象从集合中删除,返回值为boolean,代表删除是否成功

4:removeAll() 将指定集合中的元素删除

import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<Integer> collection = new ArrayList<Integer>();
        collection.add(5);
        collection.add(123);
        
        boolean flag1 = collection.remove(5); // 从集合中删除 5
        boolean flag2 = collection.remove(6); // 集合中没有6,没有任何反应
        System.out.println(flag1);
        System.out.println(flag2);
        
        collection.removeAll(collection); // 删除自身的所有元素
        System.out.println(collection.size()); // 0
    }
}

修改

5:clear() 清空集合中的所有元素

注意这里的clear与removeAll(自身)的效果是一样的

import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<Integer> collection = new ArrayList<Integer>();
        collection.add(5);
        collection.add(123);
        
        collection.clear(); // 删除自身的所有元素
        System.out.println(collection.size()); // 0
    }
}

判断

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

7:contains() 判断集合何中是否包含指定对象

8:containsAll() 判断集合中是否包含指定集合。使用equals()判断两个对象是否相等

import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<Integer> collection = new ArrayList<Integer>();
        collection.add(5);
        collection.add(123);
        
        System.out.println(collection.contains(5)); // true
        System.out.println(collection.contains(10)); // false
        
        System.out.println(collection.isEmpty()); // false
        collection.clear();
        System.out.println(collection.isEmpty()); // true
    }
}

获取

9:int size() 返回集合容器的大小

import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<Integer> collection = new ArrayList<Integer>();
        collection.add(5);
        collection.add(123);
        
        System.out.println(collection.size()); // 2
        System.out.println(collection.isEmpty()); // false
        
        collection.clear();
        System.out.println(collection.size()); // 0
        System.out.println(collection.isEmpty()); // true
    }
}

转成数组

10:toArray() 集合转换数组

import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<Integer> collection = new ArrayList<Integer>();
        collection.add(5);
        collection.add(123);
        
        Integer[] arr = new Integer[collection.size()]; // 先创建一个跟集合大小一样的数组
        arr = collection.toArray(arr); // 再把数组传入,collection返回的数组就是真正转换出来的数组
    }
}

------------------------------多说几句----------------------------------

在面向对象的专题中,我们提过继承和多态,在集合这个范畴中可以清晰地看到它的利用之处:

如果我们定义一个动物园,里面可以放入任意动物,这个时候只需要在泛型中标记Animal,那么所有Animal以及它的子类都可以被加入到集合中:

import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<Animal> zoo = new ArrayList<>();//jdk7增加了菱形泛型,等号右侧的尖括号可以省略
        collection.add(new Cat());
        collection.add(new Dog());
    }
}

abstract class Animal {
    protected String name;
}
class Cat extends Animal {
    
}
class Dog extends Animal {
    
}

有关更多的内容,可以多学一点:泛型的上限和下限

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

LintCode 乱序字符串题目分析代码

给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。

1053
来自专栏大闲人柴毛毛

剑指 offer代码解析——面试题37两个链表的第一个公共结点

本题的详细解析均在代码注释中: import java.util.Stack; /** * 题目:输入两个链表,找出他们的第一个公共结点 * @autho...

3155
来自专栏吾爱乐享

java之学习去除ArrayList中重复自定义对象元素

1586
来自专栏浪淘沙

java学习day07 常用API

2018.6.11 1.object 所有类的父类 toString 打印对象的地址值 hashCode 对象的存储位置的算法 ...

1393
来自专栏LinkedBear的个人空间

唠唠SE的集合-09——Map接口 原

将键映射到值的对象,一个映射不能包含重复的键,但值可以重复。每个键最多只能映射到一个值。

892
来自专栏LanceToBigData

JavaSE(八)集合之Set

今天这一篇把之前没有搞懂的TreeSet中的比较搞得非常的清楚,也懂得了它的底层实现。希望博友提意见! 一、Set接口 1.1、Set集合概述   Set集合:...

2315
来自专栏Bingo的深度学习杂货店

Q35 Search Insert Position

Given a sorted array and a target value, return the index if the target is found...

2887
来自专栏黑泽君的专栏

java基础学习_集合类03_用户登录注册案例(集合版)、Set集合、Collection集合总结_day17总结

============================================================================= ==...

1022
来自专栏LanceToBigData

JavaSE集合(八)之Map

前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族。以前的时候学习Map的时候没有很认真的去学习,我觉得...

2208
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-17(01)总结,TreeSet,LinkHashSet

(3)TreeSet集合 A:底层数据结构是红黑树(是一个自平衡的二叉树) B:保证元素的排序方式 a:自然排序(元素具备比较性) 让元素所属的类实现C...

3256

扫码关注云+社区

领取腾讯云代金券