栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

黑马笔记---集合(Collection的常用方法与遍历方式)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

黑马笔记---集合(Collection的常用方法与遍历方式)

目录

1.集合

1.1集合的概述

集合的特点

1.2集合的体系特点

Collection集合特点

集合对于泛型的支持

1.3Collection集合常用API

1.4Collection集合的遍历方式

方式一:迭代器

方式二:foreach/增强for循环

方式三:lambda表达式

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


1.集合

1.1集合的概述

集合和数组都是容器。

数组定义完成并启动后,类型确定、长度固定,适合元素的个数和类型确定的业务场景,不适合做需要增删数据操作。

集合的特点

集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。

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

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

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

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

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

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

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

3.数组和集合适合的场景。

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

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

1.2集合的体系特点

 Collection单列集合,每个元素(数据)只包含一个值。

Map双列集合,每个元素包含两个值(键值对)。

Collection集合特点

List系列集合:添加的元素是有序、可重复、有索引。

ArrayList、LinekdList :有序、可重复、有索引。

Set系列集合:添加的元素是无序、不重复、无索引。

HashSet: 无序、不重复、无索引;LinkedHashSet: 有序、不重复、无索引。

TreeSet:按照大小默认升序排序、不重复、无索引。

集合对于泛型的支持

集合都是支持泛型的,可以在编译阶段约束集合只能操作某种数据类型

注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。

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


public class CollectionDemo1 {
    public static void main(String[] args) {
        // 有序 可重复 有索引
        Collection list = new ArrayList();
        list.add("Java");
        list.add("Java");
        list.add("Mybatis");
        list.add(23);
        list.add(23);
        list.add(false);
        list.add(false);
        System.out.println(list);

        // 无序 不重复  无索引
        Collection list1 = new HashSet();
        list1.add("Java");
        list1.add("Java");
        list1.add("Mybatis");
        list1.add(23);
        list1.add(23);
        list1.add(false);
        list1.add(false);
        System.out.println(list1);

        System.out.println("-----------------------------");
        // Collection list2 = new ArrayList();
        Collection list2 = new ArrayList<>(); // JDK 7开始之后后面类型申明可以不写
        list2.add("Java");
        // list2.add(23);
        list2.add("zhangsan");

        // 集合和泛型不支持基本数据类型,只能支持引用数据类型
        // Collection list3 = new ArrayList<>();
        Collection list3 = new ArrayList<>();
        list3.add(23);
        list3.add(233);
        list3.add(2333);

        Collection list4 = new ArrayList<>();
        list4.add(23.4);
        list4.add(233.0);
        list4.add(233.3);
    }
}

总结:

1.集合的代表是?

Collection接口。

2.Collection集合分了哪2大常用的集合体系?

List系列集合:添加的元素是有序、可重复、有索引。

Set系列集合:添加的元素是无序、不重复、无索引。

3.如何约定集合存储数据的类型,需要注意什么?

集合支持泛型。

集合和泛型不支持基本类型,只支持引用数据类型。

1.3Collection集合常用API

Collection集合

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

Collection API如下:

 

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


public class CollectionDemo {
    public static void main(String[] args) {
        // HashSet:添加的元素是无序,不重复,无索引。
        Collection c = new ArrayList<>();
        // 1.添加元素, 添加成功返回true。
        c.add("Java");
        c.add("HTML");
        System.out.println(c.add("HTML"));
        c.add("MySQL");
        c.add("Java");
        System.out.println(c.add("黑马"));
        System.out.println(c); // [Java, HTML, HTML, MySQL, Java, 黑马]

        // 2.清空集合的元素。
        // c.clear();
        // System.out.println(c);

        // 3.判断集合是否为空 是空返回true,反之。
        // System.out.println(c.isEmpty());

        // 4.获取集合的大小。
        System.out.println(c.size());

        // 5.判断集合中是否包含某个元素。
        System.out.println(c.contains("Java"));  // true
        System.out.println(c.contains("java")); // false
        System.out.println(c.contains("黑马")); // true

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

        // 7.把集合转换成数组  [HTML, HTML, MySQL, Java, 黑马]
        Object[] arrs = c.toArray();
        System.out.println("数组:" + Arrays.toString(arrs));

        System.out.println("----------------------拓展----------------------");
        Collection c1 = new ArrayList<>();
        c1.add("java1");
        c1.add("java2");
        Collection c2 = new ArrayList<>();
        c2.add("赵敏");
        c2.add("殷素素");
        // addAll把c2集合的元素全部倒入到c1中去。
        c1.addAll(c2);
        System.out.println(c1);
        System.out.println(c2);
    }
}

