HashMap 存电话号码比 ArrayList 查找快,因 get() 平均 O(1);需统一键大小写、校验手机号格式、用 Properties 持久化、支持 quit/exit 退出指令。

在Java中如何开发小型电话簿应用_Java数据结构应用解析

HashMap 存电话号码比 ArrayList 查得快

查联系人是电话簿最频繁操作,如果用 ArrayList 存,每次都要遍历——100 个人平均找 50 次;换成 HashMap,键设为姓名,值存号码,get() 是 O(1) 平均时间。别为了“学数据结构”硬套链表或树,小应用里 HashMap 就是最优解。

注意点:

增删改操作必须校验手机号格式

用户输个 "123""138abcd1234" 进去,后面导出、拨号都会崩。Java 没内置手机号校验,得自己加逻辑:

public static boolean isValidPhone(String phone) {
    if (phone == null) return false;
    return phone.matches("^1[3-9]\\d{9}$"); // 简单匹配大陆 11 位手机号
}

说明:

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());
}

读取时注意:

命令行交互别写死 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 ...
}

容易被忽略的细节:

实际跑起来最麻烦的不是功能,是用户随手输个空格、大小写、中文顿号当分隔符。先锁死输入格式,再谈结构。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。