IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Java——集合 -> 正文阅读

[开发工具]Java——集合

允子在Java中已经为我们提供了数组,为什么还要使用集合?要搞清楚为什么,首先得分别分析以下数组、集合各自的特点

数组特点

因为数组定义后,类型确定、长度确定,

在进行增删数据(增删时需要放弃原有数组或移位)操作时不方便

集合特点

集合的大小不固定,启动后还可以动态变化,类型也可以不固定

集合非常适合做元素的增删操作

注:集合中只能存储引用类型数据,如果要存储基本数据类型要使用包装类

集合可以看作是Java中存储对象数据的一种容器。

小结:

数组和集合的元素存储的个数问题。

数组定义后类型固定,长度固定

集合类型可以不固定,大小是可变的

数组和集合存储元素的类型问题。

数组可以存储基本数据类型和引用数据类型的数据

集合只能存储引用数据类型的数据

数组和集合适合的场景。

数组适合做数据个数和类型确定的场景

集合适合做数据个数不确定,且要做增删元素的场景

Collection的常用方法如下

方法演示代码如下:

package com.collection;

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

/**
 * @Time: 2022/4/5 14:25
 * @Author: 宁洪康
 * @Package: com.collection
 * @File: Collection_Api.java
 * @Software: IntelliJ IDEA
 */
public class Collection_Api {
    public static void main(String[] args) {
        // ArrayList 有序、可重复、有索引
        Collection<String> list1 = new ArrayList<String>(); // 多态写法,不能调用子类特有方法
        // 1,添加元素,添加成功返回true
        list1.add("Java");
        list1.add("HTML");
        list1.add("MySql");
        list1.add("Java");
        // list1.add(23);  // 错误写法,泛型规定了只能添加String类型
        System.out.println(list1.add("宋老狗"));  // true
        System.out.println(list1); // [Java, HTML, MySql, Java, 宋老狗]
        System.out.println("--------------");

        // 2.清空集合元素
        //list1.clear();
        //System.out.println(list1);
        //System.out.println("--------------");

        // 3.判断集合是否为空,为空返回true
        System.out.println(list1.isEmpty());
        System.out.println("--------------");

        // 4.获取集合大小
        System.out.println(list1.size());
        System.out.println("--------------");

        // 5.判断集合中是否有某元素
        System.out.println(list1.contains("宋狗"));  // false
        System.out.println(list1.contains("宋老狗"));  // true
        System.out.println("--------------");

        // 6.删除某个元素:如果有多个重复元素,默认删除前的的第一个
        list1.remove("Java");  // ture
        System.out.println(list1.remove("java"));  // false
        System.out.println(list1);
        System.out.println("--------------");

        // 7.把集合转换成数组
        Object[] arr = list1.toArray();
        System.out.println(Arrays.toString(arr));

        System.out.println("--------------------拓展--------------------");
        Collection<String> c1 = new ArrayList<>();
        c1.add("java1");
        c1.add("java2");
        Collection<String> c2 = new ArrayList<>();
        c2.add("宋老狗");
        c2.add("高衙内");
        // 用addAll把集合c2的元素全部导入c1中
        c1.addAll(c2);
        System.out.println(c1);
        System.out.println(c2);
    }
}

代码结果如下:

?

Collection集合的遍历方式:

? ? ? ? 方式一:迭代器

????????方式二:foreach/增强for

????????方式三:lambda表达式

迭代器遍历概述

遍历就是一个一个把容器中的元素访问一遍

迭代器在Java中的代表是Iterator,迭代器是集合的专用遍历方式

Collection集合获取迭代器的方法

?Iterator,的常用方法

以下是迭代器的用法

package com.collection;

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

/**
 * @Time: 2022/4/5 15:56
 * @Author: 宁洪康
 * @Package: com.collection
 * @File: CollectionTraversal_1.java
 * @Software: IntelliJ IDEA
 */
public class CollectionTraversal_1 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("宋老狗");
        lists.add("高衙内");
        lists.add("月全食");
        lists.add("夹子");
        System.out.println(lists);

        // 1.得到集合的迭代器对象
        // 返回迭代器对象,迭代器对象的默认指向集合的0索引
        Iterator<String> it = lists.iterator();

        // 2.定义while循环
        // boolean hasNext() 询问当前位置是否有元素,存在返回true
        // E next() 获取当前位置元素,并将迭代器对象移向下一位置
        while (it.hasNext()) {
            String ele = it.next();
            System.out.println(ele);
        }
    }
}

迭代器小结

????????通过 Iterator<E>? iterator();得到迭代器对象,默认指向当前集合的0索引

????????迭代器如果取元素越界可能会出现NoSuchElementException(无此元素异常)异常

?

增强for循环

增强for循环出现与JDK5之后,其内部原理是一个Iterator迭代器,遍历集合相当于迭代器的简化写法

增强for循环既可以既可以遍历数组也可以遍历集合

