(二十三)Collecttion集合
创始人
2024-05-13 04:53:49
0

目录

        前言:

        ①Collecttion集合的体系结构

        ②Collecttion集合的遍历方式

        方式一:迭代器

        方式二:foreach/增强for循环

        方式三:Lambda表达式

        ③常见数据结构


前言:

        Collection: 是所有集合的顶级接口,里面规定了集合操作元素的相关功能方法集合与数组一样,用于存储一组元素,但是集合又多个不同的实现类来实现不同的数据结构

1.概述:

        集合和数组都是容器。

        集合是java中存储对象数据的一种容器。

2.数组和集合的元素存储的个数问题?

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

        集合的大小不固定,类型也可以选择不固定。

3.数组和集合的元素存储元素的类型问题?

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

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

4.数组和集合适合的场景?

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

        数据的个数不确定,且要做增删元素的时候。

①Collecttion集合的体系结构

1.Collecttion集合的体系结构:

 

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

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

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

 

2.Collecttion集合特点:

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

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

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

                HashSet:无序、不重复、无索引。

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

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

3.代码演示:

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
​
/*** Collection  单列集合(祖宗接口)  每个数据只包含一个值* 1、list:  (Arraylist  Linkedlist)有序、可重复、有索引* 2、Set:  (HashSet   TreeSet有序   LinkedHashSet 按照大小默认升序排序)无序、不重复、无索引* Map  双列集合  每个数据包含两个值*/
/**单列集合API* add()  添加元素* clear()  清空元素* isEmpty()  判断集合是否为空,是则返回true* size()  获取集合的大小* contains("")  判断集合是否包含某个元素* remove("")  删除某个元素值:如果有多个重复元素,默认删除前面的第一个* object[] arrs = c.toArray()   把集合转换成数组* 扩展 :* c1.addAll(c2)  把c2的集合元素传给c1(c2不会删去元素)*/
public class Collection_Demo1 {public static void main(String[] args) {//有序、可重复、有索引Collection list = new ArrayList<>();//多态list.add("JAVA");list.add("JAVA");list.add(23);list.add(23);list.add(false);list.add(false);System.out.println(list);System.out.println("=========================");//无序、不重复、无索引Collection list1 = new HashSet();//多态list1.add("JAVA");list1.add("JAVA");list1.add(23);list1.add(23);list1.add(false);list1.add(false);System.out.println(list1);System.out.println("=========================");Collection list2 = new ArrayList<>();list2.add("JAVA");list.addAll(list1);}
}

4.集合对于泛型的支持

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

 

5.注意:

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

6.Collecttion集合常用API

 

7.代码演示:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
/**单列集合API* add()  添加元素* clear()  清空元素* isEmpty()  判断集合是否为空,是则返回true* size()  获取集合的大小* contains("")  判断集合是否包含某个元素* remove("")  删除某个元素值:如果有多个重复元素,默认删除前面的第一个* object[] arrs = c.toArray()   把集合转换成数组* 扩展 :* c1.addAll(c2)  把c2的集合元素传给c1(c2不会删去元素)*/
public class Collection_Demo3 {public static void main(String[] args) {Collection c = new ArrayList<>();//1.添加元素,成功返回truec.add("JAVA");c.add("Python");c.add("HTML");System.out.println(c);//2.清空集合的元素c.clear();System.out.println(c);//3.判断集合是否为空,是则返回trueSystem.out.println(c.isEmpty());//4.获取集合的大小System.out.println(c.size());//5.判断集合是否包含某个元素System.out.println(c.contains("JAVA"));System.out.println(c.contains("Python"));System.out.println(c.contains("Html"));//6.删除某个元素值:如果有多个重复元素,默认删除前面的第一个System.out.println(c.remove("JAVA"));System.out.println(c);//7.把集合转换成数组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("AK47");c2.add("58同城");//把c2的集合元素传给c1(c2不会删去元素)c1.addAll(c2);System.out.println(c1);System.out.println(c2);}
}

②Collecttion集合的遍历方式

方式一:迭代器

1.迭代器的遍历概述:

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

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

2.Collecttion集合获取迭代器

 

3.Iterator中的常用方法

 

4.代码演示:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
​
/**迭代器(Iterator)  是集合的专用迭代器* Iterator iterator()  得到迭代器对象,默认值向当前集合的索引0* 迭代器取元素越界会报异常*/
public class Iterator_Demo4 {public static void main(String[] args) {Collection lists = new ArrayList<>();//多态lists.add("JAVA");lists.add("python");lists.add("html");System.out.println(lists);
​//1、得到当前集合的迭代器Iterator it = lists.iterator();//一次只能取出一个元素  取元素不要越界String ele = it.next();System.out.println(ele);System.out.println(it.next());System.out.println("==================================");//2、定义while循环  取出全部元素while (it.hasNext()){String eles = it.next();System.out.println(eles);}}
}

方式二:foreach/增强for循环

1.概述:

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

