用面向对象思想实现ArrayList代码

java面向对象第七章-实践2-ArrayList 集合完成数据操作 实践2-ArrayList 集合完成数据操作 目标:实现控制台版用户信息系统,系统包括添加用户信息(编号、姓名、性别)以及按照编号删除指定的用户。查询用户信息,查询用户信息分为按照编号查询、按照姓名查询以及按照性别查询。系统运行效果如图所示。 **实现思路 (1)创建类 UserInfo,在该类中定义 3 个 String 类型的变量编号(no)、姓名(name)、性别(sex),并创建这 3 个属性对应的 getter 和 setter 方法。 public class UserInfo { pri 阅读详情

定义了List接口,定义我们想要实现的ArrayList类想要的功能方法

public interface List {
	public void add(Object obj);
	
	public int size();
	
	public void add(int i,Object obj);
	
	public void remove(Object obj);
	
	public void remove(int index);
	
	public String toString();
	
	public void clear();
	
	public void addFirst(Object obj);
	
	public void addLast(Object obj);
}

定义MyArrayList类实现List接口,重写接口抽象方法 具体算法实现细节参照代码注释

package com.dataList;
import java.util.Arrays;
public class MyArrayList implements List {
	private int size = 0; //定义动态集合容量大小
	private Object[] elementData; //集合内部实现是一个object对象数组
	public MyArrayList(){ //空参数构造器 默认创建一个大小为4的object对象数组
		this(4); //默认数组大小对外是隐藏 不能访问的
	}
	public MyArrayList(int count){ //有参数构造器
		elementData = new Object[count];
	}
	//通过索引获取元素对象
	public Object getEle(int index){
		if(index < 0 || index >=size){
			throw new RuntimeException("数组越界异常");
		}
		return elementData[index];
		
	}
    //返回集合容量大小
	public int size() {
		return size;
	}
	//向集合尾部添加元素 每次成功添加一个元素够 size增加一
	public void add(Object obj) {
		this.add(size, obj);
//		if(size==elementData.length){
//			elementData = Arrays.copyOf(elementData, elementData.length*2);
//		}
//		elementData[size] =obj;
//		size++; 
	}
	
	public void add(int i, Object obj) {
		if(i<0 || i>size){
			throw new RuntimeException("数组越界异常");
		}
		//当集合存储元素个数等于内部数组大小时 将内部数组大小容量扩大为原来的两倍
		if(size == elementData.length){ 
			elementData = Arrays.copyOf(elementData, elementData.length*2);
		}
		//索引i后的元素往后移动一位 空出索引i处的存储位置
		for(int j=size;j>i;j--){ 
			elementData[j] = elementData[j-1  ];
		}
		elementData[i] =obj;
		//存储存储元素成功 size增加一位
		size++;
		
	} 
	public void remove(int index){
		if(index < 0 || index > size){
			throw new RuntimeException("数组越界异常");
		}
		for(int i =index;i<size-1;i++){
			elementData[i]=elementData[i+1];
		}
		size--;
	}
	//删除元素匹配集合中的元素
	public void remove(Object obj) {
		for(int i = 0;i<size;i++){
			if(elementData[i].equals(obj)){
				for(int j=i;j<size-1;j++){
					elementData[j] = elementData[j+1];
				}
				size--;
			}
		}
	}
	//转为字符串
	public String toString(){
		if(size==0){
			return "[]";
		}
		StringBuilder builder = new StringBuilder("[");
		for(int i =0;i<size;i++){
			if(i!=size-1){
			builder.append(elementData[i]+",");
			}else{
				builder.append(elementData[i]);
			}
		}
		builder.append("]");
		return builder.toString();
	}
	//清除集合所有元素
	public void clear(){
		for(int i =0;i<size;i++){
			elementData[i] =null;
		}
		size =0;
	}
	//将元素添加到集合的头部
	public void addFirst(Object obj) {
		add(0, obj);
	}
	//该添加方法略有多余
	public void addLast(Object obj) {
		add(size, obj);
	}
}
Day24:面向对象项目之超市会员管理系统(使用ArrayList) 代码实现如下:运行结果请自行查看 package com.biu.demo01; public class MarketVipMgr { //姓名 会员卡号 密码 会员积分 开卡日期 private String name; private int cardId; private String pwd; private int score; private Strin... 阅读详情

相关推荐

程序设计二(面向对象)_实训10_复杂类的实现_ArrayList类的实现

第1关:构造函数与析构函数的实现 /********** BEGIN **********/ #include <iostream> #include "ArrayList.h" using namespace std; ArrayList::ArrayList() { size = 0; } ArrayList::ArrayList(const ArrayList &rhs) { data = rhs.data; size = rhs.size; } ArrayList::Arra

Junds0的博客 3602

java基础 ArrayList案例

学习视频: Java入门基础视频教程,Java零基础自学首选黑马程序员Java入门教程(含Java项目和Java真题)_哔哩哔哩_bilibili为了帮助广大对Java有兴趣和立志进入本行业的零基础学员,本套课程由此而生,舍弃了冗长的理论,结合软件公司一个个真实的应用需求,来加强大家对知识的理解和掌握。本课程知识全面透彻,案例极为丰富,阶段课程完结后都配备了综合实战案例,具备大量优雅、高质量的代码供初学者训练,手把手边学边干,清楚,实用!是Java零基础学员极好的入门视频。课程从Java语言的简介到程序开

cbdA_ZAI的博客 445

开关电源的纹波和噪声电压-抑制方法

开关电源(包括AC/DC转换器、DC/DC转换器、AC/DC模块和DC/DC模块)与线性电源相比较,最突出的优点是转换效率高,一般可达80%~85%,高的可达90%~97%;其次,开关电源采用高频变压器替代了笨重的工频变压器,不仅重量减轻,体积也减小了,因此应用范围越来越广。 但开关电源的缺点是由于其开关管工作于高频开关状态,输出的纹波和噪声电压较大,一般为输出电压的1%左右(低的为输出电压的0.5%左右),最好产品的纹波和噪声电压也有几十mV;而线性电源的调整管工作于线性状态,无纹波电压,输出的噪声电压也

ltqdxl的博客 1万+

基于面向对象,模拟ArrayList的实现

基于面向对象,模拟ArrayList的实现 tip: 数组可以保存多个元素。初始化给10个空间,每次不够用后空间添加前面的一半 得到动态数组中保存的元素个数size()。得到实际保存的数据个数 添加数据 根据下标插入数据 根据下标删除元素,返回被删除的元素 根据下标修改元素,返回修改前的元素值 根据下标得到元素值 ...

weixin_44219955的博客 544

EMC测试案例分析——晶振对辐射发射的影响

本文分析了某产品350MHz辐射发射超标问题,发现源头是50MHz晶振的7次谐波通过连接器泄漏。主要原因是:1)防水非导电垫圈形成屏蔽缝隙;2)晶振下方地平面不完整且信号线穿过;3)晶振离接口过近。改进措施包括:完善晶振下方地平面、增大晶振与接口距离、使用导电密封圈等。最终辐射降低10dB以上达标。文章总结了晶振EMC设计要点:保持地平面完整、远离接口、外壳接地、合理布局滤波电路等,并强调防水与屏蔽的协调统一。

