15集合的应用

集合的概念

集合是一个容器,可以容纳其他类型的数据,前面所讲的数组就是一个集合。
所有的集合相关的类和接口都在java.util包下

特点

  • 集合不能直接存储基本数据类型(但是代码上不需要体现,因为Java中有自动装箱)
  • 另外集合不能直接存储Java对象,而是存储其内存地址也叫做引用
  • 不同集合,底层对应不同的数据结构
  • 数据结构就是数据存储的结构,常见的结构有:数组、二叉树、连败哦、哈希表等。

分类

Java中的集合分为两类
一类是以当个方式存储元素:java.util.Collection
集合的继承结构图
另一类是以键值对的方式存储元素:java.util.Map
Map集合的继承结构图
图中已经展现出各个集合的特点。

总结常用集合

集合存储结构
ArrayList数组
LinkedList双向链表
HashSet底层是HashMap,其存储的元素等于HashMap的key
TreeSet底层是TreeMap,其存储的元素等于TreeMap的key
HashMap哈希表
Properties线程安全,key和value只能存储String类型,常用做配置类
TreeMap二叉树,key可以自动按大小排序

Collection

Collection集合没有泛型时,可以存储Object的所有子类
但是存在泛型之后,只能存储泛型的类型

注意:不能存放基本数据类型和对象本身,只能存储封装类或对象的内存地址。

常用的方法

常用方法说明
boolean add(E e)向集合中添加一个元素,添加成功返回true
boolean remove(Object o)删除某个元素,底层会调用equals方法进行对比,成功返回true
int size()返回集合中元素的个数
boolean contains(Object o)判断集合中是否包含改元素,底层调用equeals(),包含返回ture
boolean isEmpty()判断集合是否为空,为空返回true
void clear()清空改集合
Object[] toArray()将集合转换为数组

演示:

public class Test{
	public static void main(String[] args){
	//多态,夫类型引用指向子类型对象
	Collection c = new ArrayList();
	
	//向集合中添加一个元素1
	/*注意Java在中存在自动装箱机制,实际上是:
	Integer i = new Integer(1);
	*/
	c.add(1);
	
	//获取当前集合的元素个数,当前为1
	int size = c.size();
	//判断当前集合中是否包含1,结果是ture
	boolean isContains = c.contains(1);
	//清空集合
	c.clear();
	//判断集合是否为空,结果为ture
	boolean isEmpty = c.isEmpty();
	}
}

Iterator 迭代器

只有Collection集合才能被迭代器迭代,Map集合不可以使用

常用方法说明
boolean hasNext()判断当前指向的元素后是否还存在元素
E next()返回当前指向的元素,并且指向下一个元素
remove()删除迭代器当前指向的元素

使用方法:

main(){
	//首先需要准备一个Conllection的集合
	Collection collections = new ArrayList();
	collections.add("元素1");
	...
	collections.add("元素n");
	
	//获取迭代器对象,改方法继承自Iterator接口
	Iterator<String> it = collections.iterator();
	
	//判断当前元素后是否还有元素
	while (iterator.hasNext()) {
		//使用一个变量接收该元素后,并指向下一个元素
	    String element = iterator.next();
	    //打印前面接收的元素
	    System.out.println(element);
	}
}

注意:在迭代的过程中,要删除集合中元素时,请使用迭代器的remove方法。
直接使用Collection中的方法,需要重新获取一个新的迭代器。

List子类

List作为Collection的子类,存在一些特有的方法
这些方法根据该集合的特点而来

方法说明
void add(int index, E element)向指定下标处添加元素
E get(int index)获取指定下标的元素
E set(int index, E elemtnt)修改指定下标的元素
int indexOf(Object o)返回列表中第一次出现指定元素的索引,如果没有返回-1
int lastIndexOf(Object o)返回列表中最后出现的指定元素的索引,如果没有返回-1
E remove(int index)删除指定索引的元素

ArrayList

特点:

  • ArrayList不是线程安全的
  • 默认的初始化容量是10
  • 底层先创建一个长度为0的数组,添加第一个元素时长度变为10
  • 集合的底层时一个Object数组

构造方法:

new ArrayList();//默认初始化方式
new ArrayList(20);//指定初始大小
new ArrayList(一个集合);
//比如将HashSet转化为ArrayList

数组的扩容:

  • 增长到原容量的1.5倍

面试题:ArrayList的优缺点

  • ArrayList使用最多,与数组的特点相同
  • 数组检索效率高//以后经常检索
    (由于每个元素占用的空间大小相同,内存地址连续,知道首元素的地址,可根据偏移量计算出目标元素的内存地址)

缺点:

  • 数组无法存储大数据量
  • 随机增删元素效率低
  • 末尾增删不受影响

LinkedList

特点:

  • 底层存储在双向链表中
  • 由三部分组成:上一个节点的内存地址、数据、下一个节点的内存地址
  • 没有初始化容量,firstlast都是null

