Java开发小型电话簿应用教程
HashMap存电话号码比ArrayList查找快,因get()平均O(1);需统一键大小写、校验手机号格式、用Properties持久化、支持quit/exit退出指令。
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关闭,所以不关更稳妥
实际跑起来最麻烦的不是功能,是用户随手输个空格、大小写、中文顿号当分隔符。先锁死输入格式,再谈结构。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