u012526819的博客 670

银河麒麟鲲鹏aarch64架构安装docker和K8s

鲲鹏云服务器上安装docker-云社区-华为云 (huaweicloud.com) 这里我下载的版本是docker-18.09.3.tag docker 安装包地址:https://download.docker.com/linux/static/stable 配置system服务 在github对应分支的contrib/init/systemd/ 下面,提供了对应的docker.service以及docker.socket文件,可以直接拷贝到本地文件使用: 对应链接:https://github.c

qq_50007696的博客 9058

面向对象程序设计的讨论

面向对象程序设计的讨论

qq_73188794的博客 239

数据库1:数据库创建与管理(头歌云课)

在 Windows 系统中,可以直接通过 SQLServer 的应用程序连接数据库,不过很多时候在生产环境下,我们需要通过命令行来连接数据库。两个数据库,数据库名分别为 TestDb 和 MyDb 的数据库,注意先后顺序。为了完成本关任务,你需要掌握:1.如何在 Linux 系统中连接 SQLServer 数据库,2.如何创建数据库。连接的数据库是本地数据库,用户名是 sa ,密码是 '

weixin_60530224的博客 2315

java面向对象雇员_Java 雇员管理小练习(理解面向对象编程)

在学习集合框架的时候,初学者很容易练习到学生管理系统、雇员管理体统等练习题。在学习集合框架之前,基本上Java基本语法都学完了,集合框架也从侧面的检验对前面学习的理解。下面用一个曾经做过的练习题,回顾集合框架,以及简要介绍面向对象编程思想。我发现旧的知识,当你再回头去看的时候,理解会更透彻。最近巩固基础ing。工具:记事本,方便编译和演示环境:将代码放在一个类当中了(这个习惯很不好)目的:回顾知识...

