Java SE入门及基础(47)

集合框架介绍

集合   来自官方的说明

1. 集合与集合框架

A collection — sometimes called a container — is simply an object that groups multiple elements into a single unit. Collections are used to store, retrieve, manipulate, and communicate aggregate data.
集合(有时称为容器)只是一个将多个元素分组为一个单元的对象。集合用于存储,检索,操作和传达聚合数据。
A collections framework is a unified architecture for representing and manipulating collections.
集合框架是用于表示和操作集合的统一体系结构。

2. 为什么要使用集合框架

        回想我们之前所学的数组,数组也能存储元素,也能对元素进行增删改查操作。那么数组与集合之间有什么区别呢
使用数组实现增删改查
package com . wq . collection ;
import java . util . Arrays ;
public class ArrayUtil {
        //使用数组来存储数据,因为不知道存储什么样的数据,所以使用 Object 数组
        //支持存储所有类型的数据
        private Object [] elements ;
        private int size ; // 数组中存储的元素个数
        public ArrayUtil () {
                this ( 16 );
        }
        public ArrayUtil ( int capacity ) {
                elements = new Object [ capacity ];
        }
        public int size (){
                return size ;
        }
        public void add ( Object o ){
                //数组中存储满了,数组需要扩容才能存储新的元素
                if ( size == elements . length ){
                //4 >> 1 0100 >> 1 => 010 = 2
                        int length = elements . length + elements . length >> 1 ;
                        elements = Arrays . copyOf ( elements , length );
                }
                elements [ size ++ ] = o ;
        }
        public void delete ( Object o ){
                if ( o == null ) return ;
                        int index = - 1 ; // 要删除的元素的下标
                        for ( int i = 0 ; i < size ; i ++ ){
                                if ( o . equals ( elements [ i ])){
                                        index = i ;
                                        break ;
                                }
                        }
                        // 1 2 3 4 5
                        // 1 2 4 5
                        System . arraycopy ( elements , index + 1 , elements , index , size - index - 1 );
                        size -- ;
                }
        public void update ( int index , Object o ){
                if ( index < 0 || index >= size ){
                        throw new ArrayIndexOutOfBoundsException ( " 下标越界了 " );
                }
                elements [ index ] = o ;
        }
        public Object get ( int index ){
                if ( index < 0 || index >= size ){
                        throw new ArrayIndexOutOfBoundsException ( " 下标越界了 " );
                }
                return elements [ index ];
        }
}
package com . wq . collection ;
public class ArrayUtilTest {
        public static void main ( String [] args ) {
                ArrayUtil util = new ArrayUtil ();
                util . add ( 1 );
                util . add ( 2 );
                util . add ( 3 );
                util . add ( 4 );
                util . add ( 5 );
                for ( int i = 0 ; i < util . size (); i ++ ){
                        Object o = util . get ( i );
                        System . out . println ( o );
                }
                System . out . println ( "=================" );
                util . update ( 1 , 10 );
                for ( int i = 0 ; i < util . size (); i ++ ){
                        Object o = util . get ( i );
                        System . out . println ( o );
                }
                System . out . println ( "=================" );
                util . delete ( 4 );
                for ( int i = 0 ; i < util . size (); i ++ ){
                        Object o = util . get ( i );
                        System . out . println ( o );
                }
                System . out . println ( "=================" );
        }
}
        使用数组对元素进行增删改查时,需要我们自己编码实现。而集合是Java 平台提供的,也能进行增删改查,已经有了具体的实现。我们不需要再去实现,直接使用Java 平台提供的集合即可,这无疑减少了编程的工作量。同时Java 平台提供的集合无论是在数据结构还是算法设计上都具有更优的性能。

3.集合框架接口体系

        集合接口体系中有两个顶层接口 Collection Map Collection 接口属于单列集合(可以理解为一次存储一个元素), Map 接口属于双列集合(可以理解为一次存入两个相关联的元素)。

Collection 接口

1. Collection 接口常用方法

