利用类实现链表
1).定义java类实现一个链表,参考C语言链表一节的知识,实现链表的创建,增加节点(有序插入),
删除节点,遍历,显示,查找
2).利用上面实现有链表,完成一个电话本管理程序,实现个人电话本的功能
可以增加条目,删除,修改,按姓名查找
参考linkedlist不就好了
import java.util.Iterator;
import java.util.function.Predicate;
public class CustomList<T> implements Iterable<T>{
class Entity<T> {
T element;
Entity<T> next;
}
private final Entity<T> header = new Entity<>();
private Entity<T> tail = header;
private int size = 0;
public void add(T element) {
Entity<T> entity = new Entity<>();
entity.element = element;
entity.next = header;
tail.next = entity;
size++;
}
public boolean remove(T element) {
for (Entity<T> entity = header; entity.next != header; entity = entity.next) {
if ( (element==null && entity.next.element ==null) || (element!=null && element.equals(entity.next.element)) ) {
entity.next = entity.next.next;
size--;
return true;
}
}
return false;
}
public boolean remove(Predicate<T> conndition) {
for (Entity<T> entity = header; entity.next != header; entity = entity.next) {
if (conndition.test(entity.next.element) ) {
entity.next = entity.next.next;
size--;
return true;
}
}
return false;
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
Entity<T> entity = header;
@Override
public boolean hasNext() {
return entity.next != header;
}
@Override
public T next() {
entity = entity.next;
return entity.element;
}
};
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("[ ");
forEach(value-> builder.append(value).append(" ,"));
if (builder.charAt(builder.length()-1) == ',') {
builder.deleteCharAt(builder.length()-1);
}
builder.append("]");
return builder.toString();
}
public void println(){
System.out.println(toString());
}
public boolean contains(T element) {
for (T value : this) {
if ( (element==null && value==null) || (element!=null && element.equals(value)) ) {
return true;
}
}
return false;
}
public T find(Predicate<T> conndition) {
for (T value : this) {
if ( conndition.test(value) ) {
return value;
}
}
return null;
}
}
public class PhoneBook {
static class PhoneInformation {
String id;
String name;
String phoneNumber;
public PhoneInformation(String id, String name, String phoneNumber) {
this.id = id;
this.name = name;
this.phoneNumber = phoneNumber;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PhoneInformation that = (PhoneInformation) o;
return id.equals(that.id);
}
@Override
public String toString() {
return "{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", phoneNumber='" + phoneNumber + '\'' +
'}';
}
}
private final CustomList<PhoneInformation> phoneInfos = new CustomList<>();
public void addPoneBook(String id, String name, String phoneNumber) {
if (id == null) {
throw new IllegalArgumentException();
}
PhoneInformation info = new PhoneInformation(id, name, phoneNumber);
phoneInfos.add(info);
}
public boolean delete(String id) {
if (id == null) {
throw new IllegalArgumentException();
}
return phoneInfos.remove(pi -> pi.id.equals(id));
}
public boolean update(String id, String name, String phoneNumber) {
PhoneInformation info = phoneInfos.find(pi -> pi.id.equals(id));
if (info == null) {
return false;
}
info.name = name;
info.phoneNumber = phoneNumber;
return true;
}
public CustomList<PhoneInformation> findByName(String name) {
CustomList<PhoneInformation> result = new CustomList<>();
for (PhoneInformation info : phoneInfos) {
if ( (name==null && info.name==null) || (name!=null && name.equals(info.name)) ) {
result.add(info);
}
}
return result;
}
}