weixin_39535217的博客 150

stm32f407等芯片(HAL库)时钟频率修改(乱码)

其他片子及库文件未知、未验证,只是在使用stm32f407ZG配置串口打印的时候,出现乱码,就从以下几方面定位问题: 1. 确认串口GPIO相关配置; 2. 确认波特率等参数; 3. 确认时钟频率; 结果这次使用YH的串口打印程序在ZDYZ的开发板调试项目工程(有点另类...),做功能验证,就出现了以上问题,出于好奇开始调试,最终发现是时钟频率问题。 看到下图这个配置,因为ZDYZ开发板使用的是8MHz外部晶振(好像默认的是25MHz,如图2),所以他这里PLL_M是25,不是推荐值,感...

bulefire2009的博客 5517

WorkBuddy入门到 多Agent团队协作完全指南(附实操代码与配图)

WorkBuddy的Agent Teams功能支持多智能体协作,通过创建AI团队提升复杂任务处理效率。该功能支持自然语言创建团队、任务分配与依赖管理、成员间消息通信(包括直接消息和广播),并提供任务审批机制。典型应用场景包括软件开发、内容创作等协作任务。环境要求WorkBuddy 2026年3月及以上版本,支持Windows和macOS系统。用户可快速创建包含不同角色的AI团队,通过共享任务列表和信箱系统实现协作。高级功能包括委派模式、任务依赖管理和成员自主认领等,适合各类协作场景。

三棱球的专栏 6494

List ArrayList Map HashMap

List usercardDtos = Lists.newArrayList(); List usercardDtos1 = new ArrayList(); Map param = Maps.newHashMap(); Map paraMap = new HashMap(); 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数...

syswin_的博客 177

PCB测试点

PCB测试点

qq_31444421的博客 1万+

《LeetCode系列》---杨辉三角

LeetCode力扣上-----杨辉三角问题。

weixin_50584850的博客 1993

【项目实战】自动化测试软件VectorCAST介绍

VectorCAST是一款先进的自动化测试软件。VectorCAST是一款功能强大、易于使用的自动化测试软件。VectorCAST适用于各种嵌入式系统的测试。VectorCAST为嵌入式系统的测试提供了一种高效、可靠的解决方案。VectorCAST提供了一整套完整的测试工具,包括测试管理、代码覆盖、缺陷定位、报告生成等,以帮助开发人员提高测试效率,确保软件质量。VectorCAST支持。

奶爸的编程之路,也就一周冷个三天 2013

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《LeetCode系列》---删除两个字符串中相同的字符

通过数据结构中的顺序表来解决字符串删减提取问题!

weixin_50584850的博客 1971

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

为什么是List list = new ArrayList(),而不直接用ArrayList

韩猿外的博客 260

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java:加减法运算系统

