救救孩子,java用类实现链表,完成电话本管理程序。

利用类实现链表    

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

}