java使用集合实现通讯录功能
作者:chen449757520 发布时间:2023-01-30 21:27:15
标签:java,集合,通讯录
本文实例为大家分享了java使用集合实现通讯录的具体代码,供大家参考,具体内容如下
代码有些繁琐,只适合初学者。
项目1
java通讯录
方法(声明方法的类)
代码块
代码块语法遵循标准markdown代码,例如:
package com.lanou.homwork;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Set;
class ContactPerson {
public HashMap map = null;
public HashMap getMap() {
return map;
}
public void setMap(HashMap map) {
this.map = map;
}
public ContactPerson(HashMap map) {
super();
this.map = map;
}
public ContactPerson() {
}
// 添加联系人
public HashMap addContact(Person person) {
// map集合为空
if (this.map.size() == 0) {
LinkedList list = new LinkedList();
// 添加到list集合里
list.add(person);
this.map.put(person.getFirstCard(), list);// 添加map集合
System.out.println(person.getFirstCard());
} else {
System.out.println("1111111111111111111");
// 不为空的时候.首先判断有没有这个分组
Set keySet = this.map.keySet();// 得到所有的键key
// 遍历所有键
for (Object object : keySet) {
if (person.getFirstCard().equals(object)) {
Object object2 = this.map.get(person.getFirstCard());
LinkedList linkedList = (LinkedList) object2;
// 有这个分组
linkedList.add(person);
} else {
// 没有这个分组
LinkedList list3 = new LinkedList();
list3.add(person);
this.map.put(person.getFirstCard(), list3);
System.out.println(keySet);
System.out.println(map.values());
return map;
}
}
}
return map;
}
// 删除联系人
public void remove(Person person) {
// 首先找到那个分组
// 所有的值
Set set = this.map.keySet();
for (Object object : set) {
String nameString = person.getFirstCard();
if (nameString.equals(object)) {
// 找见分组
Collection collection = this.map.values();
for (Object object1 : collection) {// list数组
LinkedList list1 = (LinkedList) object1;// 强制转换
for (Object object2 : list1) {// 遍历
Person person2 = (Person) object2;//
if (person.getNameString().equals(
person2.getNameString())) {
if (list1.size() == 1) {
this.map.remove(person2.getFirstCard());// 删除整个分组
show();
} else {
list1.remove(person2);
show();
}
}
}
}
}
}
}
// 展示方法
public void show() {
System.out.println("*************************************");
System.out.println("请选择功能");
String[] newArrayStrings = { "1.添加联系人", "2.删除联系人", "3.修改联系人",
"4.展示所有联系人" };
for (int i = 0; i < newArrayStrings.length; i++) {
System.out.println("******" + newArrayStrings[i] + "******");
}
System.out.println("*************************************");
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
switch (i) {
case 1: {
addPerosn();
}
break;
case 2: {
removePerson();
}
break;
case 3: {
upPerson();
}
break;
case 4: {
printResult(this.map);
}
break;
default:
break;
}
}
// 修改联系人信息
public void upPerson() {
Person person = new Person();
System.out.println("请输入要修改人的姓名:");
Scanner scanner = new Scanner(System.in);
String naString = scanner.next();
person.setNameString(naString);
shanChu(person);
}
// 输入新的人名,年龄
public void cc(Person person) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入新的名字:");
String naString2 = scanner.next();
System.out.println("请输入新的年龄:");
int age = scanner.nextInt();
System.out.println("请输入新的分组");
String group = scanner.next();
upPersonMessage(person, naString2, group, age);
}
// 判断有没有这个人
public void shanChu(Person person) {
if (this.map.isEmpty()) {
System.out.println("通讯录为空,修改失败");
System.out.println("是否添加联系人?(Yes/No)");
Scanner scanner = new Scanner(System.in);
String nameString = scanner.next();
if (nameString.equals("Yes")) {
addPerosn();
} else {
System.out.println(" * ,滚你妈");
}
}
Collection collection = this.map.values();
for (Object object : collection) {
LinkedList list = (LinkedList) object;
for (Object object2 : list) {
Person person2 = (Person) object2;
if (person.getNameString().equals(person2.getNameString())) {
System.out.println("恭喜你,通讯录有此人");
cc(person);
} else {
System.out.println("输入有误");
}
}
}
}
public Person addPerosn() {
Person p = new Person();
System.out.println("请输入添加人名字:");
Scanner scanner = new Scanner(System.in);
// 姓名
String name = scanner.next();
// 年龄
System.out.println("请输入年龄:");
int age = scanner.nextInt();
// 分组
System.out.println("请输入分组名称:");
String firstCardString = scanner.next();
p.setFirstCard(firstCardString);
p.setAge(age);
p.setNameString(name);
System.out.println(p);
addContact(p);
System.out.println("是否继续操作?y/n");
if (scanner.next().equals("y")) {
show();
} else {
System.out.println("***************欢迎您下次再来****************");
}
return p;
}
public Person removePerson() {
Person p = new Person();
System.out.println("请输入删除人名字:");
Scanner scanner = new Scanner(System.in);
// 姓名
String name = scanner.next();
// 年龄
System.out.println("请输入删除人的年龄:");
int age = scanner.nextInt();
// 分组
System.out.println("请输入删除的分组名称:");
String firstCardString = scanner.next();
p.setFirstCard(firstCardString);
p.setAge(age);
p.setNameString(name);
remove(p);
return p;
}
// 修改联系人
public HashMap upPersonMessage(Person person, String nameString,
String firstCard, int age) {
// 判断有没有此联系人
if (this.map.isEmpty()) {
System.out.println("通讯录为空");
} else {
String name = person.getFirstCard();
// 找联系人
Collection collection = this.map.values();// 得到所有的值
for (Object object : collection) {
LinkedList list = (LinkedList) object;
for (Object object2 : list) {
Person p = (Person) object2;
if (person.getNameString().equals(p.getNameString())) {
// 相等话,说明有这个人
System.out.println("有次联系人");
if (list.size() == 1) {
this.map.remove(p.getFirstCard());
Person person2 = new Person();
person2.setAge(age);
person2.setFirstCard(firstCard);
person2.setNameString(nameString);
LinkedList list2 = new LinkedList();
list2.add(person2);
this.map.put(person2.getFirstCard(), list2);
System.out.println(this.map);
} else {
Person person2 = new Person();
person2.setAge(age);
person2.setFirstCard(firstCard);
person2.setNameString(nameString);
list.add(person2);
System.out.println(this.map);
}
}
}
}
}
return map;
}
// 显示所有的联系人
public void printResult(HashMap map1) {
if (map1.isEmpty()) {
System.out.println("通讯录为空");
} else {
System.out.println(map1);
Scanner scanner = new Scanner(System.in);
System.out.println("是否继续y/n");
if (scanner.next().equals("y")) {
show();
} else {
System.out.println("***************欢迎您下次再来****************");
}
}
}
}
class Person {
private String nameString;
private String firstCard;
private int age;
public String getNameString() {
return nameString;
}
public void setNameString(String nameString) {
this.nameString = nameString;
}
public String getFirstCard() {
return firstCard;
}
public void setFirstCard(String firstCard) {
this.firstCard = firstCard;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String nameString, String firstCard) {
this.nameString = nameString;
this.firstCard = firstCard;
}
public Person(String nameString, String firstCard, int age) {
this(nameString, firstCard);
this.age = age;
}
@Override
public String toString() {
return "姓名:" + this.getNameString() + "年龄:" + this.age + "分组:"
+ this.firstCard;
}
}
脚注
项目2
测试类
代码块
代码块语法遵循标准markdown代码,例如:
package com.lanou.homwork;
import java.util.HashMap;
public class TestPerson {
public static void main(String[] args) {
HashMap map = new HashMap();
ContactPerson contactperson = new ContactPerson(map);
contactperson.show();
}
}
感谢浏览。
来源:http://blog.csdn.net/chen449757520/article/details/77933261


