在Java里如何使用数组完成通讯录项目_Java入门项目说明
发布时间 - 2026-02-02 00:00:00 点击率:次应使用Person类封装姓名和电话再用Person[]数组管理,避免String[]双数组导致的越界、空指针、数据错乱及扩容困难等问题,并需额外维护size变量记录有效元素数。
用 String[] 存姓名和电话会很快遇到越界和空指针
初学者常直接声明 String[] names = new String[10]; 和 String[] phones = new String[10];,靠下标对齐来管理联系人。但实际操作中:
– 插入第 11 条数据时抛出 ArrayIndexOutOfBoundsException
– 删除中间某条后,留下 null 空位,遍历时必须反复判空
– 姓名和电话靠下标“隐式关联”,一旦数组长度不一致或错位,数据就错乱
– 扩容需手动 new 更大数组 + System.arraycopy(),极易漏拷贝或索引偏移
把联系人封装成类再用 Person[] 数组才可控
定义一个 Person 类,包含 name、phone 字段和必要构造方法,再用对象数组统一管理:
class Person {
String name;
String phone;
Person(String name, String phone) {
this.name = name;
this.phone = phone;
}
}这样做的好处:
– 单个 Person 对象天然绑定姓名与电话,不依赖下标对齐
– 判断是否为空只需 persons[i] != null,比双数组少一半判空逻辑
– 查找、删除时操作的是单个引用,不会误动其他字段
– 后续想加邮箱、地址等字段,只改 Person 类,数组层完全不用动
数组长度固定,所以必须自己维护有效元素数 size
不能依赖 persons.length 当联系人数——那是容量,不是实际数量。必须额外用一个 int size 记录当前已存几条:
- 添加时:先检查
size ,再赋值persons[size++] = new Person(...) - 删除时:把末尾元素挪到被删位置,再执行
size--(避免留空洞) - 遍历时:循环条件是
i ,不是i - 打印全部联系人时,如果
size == 0,直接提示“通讯录为空”,别遍历整个数组
真要扩容,Arrays.copyOf() 比手写复制更安全
当 size == persons.length 时,必须扩容。别自己写循环拷贝:
persons = Arrays.copyOf(persons, persons.length * 2);
注意点:
– Arrays.copyOf() 返回新数组,原引用必须重新赋值,否则扩容无效
– 新数组后半部分自动填 null,不影响 size 控制的访问范围
– 不要用 persons = new Person[persons.length * 2] 然后忘了拷贝——这是最常丢数据的操作
– 如果项目后续要频繁增删,数组就不是最佳结构,该换 ArrayList 了,但入门阶段用数组练逻辑,重点在理解 size 和容量的区别
真正卡住人的从来不是语法,而是没想清楚“我到底要管多少个有效数据”——size 变量漏维护、扩容后忘记重赋值、删完不减 size,这些细节一错,整个通讯录就查不到人、删不对人、显示一堆 null。
# java
# 邮箱
# 区别
# String
# NULL
# 封装
# int
# 循环
# 指针
# 堆
# Length
# 空指针
# 对象
# 再用
# 为空
# 的是
# 人时
# 这是
# 那是
# 遍历
# 只需
# 更大
# 这样做
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
javascript基于原型链的继承及call和apply函数用法分析
如何在Ubuntu系统下快速搭建WordPress个人网站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何用好域名打造高点击率的自主建站?
简历在线制作网站免费版,如何创建个人简历?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何在Windows服务器上快速搭建网站?
Laravel如何处理异常和错误?(Handler示例)
Laravel怎么在Blade中安全地输出原始HTML内容
Laravel怎么为数据库表字段添加索引以优化查询
如何在Tomcat中配置并部署网站项目?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
使用豆包 AI 辅助进行简单网页 HTML 结构设计
EditPlus中的正则表达式实战(6)
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
网站制作报价单模板图片,小松挖机官方网站报价?
制作企业网站建设方案,怎样建设一个公司网站?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何实现建站之星域名转发设置?
焦点电影公司作品,电影焦点结局是什么?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
独立制作一个网站多少钱,建立网站需要花多少钱?
油猴 教程,油猴搜脚本为什么会网页无法显示?
免费网站制作appp,免费制作app哪个平台好?
北京网站制作的公司有哪些,北京白云观官方网站?
linux top下的 minerd 木马清除方法
JavaScript数据类型有哪些_如何准确判断一个变量的类型
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何创建自定义中间件?(Middleware代码示例)
js代码实现下拉菜单【推荐】
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何挑选最适合建站的高性能VPS主机?
如何快速搭建高效香港服务器网站?
如何利用DOS批处理实现定时关机操作详解
iOS发送验证码倒计时应用
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何在腾讯云免费申请建站?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
详解Android图表 MPAndroidChart折线图
Laravel如何创建自定义Artisan命令?(代码示例)