        ②它是JDK5之后出现的,其内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。

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

2.增强for循环的遍历格式:

 

3.代码演示:

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
​
/**增强for循环  既可以遍历数组也可以遍历集合* 内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法* 实现Iterable接口的类才可以使用迭代器和增强for循环  Collection实现了Iterable接口*  for(元素数据类型  变量名  :数组或Collection集合){ 在此处使用变量 }*/
​
public class Demo {public static void main(String[] args) {//举例:增强for循环  遍历Collection list = new ArrayList<>();list.add("JAVA");list.add("python");list.add("html");for (String ele: list){System.out.println(ele);}System.out.println("============================");double[] score = {100,99,23,14,56,14};for (double sc : score) {System.out.println(sc);
//            if (sc == 100) {
//                sc = 102;//修改无意义,不会影响数组的元素值
//            }}System.out.println("======================");//Lambda 遍历方式list.forEach(new Consumer() {@Overridepublic void accept(String s) {System.out.println(s);}});System.out.println("=====================");//简便遍历方法list.forEach(System.out::println);}
}

方式三:Lambda表达式

1.Lambda表达式遍历集合

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

2.Collection结合Lambda遍历的API

 

例如:

 

3.代码演示:

/**Lambda  遍历方式**/
public class Demo {public static void main(String[] args) {//举例:增强for循环  遍历Collection list = new ArrayList<>();list.add("JAVA");list.add("python");list.add("html");for (String ele: list){System.out.println(ele);}System.out.println("============================");double[] score = {100,99,23,14,56,14};for (double sc : score) {System.out.println(sc);
//            if (sc == 100) {
//                sc = 102;//修改无意义,不会影响数组的元素值
//            }}System.out.println("======================");//Lambda 遍历方式list.forEach(new Consumer() {@Overridepublic void accept(String s) {System.out.println(s);}});System.out.println("=====================");//简便遍历方法list.forEach(System.out::println);}
}

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

需求:

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

分析:

        ①定义一个电影类,定义一个集合存储电影对象;

        ②创建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 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;}
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
}

实现类:

import java.util.ArrayList;
​
public class Test {public static void main(String[] args) {//1定义电影类//2.创建三个电影类Movie m1 = new Movie("《肖申克的救赎》",9.7,"罗宾斯");Movie m2 = new Movie("《霸王别姬》",9.7,"张国荣");Movie m3 = new Movie("《阿甘正传》",9.5,"张丰毅");//3.创建一个电影类型ArrayList集合,存储三部电影ArrayList movies = new ArrayList<>();movies.add(m1);movies.add(m2);movies.add(m3);//4.遍历电影类型的集合中的每个电影对象,访问它的信息即可for (int i = 0; i < movies.size(); i++) {Movie m = movies.get(i);System.out.println("电影名称:"+m.getName());System.out.println("电影得分:"+m.getScore());System.out.println("电影导演:"+m.getActor());System.out.println("-----------------------------");}}
}

5.集合中存储的元素是什么信息?

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

③常见数据结构

1.数据结构的概述:

        数据结构是计算机底层存储、组织数据的方式。是指数据之间是以什么方式排列在一起的。

        通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。

2.常见的数据结构:

                栈

                队列

                数组

                链表

                二叉树

                二叉查找树

                平衡二叉树

                红黑树

                ......

3.栈数据结构的执行特点:

        后进先出,先进后出

        数据进入栈模型的过程称为:压/进栈。

4.常见数据结构之队列

        先进先出,后进后出

        数据从后端进入队列模型的过程称为:入队列;

        数据从前端离开队列模型的过程称为:出队列;

5.常见数据结构之数组

        ①查询速度快:查询数据通过地址值和索引定位,查询任意数据耗时相同。(元素在内存中是连续存储的)

        ②删除效率低:要求原始数据删除,同时后面每个数据前移。

        ③添加效率极低:添加位置后的每个数据后移,再添加元素。

6.链表的特点

        ①链表中的元素是在内存中不连续存储的,每个元素节点包含数据值和下一个元素的地址。

        ②链表查询慢,无论查询哪个数据都要从头开始找。

        ③链表增删相对快。

7.链表的种类

单向链表:

 

双向链表:

 

8.二叉树、二叉查找树

        ①普通二叉树概述:

                只能有一个根节点,每个节点最多支持2个直接子节点;

