在Java中如何开发小型电话簿应用_Java数据结构应用解析
发布时间 - 2026-01-26 00:00:00 点击率:次HashMap 存电话号码比 ArrayList 查找快,因 get() 平均 O(1);需统一键大小写、校验手机号格式、用 Properties 持久化、支持 quit/exit 退出指令。
用 HashMap 存电话号码比 ArrayList 查得快
查联系人是电话簿最频繁操作,如果用 ArrayList 存,每次都要遍历——100 个人平均找 50 次;换成 HashMap,键设为姓名,值存号码,get() 是 O(1) 平均时间。别为了“学数据结构”硬套链表或树,小应用里 HashMap 就是最优解。
注意点:
-
HashMap的键区分大小写,map.get("zhangsan")和map.get("ZhangSan")不一样,建议入库前统一转小写:name.toLowerCase() - 如果允许多人同名,
HashMap会覆盖旧值,此时该换Map,但小型应用通常不需支持> - 不用
TreeMap——它排序慢、内存多,除非你真要按字母顺序遍历全部联系人且不介意性能损耗
增删改操作必须校验手机号格式
用户输个 "123" 或 "138abcd1234" 进去,后面导出、拨号都会崩。Java 没内置手机号校验,得自己加逻辑:
public static boolean isValidPhone(String phone) {
if (phone == null) return false;
return phone.matches("^1[3-9]\\d{9}$"); // 简单匹配大陆 11 位手机号
}说明:
- 别只用
try-catch包裹Long.parseLong()——手机号开头可能是 0,且超长会溢出,字符串正则更安全 - 如果支持座机或国际号,正则得扩展,但小型电话簿建议锁定大陆手机号,避免边界情况爆炸
- 在
addContact()和updateContact()开头就调这个方法,校验失败直接返回false或抛IllegalArgumentException
用 Properties 做本地持久化够用又不依赖数据库
不需要 MySQL 或 SQLite。Java 自带的 java.util.Properties 能把姓名→号码映射存成纯文本,人类可读、编辑方便、无额外依赖。
示例写入:
Properties props = new Properties();
props.setProperty("张三", "13812345678");
props.setProperty("李四", "15987654321");
try (FileOutputStream fos = new FileOutputStream("contacts.properties")) {
props.store(fos, "Phonebook data - " + new Date());
}读取时注意:
- 文件路径用相对路径(如
"contacts.properties"),别写绝对路径,否则换个电脑就打不开 -
Properties.load()读到的 key/value 都是String,无需转换,直接塞进HashMap - 首次运行没文件?
new File("contacts.properties").exists()判断一下,没有就跳过加载,别让程序崩溃
命令行交互别写死 while(true),加退出指令
小型应用容易写成无限循环,用户只能关终端。至少支持输入 "quit"、"exit" 或 "q" 退出:
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print(">");
String line = scanner.nextLine().trim();
if ("quit".equalsIgnoreCase(line) || "exit".equalsIgnoreCase(line) || "q".equalsIgnoreCase(line)) {
break;
}
// 处理 add / find / list ...
}
容易被忽略的细节:
- 用户可能输空行或全空格,
trim()后判空再处理,否则split()出异常 - 指令解析别用复杂 parser,用
line.split("\\s+", 2)拆成命令+参数就够了,例如"find 张三"→["find", "张三"] - 别在循环里反复 new
Scanner,也别忘了scanner.close()——但这里关了会导致System.in关闭,所以不关更稳妥
实际跑起来最麻烦的不是功能,是用户随手输个空格、大小写、中文顿号当分隔符。先锁死输入格式,再谈结构。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Laravel如何使用Livewire构建动态组件?(入门代码)
韩国服务器如何优化跨境访问实现高效连接?
原生JS实现图片轮播切换效果
iOS UIView常见属性方法小结
Android自定义控件实现温度旋转按钮效果
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
教你用AI润色文章,让你的文字表达更专业
独立制作一个网站多少钱,建立网站需要花多少钱?
JavaScript如何实现音频处理_Web Audio API如何工作?
如何快速生成高效建站系统源代码?
Laravel如何配置Horizon来管理队列?(安装和使用)
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
潮流网站制作头像软件下载,适合母子的网名有哪些?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
音乐网站服务器如何优化API响应速度?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
javascript基于原型链的继承及call和apply函数用法分析
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在云指建站中生成FTP站点?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何快速搭建高效香港服务器网站?
如何用免费手机建站系统零基础打造专业网站?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
详解Android图表 MPAndroidChart折线图
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Laravel如何优化应用性能?(缓存和优化命令)
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
LinuxCD持续部署教程_自动发布与回滚机制
网站制作大概多少钱一个,做一个平台网站大概多少钱?
装修招标网站设计制作流程,装修招标流程?
,在苏州找工作,上哪个网站比较好?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Linux系统命令中tree命令详解
Windows Hello人脸识别突然无法使用
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
C#如何调用原生C++ COM对象详解
如何在宝塔面板创建新站点?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel如何自定义错误页面(404, 500)?(代码示例)
如何快速搭建高效可靠的建站解决方案?
Laravel如何实现模型的全局作用域?(Global Scope示例)
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何正确下载安装西数主机建站助手?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
清除minerd进程的简单方法

