集合区别
HashMap 和 HashTable 的区别
HashMap可以保存null值
HashTable 不可以保存null值
HashMap 是线程不安全的
HashTable 是线程安全的(效率低)
ArrayList
数组实现 线程不安全的 常用
查询快 增删慢
LinkedList
链表实现 线程不安全 不常用
查询慢 增删快
Vector
数组实现 线程安全的 被ArrayList替代了
HashSet
哈希算法 线程不安全的 作用:去重
LinkedHashSet
线程不安全 有序(怎么存的怎么取出来)
TreeSet
线程不安全的 作用:排序(两种方法)
HashMap
线程不安全的 作用:键位可以去去重
LinkedHashMap
线程不安全的 特点:有序(怎么存的怎么取)
TreeMap
线程不安全的 作用:键位可以排序
HashTable
线程安全的 被HashMap取代 不能保存null值
我的代码
说明:得到字符串中的大写首字母时,需要导入两个jar包,分别是pinyin4j-2.5.0.jar PinYinUtil.jar
用BuildPath建立一下路径后才能使用String firstLetter = Pinyin4jUtil.getFirstLetter(oldName)方法
package com.lanou3g.bean;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;
public class LinkManManager {
private static TreeMap<String, ArrayList<LinkMan>> treeMap = null;
private static String name;
public LinkManManager() {
super();
treeMap = new TreeMap<>();
}
public LinkManManager(String name) {
this.name = name;
treeMap = new TreeMap<>();
}
public String getName() {
return name;
}
public static void setName(String name) {
LinkManManager.name = name;
}
public static TreeMap<String, ArrayList<LinkMan>> getTreeMap() {
return treeMap;
}
public void printTreeMap() {
if(treeMap.isEmpty()){
System.out.println(name + "为空通讯录中无联系人");
return;
}
for(String key : treeMap.keySet()) {
ArrayList< LinkMan> treeMapList = treeMap.get(key);
System.out.println(key + "组:");
for(LinkMan linkMan : treeMapList) {
System.out.println(linkMan);
}
}
}
public void addLinkManToTreeMap(LinkMan linkMan) {
if(linkMan == null || linkMan.getName().isEmpty()) {
System.out.println("联系人信息不全 -- 添加联系人失败");
}
String firstLetter = Pinyin4jUtil.getFirstLetter(linkMan.getName());
String upperCase = firstLetter.toUpperCase();
if(!treeMap.containsKey(upperCase)) {
ArrayList<LinkMan> array = new ArrayList<>();
array.add(linkMan);
treeMap.put(upperCase, array);
}else {
ArrayList<LinkMan> arrays = treeMap.get(firstLetter);
if(!arrays.contains(linkMan)) {
arrays.add(linkMan);
}
}
}
public void searchLinkManByStrAndSortByName(String string){
if(string == null) {
System.out.println("分区输入有误 -- 请重新输入");
return;
}
String upperCase = string.toUpperCase();
if(!treeMap.containsKey(upperCase)) {
System.out.println("无该分区 -- 分区内无联系人");
return;
}
ArrayList<LinkMan> arrayList = treeMap.get(upperCase);
TreeSet<LinkMan> treeSet = new TreeSet<>(new sortByName());
treeSet.addAll(arrayList);
arrayList.clear();
arrayList.addAll(treeSet);
printArrayList(arrayList);
}
public void printArrayList(ArrayList<LinkMan> arrayList) {
for (LinkMan linkMan : arrayList) {
System.out.println(linkMan);
}
}
public void printByPhone(String phone) {
if(phone == null) {
System.out.println("输入电话号码为空");
return;
}
LinkMan linkMan = null;
for (String string : treeMap.keySet()) {
ArrayList<LinkMan> arrayList = treeMap.get(string);
for (LinkMan linkMan1 : arrayList) {
if(linkMan1.getNumber().equals(phone)) {
linkMan = linkMan1;
}
}
}
if(linkMan == null) {
System.out.println(phone + " -- 查询失败");
return;
}
System.out.println(linkMan);
}
public void searchBySexAndSortByAge(String sex) {
if(!(sex.equals("男") || sex.equals("女"))) {
System.out.println("性别有误 -- 无法查询");
return;
}
ArrayList<LinkMan> arrayList = new ArrayList<>();
for(String string : treeMap.keySet()) {
ArrayList<LinkMan> arrayList2 = treeMap.get(string);
for (LinkMan linkMan : arrayList2) {
if(linkMan.getSex().equals(sex)) {
arrayList.add(linkMan);
}
}
}
if(arrayList.isEmpty()) {
System.out.println("无" + sex + "性别的人");
return;
}
TreeSet< LinkMan> treeSet = new TreeSet<>(new sortByAge());
treeSet.addAll(arrayList);
arrayList.clear();
arrayList.addAll(treeSet);
printArrayList(arrayList);
}
public void removeByGroup(String group) {
String upperCase = group.toUpperCase();
if(!treeMap.containsKey(upperCase)) {
System.out.println("无此分区");
return;
}
treeMap.remove(upperCase);
printTreeMap();
}
public void deleteLinkManByName(String name) {
String firstLetter = Pinyin4jUtil.getFirstLetter(name);
if(name == "" || !treeMap.containsKey(firstLetter)) {
System.out.println("姓名不能为空或姓名有误");
return;
}
ArrayList<LinkMan> arrayList = null;
LinkMan linkMan = null;
for (String string : treeMap.keySet()) {
ArrayList<LinkMan> arrayList2 = treeMap.get(string);
for (LinkMan linkMan2 : arrayList2) {
if(linkMan2.getName().equals(name)) {
linkMan = linkMan2;
arrayList = arrayList2;
}
}
}
if(linkMan == null) {
System.out.println("此姓名不存在");
return;
}
arrayList.remove(linkMan);
if(arrayList.isEmpty()) {
removeByGroup(firstLetter);
}
}
public void changeLinkManByOldNameAndNewName(String oldName, String newName) {
String firstLetter = Pinyin4jUtil.getFirstLetter(oldName);
String firstLetter2 = Pinyin4jUtil.getFirstLetter(newName);
String oldCase = firstLetter.toUpperCase();
String newCase = firstLetter2.toUpperCase();
if(!treeMap.containsKey(oldCase)) {
System.out.println("该分区不存在 查无此人 无法修改");
return;
}
LinkMan oldman = null;
for (String string : treeMap.keySet()) {
ArrayList<LinkMan> arrayList = treeMap.get(string);
for (LinkMan linkMan1 : arrayList) {
if(linkMan1.getName().equals(oldName)) {
oldman = linkMan1;
}
}
}
if(oldman == null) {
System.out.println("在" + oldCase + "分区内 查无此人");
return;
}
if(oldCase.equals(newCase)) {
oldman.setName(newName);
}else {
LinkMan linkMan = oldman;
deleteLinkManByName(oldName);
linkMan.setName(newName);
addLinkManToTreeMap(linkMan);
}
}
}
class sortByName implements Comparator<LinkMan>{
@Override
public int compare(LinkMan o1, LinkMan o2) {
int num = o1.getName().compareTo(o2.getName());
return num == 0 ? 1 : num;
}
}
class sortByAge implements Comparator<LinkMan>{
@Override
public int compare(LinkMan o1, LinkMan o2) {
int num = o2.getAge() - o1.getAge();
return num == 0 ? 1 : num;
}
}
package com.lanou3g.bean;
public class LinkMan {
private String name;
private int age;
private String sex;
private String address;
private String number;
public LinkMan() {
super();
}
public LinkMan(String name, int age, String sex, String address, String number) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((number == null) ? 0 : number.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
LinkMan other = (LinkMan) obj;
if (address == null) {
if (other.address != null)
return false;
} else if (!address.equals(other.address))
return false;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (number == null) {
if (other.number != null)
return false;
} else if (!number.equals(other.number))
return false;
if (sex == null) {
if (other.sex != null)
return false;
} else if (!sex.equals(other.sex))
return false;
return true;
}
@Override
public String toString() {
return "[name=" + name + ", age=" + age + ", sex=" + sex + ", address=" + address + ", number=" + number
+ "]";
}
}
package com.lanou3g.bean
import java.util.ArrayList
import java.util.TreeMap
public class Test {
public static void main(String[] args) {
LinkManManager manager = new LinkManManager("中华通讯录")
//manager.printTreeMap()
manager.addLinkManToTreeMap(new LinkMan("盖伦", 20, "男", "德玛西亚", "14532"))
manager.addLinkManToTreeMap(new LinkMan("剑姬", 12, "女", "圣光之城", "2453"))
manager.addLinkManToTreeMap(new LinkMan("剑圣", 18, "男", "圣光之城", "2453"))
manager.addLinkManToTreeMap(new LinkMan("剑魔", 15, "男", "迷失之城", "2453"))
manager.addLinkManToTreeMap(new LinkMan("赵信", 19, "男", "迷失之城", "5741"))
manager.addLinkManToTreeMap(new LinkMan("蛮王", 17, "女", "德玛西亚", "8553"))
//manager.addLinkManToTreeMap(new LinkMan("无极", 17, "女", "德玛西亚", "8553"))
manager.printTreeMap()
System.out.println("*************")
//manager.searchLinkManByStrAndSortByName("j")
//manager.printByPhone("5741")
//manager.searchBySexAndSortByAge("男")
//manager.removeByGroup("j")
//manager.deleteLinkManByName("蛮王")
//System.out.println("*************")
//manager.deleteLinkManByName("赵信")
manager.changeLinkManByOldNameAndNewName("蛮王", "无极")
System.out.println("++++")
manager.printTreeMap()
}
}
老师的代码
package com.lanou3g;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import com.lanou3g.bean.Pinyin4jUtil;
public class LinkManManager {
private TreeMap<String, ArrayList<LinkMan>> map;
public LinkManManager() {
super();
map = new TreeMap<>();
}
public TreeMap<String, ArrayList<LinkMan>> getMap() {
return map;
}
public void printMap() {
System.out.println("*****************");
for(String key : map.keySet()) {
ArrayList<LinkMan> list = map.get(key);
System.out.println(key + "分组:");
for(LinkMan linkMan : list) {
System.out.println(linkMan);
}
}
System.out.println("*****************");
}
public void addLinkMan(LinkMan linkMan){
if(linkMan == null || linkMan.getName().isEmpty()) {
return;
}
String firstLetter =
Pinyin4jUtil.getFirstLetter(linkMan.getName());
if(!map.containsKey(firstLetter)) {
ArrayList<LinkMan> list = new ArrayList<>();
list.add(linkMan);
map.put(firstLetter, list);
}else {
ArrayList<LinkMan> arrayList = map.get(firstLetter);
if(!arrayList.contains(linkMan)) {
arrayList.add(linkMan);
}
}
}
public void findLinkManByPhone(String phone) {
if(phone.isEmpty() || phone == null) {
return;
}
LinkMan linkMan = null;
for(String str : map.keySet()) {
ArrayList<LinkMan> arrayList = map.get(str);
for(LinkMan man : arrayList) {
if(man.getPhone().equals(phone)) {
linkMan = man;
}
}
}
if(linkMan == null) {
System.out.println(phone + "----查无此号");
}else {
System.out.println(linkMan);
}
}
public void findLinkManByGroup(String group) {
String lowerCase = group.toUpperCase();
if(!map.containsKey(lowerCase)) {
System.out.println("该分组" + lowerCase + "没有");
return;
}
ArrayList<LinkMan> arrayList = map.get(lowerCase);
TreeSet<LinkMan> set = new TreeSet<>(new SortByName());
set.addAll(arrayList);
arrayList.clear();
arrayList.addAll(set);
printList(arrayList);
}
public void printList(ArrayList<LinkMan> list) {
for(LinkMan linkMan : list) {
System.out.println(linkMan);
}
}
public void findLinkMansByGender(String gender) {
if(!(gender.equals("男") || gender.equals("女"))) {
System.out.println("该性别" + gender + "无法查询");
return;
}
ArrayList<LinkMan> genderlist = new ArrayList<>();
for(String key : map.keySet()) {
ArrayList<LinkMan> arrayList = map.get(key);
for(LinkMan linkMan : arrayList) {
if(gender.equals(linkMan.getGender())) {
genderlist.add(linkMan);
}
}
}
if(genderlist.isEmpty()) {
System.out.println("该分组" + gender + "没人");
return;
}
TreeSet<LinkMan> treeSet = new TreeSet<>(new SortByAge());
treeSet.addAll(genderlist);
genderlist.clear();
genderlist.addAll(treeSet);
printList(genderlist);
}
public void removeGroup(String group) {
String upperGroup = group.toUpperCase();
if (!map.containsKey(upperGroup)) {
System.out.println("没有该分区" + upperGroup + "不存在");
return;
}
map.remove(upperGroup);
printMap();
}
public void removeLinkedManByName(String name) {
String firstLetter = Pinyin4jUtil.getFirstLetter(name);
if(!map.containsKey(firstLetter)) {
System.out.println("该分区不存在,没有该联系人");
return;
}
LinkMan removeMan = null;
ArrayList<LinkMan> removeList = null;
for(String key : map.keySet()) {
ArrayList<LinkMan> list = map.get(key);
for(LinkMan linkMan : list) {
if(name.equals(linkMan.getName())) {
removeMan = linkMan;
removeList = list;
}
}
}
if(removeMan == null) {
System.out.println("查无此人");
return;
}
removeList.remove(removeMan);
if(removeList.isEmpty()) {
removeGroup(firstLetter);
return;
}
printMap();
}
public void setLinkManByOldNameAndNewName(String oldName, String newName) {
String oldKey = Pinyin4jUtil.getFirstLetter(oldName);
String newKey = Pinyin4jUtil.getFirstLetter(newName);
LinkMan oldMan = null;
if(!map.containsKey(oldKey)) {
System.out.println("无该" + oldKey + "分区不能修改");
return;
}
ArrayList<LinkMan> oldList = map.get(oldKey);
for(LinkMan linkMan : oldList) {
if(linkMan.getName().equals(oldName)) {
oldMan = linkMan;
}
}
if(oldMan == null) {
System.out.println("没有这个名字" + oldName + "的人");
return;
}
if(oldKey.equals(newKey)) {
oldMan.setName(newName);
}else {
LinkMan newLinkMan = new LinkMan(newName,oldMan.getAge(),oldMan.getGender(),
oldMan.getAddress(),oldMan.getPhone());
removeLinkedManByName(oldName);
addLinkMan(newLinkMan);
}
}
}
class SortByAge implements Comparator<LinkMan>{
@Override
public int compare(LinkMan o1, LinkMan o2) {
int num = o2.getAge() - o1.getAge();
return num == 0 ? 1 : num;
}
}
class SortByName implements Comparator<LinkMan>{
@Override
public int compare(LinkMan o1, LinkMan o2) {
int num = o1.getName().compareTo(o2.getName());
return num == 0 ? 1 : num;
}
}
package com.lanou3g;
public class LinkMan {
private String name;
private int age;
private String gender;
private String address;
private String phone;
public LinkMan() {
super();
}
public LinkMan(String name, int age, String gender, String address, String phone) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.address = address;
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "[name=" + name + ", age=" + age + ", gender=" + gender + ", address=" + address + ", phone="
+ phone + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + age;
result = prime * result + ((gender == null) ? 0 : gender.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((phone == null) ? 0 : phone.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
LinkMan other = (LinkMan) obj;
if (address == null) {
if (other.address != null)
return false;
} else if (!address.equals(other.address))
return false;
if (age != other.age)
return false;
if (gender == null) {
if (other.gender != null)
return false;
} else if (!gender.equals(other.gender))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (phone == null) {
if (other.phone != null)
return false;
} else if (!phone.equals(other.phone))
return false;
return true;
}
}
package com.lanou3g;
public class Test {
public static void main(String[] args) {
LinkManManager manager = new LinkManManager();
manager.addLinkMan(new LinkMan("王炸", 15, "男", "就甘露", "adsasd"));
manager.addLinkMan(new LinkMan("王松", 14, "男", "泗泾路", "adsasd"));
manager.addLinkMan(new LinkMan("刘忠", 15, "女", "草葫芦", "awwwwsasd"));
manager.addLinkMan(new LinkMan("谢", 12, "女", "就甘露", "adsasd"));
manager.addLinkMan(new LinkMan("项羽", 19, "男", "泗泾路", "adsasd"));
manager.printMap();
manager.setLinkManByOldNameAndNewName("谢", "成龙");
manager.printMap();
}
}