业界动态
JAVA笔记(十八):集合、Collection、List、ArrayList、Vector、LinkedList
2024-11-19 18:36

(1)长度开始时必须指定,而且一旦指定,不能更改

JAVA笔记(十八):集合、Collection、List、ArrayList、Vector、l<em></em>inkedList

(2)保存的必须为同一类型的元素

(3)使用数组进行增加/删除元素的代码比较麻烦。

(1)可以动态保存任意多个对象,使用比较方便

(2)提供了一系列方便的操作对象的方法:add,remove,set,get等

(3)使用集合添加,删除新元素代码简洁

Java的集合类很多,主要分为两大类

(1)集合主要是两组(单列集合 , 双列集合)

(2)Collection 接口有两个重要的子接口 List Set , 他们的实现子类都是单列集合

(3)Map 接口的实现子类 是双列集合,存放的 K-V(key-value键值对

(4)两张图,背

在这里插入图片描述

在这里插入图片描述

 

(1)Collection实现子类可以存放多个元素,每个元素可以是Object

(2)有些Collection的实现类,可以存放重复的元素,有些不可以

(3)有些Collection的实现类,有些是有序的(List,有些不是有序(Set

  • 有序:存放顺序和add顺序一样

(4)Collection接口没有直接的实现子类,是通过它的子接口Set 和 List来实现的。

  1. //添加单个元素
 
  1. 删除指定元素
 
  1. 查找元素是否存在
 
  1. 获取元素个数
 
  1. 判断是否为空
 
  1. 清空
 
  1. 添加多个元素(添加一个集合类
 
  1. 查找多个元素是否存在
 
  1. 删除多个元素
 

1)使用Iterator(迭代器

① Iterator对象称为迭代器,主要用于遍历Collection集合中的元素

② 所有实现了Collection接口的集合类都有一个iterator)方法,用于返回一个实现了Iterator接口的对象,即可以返回一个迭代器

③ Iterator 的结构在这里插入图片描述 在这里插入图片描述

④ Iterator仅用于遍历集合, Iterator本身不存放对象。

 

2)使用增强for循环

增强for循环,可以代替iterator迭代器。

特点:增强for就是简化版的iterator,本质一样。只能用于遍历集合或数组。

 
 

在这里插入图片描述

 
 

① List集合类中元素有序(即添加顺序和取出顺序一致)、且可重复

 

② List集合中的每个元素都有其对应的顺序索引(即对于List容器中的每个元素,都有一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素)即支持索引

 

③ List接口的实现类不止有ArrayList、linkedList、Vector,还有很多

  1. 插入元素
 
  1. 插入多个元素
 
  1. 获取指定index位置的元素
 
  1. 返回obj在集合中首次出现的位置

  2. 返回obj在集合中最后出现的位置

 
  1. 移除指定index位置的元素,并返回此元素
 
  1. 替换元素
 
  1. 取子集合
 

在这里插入图片描述

 

练习 在这里插入图片描述

 

(1,ArrayList可以加入null,并且可以有多个

 

(2)ArrayList 是由数组来实现数据存储的

(3)ArrayList 基本等同于Vector,除了ArrayList是线程不安全的(但执行效率高,在多线程情况下,不建议使用ArrayList。

① ArrayList中维护了一个object类型的数组elementData,用于存放对象

 

② 当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第一次田间,则扩容elementData为10,如果需要再次扩容,则扩容elementData为1.5倍;(0->10->15->22…) 在这里插入图片描述

③ 如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍。

 

1)【无参构造器】源码分析

 

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述


2)【有参构造器】流程图

 

在这里插入图片描述 后面的源码和无参的add()方法一样,只是因为第一次需要进行扩容时,就成功扩容(1.5倍扩容后就满足了需要的大小

所以是直接在原来的基础上扩容1.5倍,而不是先初始化为10(初始化为10,是因为最开始0按照1.5倍扩容也还是0在这里插入图片描述 在这里插入图片描述

① 定义说明在这里插入图片描述

② Vector底层是一个对象数组,protected Object[] elementData

③ Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized

④ 开发中,需要线程同步安全时,考虑使用Vector。

在这里插入图片描述

(3)Vector的底层扩容结构

 

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  1. linkedList底层实现了双向链表和双端队列的特点

  2. 可以添加任意元素(元素可以重复,包括null

  3. 线程不安全,没有实现同步

  1. linkedList底层维护了一个双向链表

  2. linkedList中维护了两个属性 和 分别指向首节点尾节点

  3. 每个节点(Node对象,里面又维护了、、三个属性,其中通过prev指向前一个,通过next指向后一个节点。最终实现双向链表 在这里插入图片描述

  4. 所以linkedList的元素的添加和删除,不是通过数组完成的,相对来说效率比较高

  5. 模拟一个简单的双向链表。

 
 

1)添加结点分析

在这里插入图片描述 在这里插入图片描述


2)删除结点分析

在这里插入图片描述

在这里插入图片描述 如何选择 ArrayList和ListedList

① 如果我们改查的操作多,选择ArrayList

② 如果我们增删的操作多,选择ListedList

③ 一般来说,在程序中,80-90%都是查询,大部分情况下会选择ArrayList

    以上就是本篇文章【JAVA笔记(十八):集合、Collection、List、ArrayList、Vector、LinkedList】的全部内容了,欢迎阅览 ! 文章地址:http://sicmodule.glev.cn/news/10211.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 歌乐夫资讯移动站 http://sicmodule.glev.cn/mobile/ , 查看更多   
最新新闻
没有对手的李子柒,迟早会“上链接”?
原创 李觐麟 锌刻度每日一篇科技财经深度调查撰文/ 李觐麟编辑/ 李 季排版/ Annalee“白月光”的杀伤力,在李子柒这里得到了最充
李子柒回归后的真相:三年沉淀,热爱与韧性的完美结合
李子柒,一个曾经红遍网络的名字,因与公司纠纷而停更了整整三年。然而,时隔已久,她的强势归来却丝毫没有被遗忘的迹象,反而激
2025年行业前景分析与发展趋势分析
2025年是乙巳蛇年,许多行业将迎来新的发展机遇和挑战。下面将详细分析2025年的行业前景与发展趋势,介绍不同行业的潜在机会与风
警方通报北电赵韦弦事件:其涉嫌违法犯罪 已被刑拘
警方通报北电赵韦弦事件:其涉嫌违法犯罪 已被刑拘:21日晚,海淀警方通报:针对网传某高校学生赵某某(男,20岁)违法情况,经警
2025年运势简析!
天时地利人和,每年都承载着不同的天时和运势。2025乙巳蛇年,不仅是一个时间标记,更承载着深厚的文化内涵。在中国传统文化中,
创维集成灶400全国统一联保电话《2025汇总》
创维集成灶维修服务24小时热线《2025汇总》(2025已更新)创维集成灶维修服务维修电话:(1)400-9963-901(2)400-9963-901创维集成
离开1217天后,李子柒“熹妃归来”被平台疯抢
停更1217天,李子柒终于回来了。归来仍是顶流11月12日下午4时30分,李子柒在微博、抖音、快手、B站等平台发布了一条以中国非物质
计划2025年12月通车!沁伊高速建设如火如荼
原创 伊川县融媒体中心 伊川新闻伊川县广播电视台 伊川县融媒体中心新闻发布官方平台总监制 郭明杰 监 制 胡幸凡编 审 赵伊曼 制
2025年不一般,2个立春2个六月4人躲春,有啥预兆?要躲几次春?
2025年不一般2025年乃是乙巳蛇年,也就是属蛇的本命年,古书籍当中有提到,十二地支,对应着十二生肖,而十天干,则对应着季节。
热搜第一!李子柒身份证已改名
11月12日,李子柒发布视频官宣回归。李子柒更新道:这个大漆视频迟到了四年,“漆”同“柒”,我给这幅雕漆隐花的漆器作品取名“