Vector(使用很少,了解即可)

  • 底层是数组
  • 初始化容量是 10
  • 扩容之后是原容量的二倍 10-20-40-80
  • Vector 都是线程同步/线程安全的,都带有synchronized关键字,使用较少

Set集合中的元素都等同于Map集合的Key

Map

与Collection没有关系
其存储方式以key-value的形式存储(key和value都是引用数据类型)
不能直接存储对象,只能存储对象的内存地址

Map接口中常用的方法

方法说明
V put(K key, V value)向集合中添加键值对
V get(Object key)通过key获取value
V remove(Object key)通过key删除value
Collection< V> values()获取所有的value
Set< K> keySet()返回Map集合中所有的key

Map集合遍历的方式

方式一:先获取所有的key,再通过key来获取value

Iterator<Integer> it = keys.interator();
while(it.hasNext()){
	//取出一个key
	Integer key = it.next();
	//通过key获取value
	String value = map.get(key);
	System.out.println(key+"+"+value);
}

方式二:将Map集合转化为Set集合
效率较高!!适合大数据量

Set<Map.Entry<Integer,String>> set = map.entrySet();
Iterator<Map.Entry<Integer,String>> it2 = map.entrySet();
while(it.hasNext()){
	Map.Entry<Integer,String> node = it2.next();
	Integer key = node.getKey();
	String value = node.getValue();
	System.out.println(key+"="+value);
}

HashMap

特点:

  • 集合的默认初始化容量是16,默认加载因子是0.75
  • 初始化容量必须是2的倍数
  • 扩容是原来的二倍
  • 默认加载因子是HashMap集合容量达到75%时数组开始扩容
  • 非线程安全

HashMap的源代码中有以下属性:

final int hash; //实际上是key的hashCode()
final K key
V value
Node < K,V> next;

HashMap 集合允许key值为 null
但是HashMap集合的key null 值只能有一个

了解内容:
如果hashcode();固定为某个值,会使hashMap变成单项列表
这种情况叫:散列分布不均匀
如果hashcode()全部不一样的,会使hashMap变成一维数组
也是散列分布不均匀
哈希表

散列分布均匀需要重写hascode();有一定的技巧

【最终结论】
放在HashMap key部分的元素和HashSet的元素
需要同时重写equals();和hashcode();

Properties

特点:

  • 继承Hashtable
  • 初始化容量是11,默认加载因子是0.75
  • 扩容是原容量乘以2再加一
  • 线程安全
  • key和value都是字符串,且不能为空
常用方法说明
String getProperty(String key)根据键值,获取属性
Object setProperty(String key, String value)调用 Hashtable 的方法 put

TreeMap

特点:

  • 底层是二叉树
  • 无序不可重复,存入的值会自动按照大小排序(String按字典升序,Integer按大小升序)
  • 对自定义的类进行排序时,需要声明比较规则。如果没有实现 java.lang.Comparable比较接口 JVM会报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/621328.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-栈的讲解

栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底&#xff08;因为先进后出&#xff09;。栈中的数据元素遵守后进先出LIFO&#xff08;Last In Firs…

Python GraphQL服务器实现库之tartiflette使用详解

概要 Tartiflette是一个为Python编写的GraphQL服务器实现,它建立在现代异步编程库如asyncio之上,提供了高性能的GraphQL执行环境。Tartiflette专注于提供最佳的开发者体验,支持最新的GraphQL特性。 安装 安装Tartiflette相对简单,但需要依赖于一些系统级的库。 首先,需…

【话题】软件开发的航海图:程序员的实用神器探秘

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景一、代码编写二、版本控制三、测试与调试四、部署与运维五、总结文章推荐 背景 在软件开发的广阔海洋中&#xff0c;每一位程序员都是一位勇敢的航海家&#xff0c…

基于STM32F401RET6智能锁项目(AT24C0X存储芯片)

一、IIC基本介绍 1、IIC通信接口 • I2C&#xff08;Inter IC Bus&#xff09;是由Philips公司开发的一种通用数据总线 • 两根通信线&#xff1a;SCL&#xff08;串行时钟线&#xff09;、SDA&#xff08;串行数据线&#xff09; • 同步&#xff0c;半双工 • 带数据应答 •…

Java后端的接口参数两个interger 类型情况解决

get请求 &#xff0c;对应请求头 RequestParm, post请求&#xff0c; 对应请求体 &#xff0c;RequestBody 两个Integer参数情况 GetMapping("/insertStaffClass")public R<Void> insertStaffClass(RequestParam Integer staffId,RequestParam List<Integ…