int size (); // 获取集合的大小
boolean isEmpty (); // 判断集合是否存有元素
boolean contains ( Object o ); // 判断集合中是否包含给定的元素
Iterator < E > iterator (); // 获取集合的迭代器
Object [] toArray (); // 将集合转换为数组
< T > T [] toArray ( T [] a ); // 将集合转换为给定类型的数组并将该数组返回
boolean add ( E e ); // 向集合中添加元素
boolean remove ( Object o ); // 从集合中移除给定的元素
void clear (); // 清除集合中的元素
boolean containsAll ( Collection <?> c ); // 判断集合中是否包含给定的集合中的所有元素
boolean addAll ( Collection <? extends E > c ); // 将给定的集合的所有元素添加到集合中

2. AbstractCollection

        AbstractCollection 实现了 Collection 接口,属于单列集合的顶层抽象类。
源码解读
        AbstractCollection 类并没有定义存储元素的容器,因此,其核心的方法都是空实现。这些空实现的方法都交给其子类来实现

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode C++】滑动窗口

1. LCR 008. 长度最小的子数组 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 题目…

Django模板层——三种自定义模板simple_tag、inclusion_tag、filter的用法

目录 1. 前言 2. 前置操作 3. simple_tag 3.1 注意点 4. inclusion_tag 5. filter 6. 结尾 1. 前言 在前后端不分离的模式中&#xff0c;Django的模板语法尤为重要&#xff0c;我们可以动态传入变量&#xff0c;并在前端HTML中进行展示。在变量展示时&#xff0c;会有一…

本地运行github上下载的项目--接Git入门篇

1.了解项目 这是一个基于Spring Boot 和 Mybatis Plus 构建的Java项目&#xff0c;很经典的外卖项目&#xff0c;参考b站的黑马瑞吉外卖。 2.构建项目 SpringBoot项目&#xff0c;首先下载一些常见的项目要求的组件。然后配置如下&#xff1a; 看README&#xff0c;在阅读该…

【数据结构】初识数据结构与复杂度总结

前言 C语言这块算是总结完了&#xff0c;那从本篇开始就是步入一个新的大章——数据结构&#xff0c;这篇我们先来认识一下数据结构有关知识&#xff0c;以及复杂度的相关知识 个人主页&#xff1a;小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1.什么是数据结构 2.…

即刻体验 | 使用 Flutter 3.19 更高效地开发

我们已隆重推出全新的 Flutter 版本——Flutter 3.19。此版本引入了专为 Gemini 设计的新 Dart SDK、一个能让开发者对 Widget 动画实现精细化控制的全新 Widget&#xff0c;Impeller 更新带来的渲染性能提升、有助于实现深层链接的工具和对 Windows Arm64 的支持&#xff0c;以…

储能系统--液冷充电枪

前言 随着新能源汽车在市场中的占比不断攀升&#xff0c;续航里程和充电时间成为了制约新能源汽车发展的两个关键因素&#xff0c; 而随着续航里程的增加&#xff0c;电池容量也会相应的增加&#xff0c;充电时间也会加长&#xff0c;大功率快充技术逐渐成为解决续航瓶颈的关键…

golang语言系列:Web框架+路由 之 Echo

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是golang语言系列文章&#xff0c;本篇主要对 Echo 框架 的基本使用方法 进行学习 1.Echo是什么 Go 有众多Web框架&#xff0c;Echo 是其中的一个&#xff0c;官网介绍Echo有高性能、可扩展性、极简的特点。使用E…

C++的并发世界(五)——线程状态切换

0.线程状态 初始化&#xff1a;该线程正在被创建&#xff1b; 就绪&#xff1a;该线程在列表中就绪&#xff0c;等待CPU调度&#xff1b; 运行&#xff1a;该线程正在运行&#xff1b; 阻塞&#xff1a;该线程被阻塞挂机&#xff0c;Blocked状态包括&#xff1a;pend&#xff…

vulnhub靶机: DC-9

dc-9靶机下载 将靶机设置为NAT模式&#xff0c;本次实验使用的内网网段为192.168.198.0/24&#xff0c;kali的ip为192.168.198.172 信息搜集 ip主机扫描&#xff1a; nmap -sP 192.168.198.0/24 确定靶机ip为192.168.198.171 主机端口扫描&#xff1a; nmap -T4 -A -v 192…

