小东吖 之 java Collection集合和迭代器

本文深入讲解Java集合框架的基础概念,对比数组与集合的区别,并详细解析List、Set等接口及其实现类如ArrayList、HashSet的特点与应用场景。

一.Collection集合

数组: 存储同一种数据类型的集合容器.

数组的特点:
1. 只能存储相同数据类型的数据
2. 一旦给定了长度,数组长度被固定了,不能改变
3. 数组中的元素与元素之间的内存地址是连续的

注意: Object类型的数组可以存储任意类型的数据

集合:集合是存储对象数据的集合容器。

集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。
注意:
集合虽然说可以储存任意类型的对象数据 是因为可以通过自动装箱保存基本数据类型

这里写图片描述

Collection 单例集合的根接口

 List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 
 ArrayList  底层是维护了一个Object数组实现的 特点: 查询速度快,增删慢。
 LinkedList  底层是使用了链表数据结构实现的  特点: 查询速度慢,增删快。
 Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
HashSet  底层是使用了哈希表来支持的,特点: 存取速度快. 
TreeSet   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。
  1. Collection接口中的方法:

    1.测试collection接口中的方法


// 首先定义Collection接口的
// Collection是个接口  要遵循多态的方式 去创建实现类的对象
Collection collection = new ArraryList();
// 添加(返回值是布尔类型的)
add() 添加成功返回true 否则返回false
addAll(Collection c)  把一个集合 的元素添加到另外一个集合中去。
// 添加一个字符串
boolean b1 = collection.add("a");
// 添加数字
boolean b2 = collection.add(60);
// 添加对象
boolean b1 = collection.add(new Persom("小东吖",20) );
System.out.println(collection);

结果

[a, 60]

2.addAll 两个集合 第一个集合传到 第一个

                // 定义第一个集合
        Collection c1 = new ArrayList();
        // 定义第二个集合
        Collection c2 = new ArrayList();
        c1.add("a");
        c1.add("b");
        // 把传入的集合中所有的元素 添加到第一个集合中
        c2.add("q");
        c2.add("w");
        c2.add("e");
        //c1.addAll(c2);
        // 把一个集合当成一个元素传入到c1集合中
        c1.add(c2);
        System.out.println(c1);
为什么能装基本数据类型?
比如 add(60)
Object obj = new Integer(100);
其中有个自动装箱的操作

结果

[a, b, [q, w, e]]
// 这里是把一个集合当成一个元素添加进去的

3.测试一些方法

Collection collection = new ArrayList();
        collection.add("a");
        collection.add("b");
        collection.add("c");
        collection.add("d");

        // 测试方法  判读这个集合是不是空的
        boolean b1 = collection.isEmpty();
        System.out.println(b1);
        // 获取集合长度
        System.out.println(collection.size());
        // 是否包含某个元素
        boolean b2 = collection.contains("h");
        System.out.println(b2);
        // 删除某个元素
        boolean b3 = collection.remove("c");
        System.out.println("b3 = " + b3);
        // 清空集合
        collection.clear();
        // 打印集合元素
        System.out.println(collection);

结果

false
4
false
b3 = true
[]

4.遍历字符串数组

        // 遍历字符串集合
        Collection collection = new ArrayList();
        collection.add("a");
        collection.add("b");
        collection.add("c");
        collection.add("d");

        // 将集合转化为数组
        Object[] array = collection.toArray();
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }

结果

a
b
c
d
//创建一个集合 添加三个学生禁区 遍历集合 只打印学生姓名

// 创建学生的类
public class Student {
    // 私有化成员变量
    private String name;
    private int age;

    // 构造方法
    public Student() {

    }
    public Student(String name,int age) {
        this.age = age;
        this.name = name;
    }
    // set / get 方法
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    //  直接打印student对象 就可以调用toString方法
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
}
// 遍历集合
public static void main(String[] args) {
        Collection collection = new ArrayList();
        // 添加三个对象
        collection.add(new Student("小东吖", 12));
        collection.add(new Student("小东", 14));
        collection.add(new Student("哈哈", 15));
        // 
        // 强转数组类型 不能把数组中的元素强转
        Object[] array = collection.toArray();
        for (int i = 0; i < array.length; i++) {
            // 数组遍历中要把数组中每一个对象(元素)都进行向下转型
            // 向下转型.
            Student student = (Student)array[i];
            System.out.println(student.getName());
        }
    }

结果

小东吖
小东
哈哈

5.判断是否全部包含

containsAll(Collection<?> c) 
 如果此 collection 包含指定 collection 中的所有元素,则返回 true。
 ```
``
Collection collection1 = new ArrayList();
        Collection collection2 = new ArrayList();
        collection1.add("q");
        collection1.add("w");
        collection1.add("r");

        collection2.add("c");
        collection2.add("q");

        boolean containsAll = collection1.containsAll(collection2);
        System.out.println(containsAll);

结果

false

6.removeAll(Collection

  移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
    // 删除重复的
    Collection collection1 = new ArrayList();
    Collection collection2 = new ArrayList();
    collection1.add("q");
    collection1.add("w");
    collection1.add("r");

    collection2.add("r");
    collection2.add("s");
    // 判断全部包含时 是可以有重复元素的 也算包含
    collection1.removeAll(collection2);
    System.out.println(collection1);

[q, w]

7.retainAll(Collection

  仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
Collection collection1 = new ArrayList();
        Collection collection2 = new ArrayList();
        collection1.add("q");
        collection1.add("w");
        collection1.add("r");

        collection2.add("y");
        collection2.add("w");
        // c1 转换成 是把两个集合的交集取出来
        // 如果c1没变 就返回true
        // c1改变了 返回 false
        boolean retainAll = collection1.retainAll(collection2);
        System.out.println(collection1);
        System.out.println(retainAll);

二.集合迭代器

迭代器(Iterator)

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
  注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

1.迭代器应用:

 Collection collection = new ArrayList();
        collection.add("a");
        collection.add("b");
        // 获取集合中迭代器
        Iterator iterator = collection.iterator();
        // 判断有没有下一个元素
        boolean b1 = iterator.hasNext();
        // 获取下一个元素
        Object next = iterator.next();
        System.out.println(b1);
        System.out.println(next);
    }

结果

true
a

2.用迭代器遍历集合

 Collection collection = new ArrayList();
        // 迭代器遍历时 相当于有一个指针 指向你的集合
        // 每next一次 指针向后移动 
        // 最终遍历完成
        collection.add("a");
        collection.add("b");
        collection.add("c");
        collection.add("d");
        //fun1(collection);


        // 使用迭代器循环遍历数组
        // 获取集合中迭代器
        Iterator iterator = collection.iterator();
        // 判断是否有下一个元素
        while (iterator.hasNext()) {
            // 获取集合中元素
            Object next = iterator.next();
            System.out.println(next);
        }

结果

a
b
c
d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值