C++ | Leetcode C++题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; class Solution { public:void sortColors(vector<int>& nums) {int n nums.size();int p0 0, p2 n - 1;for (int i 0; i < p2; i) {while (i < p2 && nums[i] 2) {swap(nums[i], nums[p2]);--p2;}if (nums[i…

python跟C++选哪个?

选择使用Python还是C取决于你的具体需求和项目背景。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 在通信工程行业…

centos7安装zabbix-server

zabbixan-server安装 环境安装zabbix安装zabbix配置apachezabbix-UI前端配置修改zabbix为中文语言 环境 准备&#xff1a; centos7系统、mysql数据库/MariaDB数据库 mysql数据库可参照&#xff1a;https://blog.csdn.net/weixin_61367575/article/details/138774428?spm1001.…

Java(三)---逻辑控制

文章目录 前言1.逻辑控制语句的分类1.顺序结构2.分支结构2.1.if结构2.1.1.if...else语句2.2.2.if ... else if... else语句 2.2.switch语句 3.循环结构3.1.while3.2.break3.3.continue3.4.for循环3.5.do while循环 4.输入输出4.1.输入到控制台4.2.从键盘输入 前言 前两篇文章&…

EfficientNet网络结构详细解读+SE注意力机制+pytorch框架复现

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ 网络详细结构1.1 &#x1f393; MBConv结构1.2 ✨SE注意力机制模块1.3 ⭐️Depthwise Separable Convolution深度可分离卷积1.3.1 普通卷积操作(Convolution)1.3.2 逐深度卷积&#xff08;Depthwise Convoluti…

安全测试|常见SQL注入攻击方式、影响及预防

SQL注入 什么是SQL注入&#xff1f; SQL注入是比较常见的网络攻击方式之一&#xff0c;主要攻击对象是数据库&#xff0c;针对程序员编写时的疏忽&#xff0c;通过SQL语句&#xff0c;实现无账号登录&#xff0c;篡改数据库。 SQL注入简单来说就是通过在表单中填写包含SQL关键…

论文笔记:仅一个进程故障就无法达成共识

仅一个进程故障就无法达成共识 仅一个进程故障指的是在异步的分布式系统中 摘要 异步系统的共识问题&#xff08;consensus&#xff09;涉及一组进程&#xff0c;其中有的进程可能不可靠&#xff08;unreliable&#xff09;。共识问题要求可靠的进程一致地从两个侯选中决定&…

制造业如何挖掘数据价值,附数据分析处理软件推荐

制造业如何挖掘和利用数据价值&#xff1f; 在信息化、智能化高速发展的今天&#xff0c;制造业正迎来一场由数据驱动的深刻变革。数据&#xff0c;作为这场变革的核心驱动力&#xff0c;正被制造业企业深度挖掘和利用&#xff0c;以实现更高效、更智能的生产模式。 制造业在利…

【IP证书】公网IP地址SSL证书怎么获取和安装

一、获取SSL证书 1、选择支持IP证书的CA&#xff1a; 选择一个支持为IP地址颁发SSL证书的证书颁发机构&#xff0c;如JoySSL。 2、准备验证信息&#xff1a; 确保您的公网IP地址是可访问的&#xff0c;并准备好相关的组织信息或IP地址所有权证明&#xff0c;具体取决于CA的…

Goby 漏洞发布|瑞友天翼应用虚拟化系统 /hmrao.php SQL注入漏洞

漏洞名称&#xff1a;瑞友天翼应用虚拟化系统 /hmrao.php SQL注入漏洞 English Name&#xff1a; Ruiyou-Tianyi-App-Virtualization-Delivery-Platform /hmrao.php SQL Injection Vulnerability CVSS core: 9.8 影响资产数&#xff1a;75202 漏洞描述&#xff1a; 瑞友天…

揭秘 HTTP 代理:增强在线活动的安全性和匿名性

HTTP 代理在保护您的在线隐私、增强安全性以及允许访问受限内容方面发挥着关键作用。了解 HTTP 代理的工作原理以及如何有效地利用它们可以让您掌控自己的在线状态和浏览体验。让我们深入研究 HTTP 代理的世界&#xff0c;探索它们的优势、应用程序以及最大化其效用的最佳实践。…

基于SSM SpringBoot vue学校办公自动化系统

基于SSM SpringBoot vue学校办公自动化系统 系统功能 登录注册 个人中心 用户信息管理 部门信息管理 公共通知管理 个人邮箱管理 日常安排管理 管理员管理 签到记录管理 会议管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或Spr…

1Panel应用推荐:Uptime Kuma

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

【电路笔记】-无源带通滤波器

无源带通滤波器 文章目录 无源带通滤波器1、概述2、二阶带通滤波器的频率响应3、带通滤波器示例4、总结无源带通滤波器可以通过将低通滤波器与高通滤波器连接在一起制成。 1、概述 无源带通滤波器可用于隔离或滤除特定频带或频率范围内的某些频率。 简单 RC 无源滤波器中的截止…

ollama api只能局域网访问,该怎么破?

安装ollama: ollama离线安装,在CPU运行它所支持的那些量化的模型-CSDN博客文章浏览阅读178次,点赞2次,收藏6次。ollama离线安装,在CPU运行它所支持的哪些量化的模型 总共需要修改两个点,第一:Ollama下载地址;第二:Ollama安装包存放目录。第二处修改,修改ollama安装目…