1.4Collection集合的遍历方式

方式一:迭代器

迭代器遍历概述

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

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

Collection集合获取迭代器

Iterator中的常用方法

 

 

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


public class CollectionDemo01 {
    public static void main(String[] args) {
        ArrayList lists = new ArrayList<>();
        lists.add("赵敏");
        lists.add("小昭");
        lists.add("素素");
        lists.add("灭绝");
        System.out.println(lists);
        // [赵敏, 小昭, 素素, 灭绝]
        //   it

        // 1、得到当前集合的迭代器对象。
        Iterator it = lists.iterator();
//        String ele = it.next();
//        System.out.println(ele);
//        System.out.println(it.next());
//        System.out.println(it.next());
//        System.out.println(it.next());
        // System.out.println(it.next()); // NoSuchElementException 出现无此元素异常的错误

        // 2、定义while循环
        while (it.hasNext()){
            String ele = it.next();
            System.out.println(ele);
        }
        System.out.println("-----------------------------");

    }
}

迭代器执行流程

 总结:

1.迭代器的默认位置在哪里。

Iterator iterator():得到迭代器对象,默认指向当前集合的索引0。

2.迭代器如果取元素越界会出现什么问题。

会出现NoSuchElementException异常。

方式二:foreach/增强for循环

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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class CollectionDemo02 {
    public static void main(String[] args) {
        Collection lists = new ArrayList<>();
        lists.add("赵敏");
        lists.add("小昭");
        lists.add("殷素素");
        lists.add("周芷若");
        System.out.println(lists);
        // [赵敏, 小昭, 殷素素, 周芷若]
        //  ele

        for (String ele : lists) {
            System.out.println(ele);
        }

        System.out.println("------------------");
        double[] scores = {100, 99.5 , 59.5};
        for (double score : scores) {
            System.out.println(score);
//            if(score == 59.5){
//                score = 100.0; // 修改无意义,不会影响数组的元素值。
//            }
        }
        System.out.println(Arrays.toString(scores));

    }
}

方式三:lambda表达式

Lambda表达式遍历集合

得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

Collection结合Lambda遍历的API

 

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public class CollectionDemo03 {
    public static void main(String[] args) {
        Collection lists = new ArrayList<>();
        lists.add("赵敏");
        lists.add("小昭");
        lists.add("殷素素");
        lists.add("周芷若");
        System.out.println(lists);
        // [赵敏, 小昭, 殷素素, 周芷若]
        //  s
        lists.forEach(new Consumer() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

//        lists.forEach(s -> {
//                System.out.println(s);
//        });

        // lists.forEach(s ->  System.out.println(s) );

        lists.forEach(System.out::println );

    }
}

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

案例:影片信息在程序中的表示

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

分析:

1.定义一个电影类,定义一个集合存储电影对象。

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

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

public class Movie {
    private String name;
    private double score;
    private String actor;

    public Movie() {
    }

    public Movie(String name, double 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 double getScore() {
        return score;
    }

    public void setScore(double 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 + ''' +
                '}';
    }
}
import java.util.ArrayList;
import java.util.Collection;

public class TestDemo {
    public static void main(String[] args) {
        // 1、定义一个电影类
        // 2、定义一个集合对象存储3部电影对象
        Collection movies = new ArrayList();
        movies.add(new Movie("《你好,李焕英》", 9.5, "张小斐,贾玲,沈腾,陈赫"));
        movies.add(new Movie("《唐人街探案》", 8.5, "王宝强,刘昊然,美女"));
        movies.add(new Movie("《刺杀小说家》",8.6, "雷佳音,杨幂"));

        System.out.println(movies);

        // 3、遍历集合容器中的每个电影对象
        for (Movie movie : movies) {
            System.out.println("片名:" + movie.getName());
            System.out.println("得分:" + movie.getScore());
            System.out.println("主演:" + movie.getActor());
        }

    }
}
 

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

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号