# Java大作业:加减法运算 ## 1.**任务要求** (1)用户登录:输入用户名和密码登录成功后,用户才能使用答题系统。首次用初始密码登录,登录后可修改密码,修改密码时需再次确认新密码。 (2)用户注册:用户可注册一个新的登录账号,注册时需再次确认密码。 (3)随机生成题目:每次随机生成10道1~50范围内([1,50])整数的加减法算术题(要求运算结果只能是0或正整数),并显示出来供用户答题。(说明:1~50范围内整数指参与运算的数,不是运算结果;加、减运算也要求随机生成) (4)答题:每

BoBoo文睡不醒 1225

杜克大学 Java 编程与软件工程基础笔记(五)

在本节课中,我们一起了解了本课程的整体介绍、教学目标以及各位讲师对课程核心内容的概述。我们明确了课程将围绕Java编程、数组、映射等数据结构展开,并结合数据分析与密码学等实际应用。课程将通过一系列精心设计的问题和项目,帮助你掌握使用Java库、理解API以及面向对象编程的基础,为后续深入学习打下坚实基础。本节课中我们一起学习了密码学的基本概念及其历史发展。我们了解到,从古埃及的简单记录隐藏到现代互联网中复杂的AES和RSA算法,密码学的核心目标始终是保护信息的安全传输。

龙哥盟 50

手机充值系统开发全解析(解题思路分析+知识点总结)

本文设计实现了一个基于Java的手机充值系统,采用面向对象思想将系统拆分为用户管理、充值记录、业务逻辑和交互界面四个模块。系统核心功能包括手机号格式校验、充值金额范围检查、用户自动创建、余额查询和充值记录查询。通过控制台菜单实现用户交互,使用正则表达式验证手机号,采用集合存储用户和充值记录数据。重点解决了参数校验、业务解耦和异常处理等问题,确保了系统的健壮性。代码实现中严格遵循封装原则,避免直接暴露属性,并通过单元测试验证了各种正常和异常场景下的系统行为。

Kling_0704的博客 891

mysql雇员管理java_Java雇员管理小项目

在学习集合框架的时候,初学者很容易练习到学生管理系统、雇员管理体统等练习题。在学习集合框架之前,基本上Java基本语法都学完了,集合框架也从侧面的检验对前面学习的理解。下面用一个曾经做过的练习题,回顾集合框架,以及简要介绍面向对象编程思想。我发现旧的知识,当你再回头去看的时候,理解会更透彻。最近巩固基础ing。工具:记事本,方便编译和演示环境:将代码放在一个类当中了(这个习惯很不好)目的:回顾知识...

weixin_32338107的博客 264

java 面向接口_java 面向接口编程的理解

初学者可能在学习中会有很多疑惑,为什么要这样,明明可以那样实现,这样做的好处又是什么?可能会的人觉得很简单很容易理解,甚至可能觉得问的问题很智障,但对于小白来说可能是苦思冥想都不得其解的。自己身为初学者也深知初学者的不易,很多问题网上没有很明确的答案。自己遇到什么问题想出来后就写下,也为了便于后来人,毕竟前人种树后人乘凉。初看容器时,有很多疑问,为什么都用接口作为类型去实现?(List l = n...

weixin_42517807的博客 184

ATM系统开发(二):开户与登录功能详解

唯一卡号生成:通过「随机数拼接 + 循环校验」保证卡号唯一性,循环是实现 “直到生成唯一值” 的关键;集合的遍历与查找:利用ArrayList存储账户,通过索引遍历 +equals()方法实现卡号精准查询;登录逻辑设计:分层校验(先查账户是否存在 → 再查卡号 → 最后查密码),双层循环处理用户输入错误的情况,loginAcc变量维护登录状态;面向对象封装Account类封装账户属性(卡号、密码、余额等),通过方法访问和修改属性,符合 Java 封装特性。

Kling_0704的博客 621
上一篇: 利用反射技术在泛型String集合中存入Integer元素
下一篇: 算法结合堆列实现十进制转二进制
Java小柴
博客等级 码龄8年 46粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值