day18_集合
今日内容
零、 复习昨日
一、集合框架体系
二、Collection
三、泛型
四、迭代
五、List
六、ArrayList
七、LinkedList
零、 复习昨日
晨考
一、集合框架体系
数组: 是一个容器,用来存放数据的
- 定长
- 只能存储同一种数据类型的数据
- int[] 可以存储int值,Student[] 可以存储引用类型
- 只有一个length属性,没有方法,使用时功能简单
集合: 是一个容器,用来存放数据的
- 不定长
- 存各种各样类型
- 只能存储引用类型
- 提供了操作数据的各种方法
集合体系
今天主要学习Collection,List,ArrayList,LinkedList…
二、Collection
Collection是单列集合层次结构中的根接口
一些 集合允许有重复的元素,而另一些则不允许。一些 集合是有序的,而另一些则是无序的
Collection下面的一些子实现类有些有重复元素,有些没有,有些可以有序,有些无序
方法: 每个都很常见,很重要
ps: Collection是接口,不能创建对象,为了演示这些API,需要使用子实现类,使用最常用的ArrayList集合来实现方法
package com.qf.col;import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;/*** --- 天道酬勤 ---** @author QiuShiju* @desc 演示Collection接口中的方法*/
public class TestCollection {public static void main(String[] args) {Collection col = new ArrayList();// 添加元素col.add("abc");col.add(1);// 1自动装箱成Integer对象1,存入方法col.add(new Date());System.out.println(col );// 添加所有元素Collection col2 = new ArrayList();col2.add(21);col2.add(22);col2.add(23);col.addAll(col2);System.out.println(col );// 清空集合// col.clear();System.out.println(col );// 判断是否包含元素boolean contains = col.contains(22);System.out.println("是否包含22? " + contains );Collection col3 = new ArrayList();col3.add(21);col3.add(22);col3.add(24);boolean b = col.containsAll(col3);System.out.println("是否全部包含? " + b );// 判断两个集合是否相等(是指内部元素是否全部相等)boolean equals = col2.equals(col3);System.out.println("两个集合是否相等: " + equals );// 是否为空boolean empty = col.isEmpty( );System.out.println("是否为空? " + empty );// 移除指定元素boolean remove = col.remove(22);System.out.println("移除22 " + remove );System.out.println(col );// boolean removeAll(Collection<?> c)// 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。// boolean retainAll(Collection<?> c)// 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。// 获得集合元素个数System.out.println(col.size() );}
}
三、迭代[重要]
迭代 (遍历), 将集合元素迭代,目的是取出元素.
public static void main(String[] args) {Collection col = new ArrayList();col.add(11);col.add(12);col.add(13);col.add(14);// 返回此集合上的迭代器// 迭代器内部就有所有元素了Iterator iterator = col.iterator();// Object next = iterator.next( );// 取出下一个元素// System.out.println(next );//// Object next2 = iterator.next( );// System.out.println(next2 );while (iterator.hasNext()) {Object next = iterator.next( );System.out.println(next );}}
增强for循环(foreach)
// 增强for循环(foreach)/*** for(遍历出结果的数据类型 变量 :被遍历的集合/数组) {* }*/for(Object o : col) {System.out.println(o );}System.out.println("---------------" );int[] arr = {1,2,3,4};for(int i : arr){System.out.println(i );}
四、泛型
泛型在集合中主要是用来规定数据类型的.
语法: 设计时 <类型> , 例如
<E> <K> ,<K,V> <T>
使用时<类型>,类型只能写引用类型,例如
<String> <Integer>
作用:
- 约束集合存储的数据类型
- 避免数据类型转换
public static void main(String[] args) {/*** 集合允许存储不同类型* 但是开发中一般不会存储其他类型,即只会存同一种类型* 此时,就可以使用泛型来约束存储的数据类型*/Collection<Integer> col = new ArrayList<>();col.add(1);// col.add("a");// col.add(1.1);// col.add(new Date());col.add(2);Iterator<Integer> iterator = col.iterator();// 使用泛型后,可以避免类型转换while(iterator.hasNext()) {Integer i = iterator.next();System.out.println(i );}System.out.println("----------" );for(Integer i : col){System.out.println(i );}}
五、List
List是Collection的子接口
List是有序
集合: 有序是指集合迭代顺序和插入顺序一致
List集合允许重复
元素!!
List集合提供了可以针对索引(下标)操作元素的方法
List接口中的方法大部分与父接口Collection中一致,
但是除此之外的方法,确实提了可以通过下标操作元素(CRUD)的方法
- void add(int index,E e)
- E remove(int index)
- E get(int index)
- E set(int index,E e)
List是接口,没有办法演示其中的方法
List接口有两个常用的实现类:
ArrayList
和LinkedList
六、ArrayList[重点]
ArrayList实现了List接口,即ArrayList也是
有序
集合,也允许重复
元素,且那些关于下标操作集合
的方法ArrayList都有!ArrayList不保证线程安全
ArrayList底层是数组
,大小可变是指它会扩容(不是真正大小可变)
6.1 演示方法
构造方法
ArrayList() 创建空集合,默认创建了一个长度为10的数组
- ArrayList(Collection c) 创建一个集合,集合内直接就有指定的参数
- ArrayList(int initialCapacity) 创建一个指定初始化容量的数组
ArrayList<Integer> list = new ArrayList<>( );
方法
- 其他的方法上午在Collection中已经学过
- void add(int index,E e)
- E remove(int index)
- E get(int index)
- E set(int index,E e)
package com.qf.col;import java.util.ArrayList;/*** --- 天道酬勤 ---** @author QiuShiju* @desc 演示ArrayList的方法*/
public class TestArrayList {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>( );System.out.println(list );list.add(11);list.add(12);list.add(13);System.out.println(list );ArrayList<Integer> list2 = new ArrayList<>(list);System.out.println(list2 );// 与Collection接口中一致的方法不再演示// 主要演示List特有的方法: 关于下标操作的方法// void dd(int index,E e) 在指定下标插入指定元素list.add(1,14);list.add(1,14);System.out.println(list );// E get(int index) 根据下标获得指定元素Integer i = list.get(1);System.out.println(i );// E set(int index,E e); 设置指定位置为指定元素,返回旧元素Integer old = list.set(2, 15);System.out.println(list );System.out.println(old );// E remove(int index); 根据下标删除元素,返回旧元素Integer old2 = list.remove(1);System.out.println(old2 );System.out.println(list );// 阅后即焚// 迭代/遍历}
}
6.2 底层原理
ArrayList
底层是使用数组
,默认长度是10
,但是存储元素多于10时会扩容.
如何扩容的?
- 当加入元素时,先判断加入后会不会超出默认长度
- 如果没有超出默认长度
- add(Object o) 元素直接放最后
- add(int index,Object o) 先将该位置以后的元素依次往后移动一个,然后再将该元素放入该位置
- 当加入元素时,判断
加入后长度会不会超出容量
,如果超出就要扩容- 扩容是
创建一个新的数组
,容量是原来的1.5倍
- 将原来数组的元素依次拷贝到新数组
- 然后再放入新元素
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdrKQEaK-1682069374810)(https://qiushiju-tuchuang.oss-cn-hangzhou.aliyuncs.com/image/image-20230222160227208.png)]
// jdk源码 private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1);if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// minCapacity is usually close to size, so this is a win:elementData = Arrays.copyOf(elementData, newCapacity);}
6.3 特点[记住]
ArrayList特点: 1) 有序 2) 重复 3) 查询更新效率高 4) 删除插入效率低
应用场景: 适合那些查询频率高的地方. 且基本大部分场景都是经常查不经常删除和插入的,所以呢ArrayList就非常常用!!! 如果以后没有特殊说明,直接就使用ArrayList!!
七、LinkedList
LinkedList是List的实现类,那么LinkedList也是允许重复,有序
且LinkedList集合也有关于下标操作集合的方法,但是还提供了一些关于操作开头和结尾的方法
底层是使用
链表
实现.
7.1 演示方法
public static void main(String[] args) {LinkedList<Integer> list = new LinkedList<>( );System.out.println(list );list.add(1);list.add(2);list.add(3);list.add(3);list.add(1,4);System.out.println(list );// 其他List集合中关于下标的方法LinkedList都有,不再演示// 重点演示,关于头/尾的操作list.addFirst(0);list.addLast(5);System.out.println(list );System.out.println("------------------------------" );list.removeFirst();list.removeLast();System.out.println(list );System.out.println("------------------------------" );Integer pop = list.pop( );System.out.println(pop );System.out.println(list );}
7.2 底层原理
底层是双向链表实现
7.3 特点
- 有序
- 允许重复
查找,更新时效率比较低
插入,删除时效率比较高
八、扩展
面试
// 会出现并发编程问题的// Iterator<Integer> iterator = list.iterator( );// while(iterator.hasNext()) {// Integer next = iterator.next( );//// // 使用集合自己方法进行删除/添加会出现并发修改异常// list.remove(1);//// }System.out.println(list );// 不会出现并发编程异常ListIterator<Integer> listIterator = list.listIterator( );while (listIterator.hasNext()) {Integer next = listIterator.next( );// 使用迭代器的方法进行对集合内容修改/添加//listIterator.remove();listIterator.add(100);}System.out.println(list );
九、总结
记住Collection接口 方法
记住List的特点: 有序,重复
重点是ArrayList的方法,遍历,底层原理,特点
LinkedList熟悉
相关文章:

day18_集合
今日内容 零、 复习昨日 一、集合框架体系 二、Collection 三、泛型 四、迭代 五、List 六、ArrayList 七、LinkedList 零、 复习昨日 晨考 一、集合框架体系 数组: 是一个容器,用来存放数据的 定长只能存储同一种数据类型的数据int[] 可以存储int值,Student[] 可以存储引用类型…...

Go面试必会基础题
文章目录 1.下面代码有什么错误?2.下面代码有什么问题?3.下面代码输出什么?4.下面这段代码输出什么? 1.下面代码有什么错误? func main() {one : 0one : 1 }参考答案及解析:变量重复声明。不能在单独的声…...

发送封包协议实现XXZ批量秒分解装备
通过发送封包,我们可以让一些反复的枯燥的行为变的简单,高效。 比如XXZ的萃取装备,我们可以一瞬间萃取大量的装备,而省去读条的过程。 我们来萃取一下看看效果 手动萃取是有读条的,那么如果很多装备的话,…...

Spring学习——Nginx
Nginx概述 Nginx介绍 Nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网…...

记录 vue-cli 安装过程
1. VueCli CLI 是 Commond-Line Interface 的缩写 如果开发大型项目,肯定需要考虑代码目录结构、项目结构和部署、热加载、代码单元测试等事情,那么你必然需要使用 VueCLI,使用 VueCLI 可以快速搭建 vue 开发环境以及对应的 webpack 配置。 …...

含氢微网优化调度模型matlab
目录 1 主要内容 模型示意图 目标函数 2 部分程序 3 程序结果 4 下载链接 1 主要内容 最近咨询含氢微网优化调度模型的同学较多,本次就分享一个高质量的源码资源。该程序方法复现《Simulation of design and operation of hydrogen energy utilization syste…...

【springcloud开发教程】路由网关——zuul
官方资料:https://github.com/Netflix/zuul/ 什么是Zuul? Zuul包含了两个主要的功能:路由和过滤 路由功能将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预&#…...

DF竞赛平台携手嬴彻科技与清华大学智能产业研究院,助力自动驾驶挑战赛圆满落幕!
由DataFountain竞赛平台(简称DF平台)提供办赛支持的「首届“嬴彻-清华AIR杯”自动驾驶挑战赛:决策规划算法」已圆满落幕。作为一场前沿性自动驾驶类比赛,本次大赛立足“高速道路”和“城市道路”两大真实场景,选择“半…...

234:vue+openlayers 加载本地shp数据,在map上显示图形
第234个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中利用shapefile读取本地的shp数据,并在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果安装引用配置方式示例源代码(共143行)相关API参考:专栏…...

网络模型-网络体系结构(OSI、TCP/IP)
网络模型(网络体系结构) 网络模型网络的体系结构OSI模型TCP/IP模型OSI和TCP/IP模型对应关系图 常见网络协议 网络模型 网络的体系结构 1、网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起…...

园区智慧导览地图软件,智慧工厂导航定位怎么解决方案的
智慧工厂导航定位怎么解决方案的地图新基建是行业的核心数字基础需求之一,行业内中已构建了较为完整的城市级地理信息系统。园区管理涉及众多方面,因此园区的智慧信息化建设至关重要,需求越来越广泛。在智慧园区中,基于园区的电子…...

Redis高可用之3种集群方案对比
Redis集群方案使用建议: Redis cluster:除非是1000个节点以上的超大规模集群,优先考虑使用Redis clustercodis:旧项目如果仍在使用codis,可继续使用,但也推荐迁移到Redis clustertwemproxy:不建…...

java 线程唤醒于阻塞的常用方法
1.分类描述 1.sleep() 休眠2.suspend() 暂停和 resume() 继续3.yield() 让步 就是我放弃本次执行,但继续排队,下一次有机会在执行。 4.wait() 和 notify() notifyAll() 注:这两个方法,属于Object类,而不属于Thread…...

面包多面包多面包多面包多面包多面包多
1.背景 1.摘要 本文是针对智慧政务中的文本数据挖掘应用的研究。通过建立基于三层网络结构的fastText文本分类模型,聚类量化模型,熵权评估模型解决了群众留言分类,热点问题挖掘,答复意见评价等问题。 针对群众留言分类问题&#…...

windows下Tomcat安装
目录 1.安装java环境 2.配置Tomcat环境变量 3.安装服务 4.启动前修改配置文件 (1)设置tomcat端口 (2)设置临时日志等文件夹的位置 5.放入应用 6.启动Tomcat服务 1.安装java环境 安装tomcat版本对应的JDK 比如:…...

4月17号软件资讯更新合集.....
CrateDB 5.3.0 发布,分布式 SQL 数据库 CrateDB 是一个分布式的 SQL 数据库,使得实时存储和分析大量的机器数据变得简单。CrateDB 提供了通常与 NoSQL 数据库相关的可扩展性和灵活性,最小的 CrateDB 集群可以轻松地每秒摄取数万条记录。这些…...

[java基础]面向对象(五)
访问控制修饰符:--------------保护数据的安全(隐藏数据、暴露行为),实现封装 public:公开的,任何类 private:私有的,本类 protected:受保护的,本类、派生类、同包类 默认的&…...

React应用(基于React脚手架)
目录 前言:一、使用create-react-app创建react应用1、什么是 react 脚手架?2. 创建 cli 脚手架方式13. 创建 cli 脚手架方式24. npx:5. react脚手架项目结构6. 功能界面的组件化编码流程(通用)7. 如何更改脚手架版本 二、React 组…...

Redis(03)List--附有示例
文章目录 reids-listBLMOVEBLMPOPBLPOPBRPOPBRPOPLPUSHLINDEXLINSERTLLENLMOVELMPOPLPOPLPOSLPUSHLPUSHXLRANGELREMLSETLTRIMRPOPRPOPLPUSHRPUSHRPUSHX reids-list 本文介绍了Redis中的表命令。LSET用于设置列表中指定索引位置的元素的值;LTRIM用于按照索引范围修剪…...

openEuler-linux下部署zabbix-超级详细
一、准备工作 下载:zabbix包 地址:下载Zabbix 准备2台openEuler-linux虚拟机: linux-1:当服务器端 IP地址:192.168.100.100 修改hosts文件 [rootzbx ~]# vim /etc/hosts 192.168.100.100 zbx.xx.cn linux-2&…...

nginx 简介 第四章
一、Nginx简介 1、Nginx简介 Nginx(特点:占用内存少,并发能力强) Nginx是一个高性能的 HTTP 和反向代理服务器。 Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件 单台物理服务器可支持30 000~50 000个并发…...

c++ float32 与 float16 互转
背景: 最近用到一块推理加速卡时,推理输入的数据是 float16 类型,而我们平常用到的数据是 float 类型,也就是 float32类型,这需要输入数据时float32 转 float16,解析输出数据时 float16 转 float。 参考&…...

Redis问题
一、认识Redis 1. 什么是 Redis? Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。Redis 提供了多种数据类型来支持不同的业务场景&#…...

[API]ListList方法集合排序Lambda表达式(四)
List接口: 继承自Collection接口,List集合是可重复集合,并且有序,还提供了一套可以通过下标来操作元素的方法 常见的实现类: ArrayList:内部使用数组实现,查询性能更好(直接下标找到物理地址)、…...

【ChatGPT】无需魔法打开即用的 AI 工具集锦
作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...

Choco-slover的使用
一. 相关资料 choco-slover github源代码以及工具下载网址:https://github.com/chocoteam/choco-solverchoco-slover 官网文档:https://choco-solver.org/choco-slover安装eclipse视频:https://www.youtube.com/watch?v=qz6ATkEI_F8视频所采用的资源网址:https://drive.go…...

亚马逊、ebay、temu如何提升产品点击率?测评自养号解析
产品点击率对于店铺销售额的影响至关重要,尤其是在竞争越来越激烈的市场环境中,想要有销量和转化,提高产品listing点击率成为了非常关键的一环。 1. 产品主图 顾客浏览产品时,第一眼看到的就是主图,一张优质的主图更容…...

人工智能的前沿信息获取之使用谷歌学术搜索
谷歌学术是谷歌公司开发的一款专门针对学术搜索的在线搜索引擎[4],谷歌学术的网址为https://scholar.google.com,界面如图 6‑1所示。使用谷歌学术搜索可以检索会议或者期刊论文。只需要在检索框中输入关键字,然后点搜索按钮即可,…...

PHP快速入门06-类型转换
文章目录 前言一、关于类型转换1.1 自动类型转换1.2 显式类型转换 二、15个常用类型转化示例2.1 将字符串转换为整型2.2 将整型转换为字符串2.3 将浮点型转换为整型2.4 将整型转换为浮点型2.5 将布尔型转换为整型2.6 将整型转换为布尔型2.7 将字符串转换为浮点型2.8 将浮点型转…...

Motion Planning学习笔记一:配置空间、图、图搜索、图遍历
学习高飞博士的路径规划课程所总结的学习笔记。 目录 1、配置空间(Configuration Space, C-space) 2、图(Graphs) 3、图搜索(Graph Search Basis) 3.1、总体框架 3.2、两种基本的图遍历算法 3.3、启…...