做一个通讯录,首字母作为key,所有以这个字母开头的用户作为value,然后实现添加用户操作
思路:
(1)一个通讯录为一个键值对结构,但是一对多,则value可设计为数组或结构,即每个字母对应一个数组
Map<String, ArrayList<Object>> contacts = new HashMap<String, ArrayList<Object>>();
(2)数组结构中存放多个用户
代码实现:
user用户类:
public class User {
String name;
String phone;
String address;
//将人的信息,放入一个字典
Map<String, String> getUserInfo() {
Map<String, String> userInfo = new HashMap<String, String>();
userInfo.put("name", this.name);
userInfo.put("phone", this.phone);
userInfo.put("address", this.address);
return userInfo;
}
}
Phonebook电话本类:
public class PhoneBook {
// 表示所有联系人数组是通讯录对象的属性
Map<String, ArrayList<Object>> contacts = new HashMap<String, ArrayList<Object>>();
// 构造通讯录的整体结构:每个字母对应一个数组:
void setContacts() {
for (char ch = 'A'; ch <= 'Z'; ch++) {
// 为什么名字可以一样
ArrayList<Object> users = new ArrayList<Object>();
this.contacts.put(ch + "", users);
}
}
// 添加一个用户
void addUser(User user) {
// 先求key
String firstChar = user.name.substring(0, 1).toUpperCase();// 取出我名字的首字母
// 再存进去:存到哪个集合
ArrayList<Object> userChar = this.contacts.get(firstChar);// 首字母对应的小组
userChar.add(user.getUserInfo());
}
}
Main主函数操作类:
public static void main(String[] args) {
PhoneBook book = new PhoneBook();
book.setContacts();//创建电话本结构
//一个用户
User user = new User();
user.name = "xm";
user.phone = "18888";
user.address = "sichuan";
//添加一个用户
book.addUser(user);
User user1 = new User();
user1.name = "Tom";
user1.phone = "1111";
user1.address = "sichuan";
book.addUser(user1);
//得出结果
System.out.println(book.contacts);
}