RAG原理、综述与论文应用全解析

1. 背景 1.1 定义 检索增强生成 (Retrieval-Augmented Generation, RAG) 是指在利用大语言模型回答问题之前&#xff0c;先从外部知识库检索相关信息。 早在2020年就已经有人提及RAG的概念&#xff08;paper&#xff1a;Retrieval-augmented generation for knowledge-inten…

LlamaIndex——RAG概述

文章目录 一、使用LLM1. 模型2. 词嵌入3. Prompt 二、加载1. 加载2. 转换&#xff08;1&#xff09;高级API&#xff08;2&#xff09;低级API 三、索引/EmbeddingTop K Retrieval 四、存储五、查询六、评估1. 生成结果质量评估2. 检索结果评估 RAG&#xff08;检索增强生成&am…

复现k8s黄金票据学习

1.什么是黄金票据 在 Kubernetes 中&#xff0c;"黄金票据"并不是一个常见的术语。可能你想了解的是服务账户&#xff08;Service Account&#xff09;。服务账户是 Kubernetes 中用于身份验证和授权的一种机制。它们允许 Pods 或其他工作负载在 Kubernetes 集群中与…

Oracle 数据库中的全文搜索

Oracle 数据库中的全文搜索 0. 引言1. 整体流程2. 创建索引2-1. 创建一个简单的表2-2. 创建文本索引2-3. 查看创建的基础表 3. 运行查询3-1. 运行文本查询3-2. CONTAINS 运算符3-3. 混合查询3-4. OR 查询3-5. 通配符3-6. 短语搜索3-7. 模糊搜索&#xff08;Fuzzy searches&…

深入Tauri开发——从环境搭建到项目构建

深入Tauri开发——从环境搭建到项目构建 开启你的Tauri桌面应用开发之旅&#xff08;续&#xff09; 经过上一篇文章的基础介绍&#xff0c;现在让我们更进一步&#xff0c;详细阐述如何在Windows和macOS平台上顺利搭建Tauri应用所需的开发环境&#xff0c;并指导您从创建项目…

哲♂学家带你深♂入了解动态顺序表

前言&#xff1a; 最近本哲♂学家学习了顺序表&#xff0c;下面我给大家分享一下关于顺序表的知识。 一、什么是顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组 上完成数据的增删查改。 顺序表&#xff…

Rust线程间通信通讯channel的理解和使用

Channel允许在Rust中创建一个消息传递渠道&#xff0c;它返回一个元组结构体&#xff0c;其中包含发送和接收端。发送端用于向通道发送数据&#xff0c;而接收端则用于从通道接收数据。不能使用可变变量的方式&#xff0c;线程外面修改了可变变量的值&#xff0c;线程里面是拿不…

水果销售(源码+文档)

水果销售管理系统&#xff08;小程序、ios、安卓都可部署&#xff09; 文件包含内容程序简要说明含有功能项目截图客户端添加地址首页商品详细意见反馈待发货商品分类我的代付款我的地址搜索防骗指南资料修改登录注册 后端管理分类管理反馈管理订单管理商品管理用户管理 文件包…

OpenHarmony实战:轻量级系统之配置其他子系统

除上述子系统之外&#xff0c;还有一些必要但是无需进行移植的子系统。如&#xff1a;分布式任务调度子系统、DFX子系统。 这些子系统添加方式比较简单&#xff0c;在“vendor/MyVendorCompany/MyProduct/config.json”文件中进行如下配置即可&#xff1a; {"subsystem&…

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2019-0193)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。此次漏洞出现在Apache Solr的DataImportHandler&#xff0c;该模块是一个可选但常用的模块&#xff0c;用于从数据库和其他源中提取数据。它具有一个功能&#…

[RK3128_LINUX5.1] 关于 RetroArch 使用

问题描述 查看文档 docs\cn\Linux\ApplicationNote\Rockchip_Use_Guide_Linux_RetroArch_CN.pdf&#xff0c;描述为实验 make menuconfig 后勾选选项 Libretro cores and retroarch -> retroarch 但是SDK中并没有这个选项 解决方案&#xff1a; 目前发布的buildroot SDK…