                结点的度:节点拥有的子树的个数,二叉树的度不大于2,叶子节点度为0的节点,也称为终端节点;

                高度:叶子节点的高度为1,则子节点的父节点高度为2,以此类推,根节点的高度最高;

                层:根节点在第一层,以此类推;

                兄弟节点:拥有共同父节点的节点互称为兄弟节点。

②二叉查找树又称为二叉排序树或者二叉搜索树

        特点:

                1.每一个节点上最多有两个子节点;

                2.左子树上所有节点的值都小于根节点的值;

                3.右子树上所有节点的值都大于根节点的值;

        目的:提高检索数据的性能。

9.平衡二叉树

        平衡二叉树 是在满足查找二叉树的大小规则下,让树尽可能矮小,以此提高查数据的性能。

10.平衡二叉树的要求

        任意节点的左右两个子树的高度差不超过1,任意节点的左右两个子树都是一颗平衡二叉树。

        平衡二叉树在添加元素后可能导致不平衡,基本策略是进行左旋,或者右旋保证平衡。

11.红黑树

        红黑树增删改查的性能都很好。

        概述:

                红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构。

                1972年出现,当时被称为平衡二叉B树,1978年被修改为“红黑树”。

                每一个节点可以是红或者黑;红黑树不是通过高度平衡的,它的平衡是通过“红黑规则”进行实现的。

12.红黑规则

                每一个节点或是红色的,或是黑色的,根节点必须是黑色的;

                如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,叶节点是黑色的;

                如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况);

                对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;

13.添加节点

                添加节点的颜色,可以是红色的,也可以是黑色的。

                默认用红色效率高。

相关内容

热门资讯

国庆节联欢会主持词 国庆节联欢会主持词  契合现场环境的主持词能给集会带来双倍的效果。在人们积极参与各种活动的今天,主持...
圣诞晚会主持词:结束语(中英...   F: Because of gathering together , having let us...
元旦晚会的致辞 元旦晚会的致辞(精选12篇)  在平时的学习、工作或生活中,大家肯定对各类致辞都很熟悉吧,致辞是指在...
欢聚一堂的主持词 欢聚一堂的主持词  主持词要根据活动对象的不同去设置不同的主持词。在当下这个社会中,主持人的需求越来...
在中学励志报告会上的主持词 在中学励志报告会上的主持词   在人们越来越注重自身素养的今天,报告不再是罕见的东西,我们在写报告的...
惊鸿舞主持词 惊鸿舞主持词汇总  1、《Lightspeed》  男:青春,是阳光下初融的冰雪,叮咚叮咚奏响着奇幻...
主持人串词等 主持人串词等五篇  第一篇:《新款文艺汇演主持人串词》  2014年文艺汇演主持人串词  男1、女1...
初中毕业典礼主持词开场白 初中毕业典礼主持词开场白  时光弹指一挥间悄然而逝,在这个栀子花开的季节,初中学生即将毕业,初中毕业...
运动会主持词 运动会主持词范本合集5篇  根据活动对象的不同,需要设置不同的主持词。随着中国在不断地进步,越来越多...
晚会节目主持串词 晚会节目主持串词  篇一:第五届艺体节节目主持串词  第五届艺体节节目主持串词 下午衔接:各位老师,...
《为了谁》节目主持词 《为了谁》节目主持词  持人在台上所表演的主持词,则是集会的灵魂之所在。下面是小编收集整理的《为了谁...
新郎婚礼致辞 关于新郎婚礼致辞(精选5篇)  在日常学习、工作和生活中,大家都写过致辞吧,致辞是指在举行会议或某种...
乔迁的感谢词 乔迁的感谢词  尊敬的各位来宾、女士们、先生们、亲爱的父老乡亲们:  大家好!  首先我代表我的家人...
开业致辞 开业致辞(通用6篇)  在日复一日的学习、工作或生活中,大家或多或少都用到过致辞吧,致辞要求风格的雅...
80岁生日庆典主持词 80岁生日庆典主持词(精选5篇)  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵...
感恩节活动主持词 2022年感恩节活动主持词  根据活动对象的不同,需要设置不同的主持词。在如今这个中国,我们对主持词...
电视剧《一起同过窗》经典的台... 电视剧《一起同过窗》经典的台词  在社会一步步向前发展的今天,很多情况下我们需要用到台词,台词是用以...
开门红主持词 开门红主持词  活动对象的不同,主持词的写作风格也会大不一样。在现在的社会生活中,主持人在活动中起到...
六一儿童节慰问活动致辞 六一儿童节慰问活动致辞(通用5篇)  在我们平凡的日常里,大家一定都接触过致辞吧,致辞具有有张有弛、...