猜你喜欢
- 1. 前言Compose 具有超强的兼容性,兼容现有的所有代码,Compose 能够与现有 View 体系并存,可实现渐进式替换。这就很有意
- 目录一、复习二、两者对比三、在什么情况下才会使用volatile四、Java中的原子性操作五、Java中的CAS操作六、ABA问题七、Uns
- java多线程-同步块Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java 同步块用来避免竞争。
- Java 继承与多态的深入理解1、 什么是继承,继承的特点?子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从
- Android调试出现The selected device is incompatible问题解决在做Android调试时碰到该问题。详情
- java 判断两个对象是否为同一个对象用“==”比较的是引用的地址,用equals比较的就是值。那我们new两个相同的对象什么属性都一样,为
- 最近这学期做了一个java迷宫的课程设计,这里代码及其算法逻辑就分享出来。首先简单的说一下其中我使用的算法(自动生成地图:递归分割法、递归回
- 引言本文我们来分析NameServer相关代码,在正式分析源码前,我们先来回忆下NameServer的功能:NameServer是一个非常简
- 在Android开发中,Animation是用来给控件制作效果的。大多数的控件都可以用这个类,这个类包含了4种基本动作,分别为移动,旋转,淡
- 一、链表的概念和结构1.1 链表的概念简单来说链表是物理上不一定连续,但是逻辑上一定连续的一种数据结构1.2 链表的分类实际中链表的结构非常
- 输出为MP4需要用到ffmpeg相关的文件,我打包的库已经带了,去官网找的库可以在这个目录找到:2:添加这些引用:3:两个全局变量://用来
- 在c#中怎样调用VC写的OCX控件,主要有两个关键环节两个关键环节:导入ocx控件,创建实例。1 注册ocx:regsvr32.exe al
- 本文主要为大家整理Java常见的面试题,供大家参考,具体内容如下1. Java中sleep和wait的区别① 这两个方法来自不同
- 在Android开发中,有时候可能会要用到碎纸机的效果,今天小编为大家整理好代码,一起来看看吧。首先来看下效果图实例代码xml<com
- 目的官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少。本文介绍如何在Spring Bo
- 最近在做上传文件的服务,简单看了网上的教程。结合实践共享出代码。由于网上的大多数没有服务端的代码,这可不行呀,没服务端怎么调试呢。Ok,先上
- MyBatis动态sql动态sql处理简单的多参数查询常用标签标签说明if条件判断,与java中的if语句类似where为sql语句动态添加
- 多级缓存在实际开发项目,为了减少数据库的访问压力,都会将数据缓存到内存中比如:Redis(分布式缓存)、EHCHE(JVM内置缓存).例如在
- 关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListVie
- 1.springboot 2.0 默认连接池就是Hikari了,所以引用parents后不用专门加依赖2.贴我自己的配置(时间单位都是毫秒)