实现Iterator接口的类才可以使用迭代器和增强for,Collection已经实现了Iterator接口

格式:

for(元素数据类型 变量名:数组或者Collection集合){
    // 在此处使用变量,该变量就是元素
}

?以下是增强for的用法:

package com.collection;



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

/**
 * @Time: 2022/4/5 16:24
 * @Author: 宁洪康
 * @Package: com.collection
 * @File: CollectionTraversal_2.java
 * @Software: IntelliJ IDEA
 */
public class CollectionTraversal_2 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("宋老狗");
        lists.add("高衙内");
        lists.add("月全食");
        lists.add("夹子");
        System.out.println(lists);

        // 遍历集合
        for (String ele : lists) {
            System.out.println(ele);
        }

        System.out.println("----------");
        // 遍历数组
        double[] scores = {100.0, 89, 67, 76.0, 85.5};
        for (double score : scores) {
            System.out.println(score);
        }
        
        System.out.println("----------");
        // 注:改变增强for里面的变量值对集合、数组没有影响
        double[] scores2 = {100.0, 89, 67, 76.0, 85.5};
        for (double score : scores2) {
            if(score == 100.0) {
                score = 60.0;  // 修改无意义,不影响数组的元素值
            }
            System.out.println(score);
        }
        System.out.println(Arrays.toString(scores2)); // 改变增强for里的变量值对数组没有影响
    }
}

以下是输出结果:

增强for小结

? ? ? ? 增强for既可以遍历集合也可以遍历数组

Lambda表达式遍历集合

得益于JDK8开始的Lambda表达式,为集合提供了一种更简单的、更直接的遍历方式

以下是Collection结合Lambda遍历的API

?以下是Lambda表达式遍历集合的使用

package com.collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;

/**
 * @Time: 2022/4/5 16:45
 * @Author: 宁洪康
 * @Package: com.collection
 * @File: CollectionTraversal_3.java
 * @Software: IntelliJ IDEA
 */
public class CollectionTraversal_3 {
    public static void main(String[] args) {
        Collection<String> lists = new ArrayList<>();
        lists.add("宋老狗");
        lists.add("高衙内");
        lists.add("月全食");
        lists.add("夹子");
        System.out.println(lists);

        lists.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        // 以下是forEach方法的具体实现,来源于Iterable
     /*   default void forEach(Consumer<? super T> action) {
            Objects.requireNonNull(action);
            for (T t : this) {
                action.accept(t);
            }
        }*/

        System.out.println("--------");
        // 使用Lambda简化
        lists.forEach(s -> {
            System.out.println(s);
        });

        System.out.println("--------");
        // 使用Lambda进一步简化简化
        lists.forEach(s -> System.out.println(s));

        System.out.println("--------");
        // 终极简化
        lists.forEach(System.out::println);

    }
}

以下是输出结果:

?Collection集合存储自定义类型对象

我们以一个小案例来分析

需求:某影院系统需要在后台存储三部电影,请依次展示出来

分析:

????????1.定义一个电影类并重写toString()方法,定义一个集合存储电影对象

? ? ? ? 2.创建3个电影对象,封装相关数据,把3个对象存入到集合

? ? ? ? 3.遍历集合中的3个对象,输出相关信息

以下是Movie类

package com.collection;

/**
 * @Time: 2022/4/5 17:07
 * @Author: 宁洪康
 * @Package: com.collection
 * @File: Movie.java
 * @Software: IntelliJ IDEA
 */
public class Movie {
    private String name;
    private float score;
    private String actor;

    public Movie() {
    }

    public Movie(String name, float score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getScore() {
        return score;
    }

    public void setScore(float score) {
        this.score = score;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }

    @Override
    public String toString() {
        return "Movie{" +
                "name='" + name + '\'' +
                ", score=" + score +
                ", actor='" + actor + '\'' +
                '}';
    }
}

以下是MovieDemo类,类中定义了集合对象并将3个电影对象依次加入到了集合中

package com.collection;

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

/**
 * @Time: 2022/4/5 17:14
 * @Author: 宁洪康
 * @Package: com.collection
 * @File: MovieDemo.java
 * @Software: IntelliJ IDEA
 */
public class MovieDemo {
    public static void main(String[] args) {
        // 创建一个集合对象存储三部电影对象
        Collection<Movie> movies = new ArrayList<>();
        movies.add(new Movie("《你好,李焕英》", 9.5f, "张小斐,贾玲,沈腾,陈赫"));
        movies.add(new Movie("《唐人街探案3》", 8.5F, "王宝强,刘昊然"));
        movies.add(new Movie("《刺杀小说家》", 8.6F, "杨幂,雷佳音"));

        //遍历集合容器中的每一个电影对象
        for (Movie movie : movies) {
            System.out.println(movie);
        }
    }
}

以下是运行结果

?总结

集合中存储的是元素对象的地址

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:55:14  更:2022-04-07 22:55:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 15:14:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码