簡體   English   中英

如何制作一個.add方法,該方法按字母順序在基於引用的列表中添加對象

[英]how to make an .add method which adding objects in a reference based list in alphabetically order

這是我的用戶類,我發現我必須使用compareTo方法,但是我需要一個在Rb列表中添加的方法。 有一個已經存在的添加方法,我已經做了類似的按字母順序排列用戶的命令。


import java.lang.Comparable;
public  class LaptopUser  implements Comparable<LaptopUser>
{
    private String username;
    private String password;
    public LaptopUser(String username,String password)
    {
            this.username=username;
            this.password=password;

    }

    public String getUsername(){
        return username ;
    }
    public String getPass()
    {
        return password;
    }

    public String toString(){
        return(username+","+password);
    }
    @Override
    public int compareTo(LaptopUser n)
    {
            if(this.toString().compareTo(n.toString())>0)
            {
                return 1;
            }
            else if(this.toString().compareTo(n.toString())<0)
            {
                return -1;
            }
            return 0;
    }
        public boolean equals(LaptopUser p)
    {
        return(this.toString().equals(p.toString()));

    }
}

  public class ReferenceBasedList implements ListInterface
{
    private ListNode head;
    private ListNode tail;
    int numItems;

    public ReferenceBasedList()
    {
        head = tail = null;
        numItems = 0;
    }

    public int size()
    {
        return numItems;
    }

    public boolean isEmpty()
    {
        return (numItems == 0);
    }

    public void removeAll()
    {
        head = tail = null;
        numItems = 0;
    }

    private ListNode find(int index)
    {
        ListNode curr = head;
        for (int skip = 1; skip < index; skip++)
            curr = curr.getNext();
        return curr;
    }

    public Object get(int index)
                      throws ListIndexOutOfBoundsException
    {
        if (index >= 1 && index <= numItems)
        {
            ListNode curr = find(index);
            return curr.getItem();
        }
        else
        {
            throw new ListIndexOutOfBoundsException(
                     "List index out of bounds exception on get");
        }
    }

    public void add(int index, Object newDataItem)
                    throws ListIndexOutOfBoundsException
    {
        if (index >= 1 && index <= numItems+1)
        {
            if ( index == 1 )
            {
                ListNode newNode = new ListNode(newDataItem, head);
                head = newNode;

                if (tail==null)
                    tail = head;
            }
            else if ( index==numItems+1 )
            {
                ListNode newNode = new ListNode(newDataItem);
                tail.setNext(newNode);
                tail = newNode;
            }
            else
            {
                ListNode prev = find(index-1);
                ListNode newNode = new ListNode(newDataItem, prev.getNext());
                prev.setNext(newNode);
            }
            numItems++;
        }
        else
        {
            throw new ListIndexOutOfBoundsException(
                    "List index out of bounds exception on add");
        }
    }

    public void insert(Object newDataItem)
    {
        this.add(1,newDataItem);
    }

    public void append(Object newDataItem)
    {
        this.add(numItems+1,newDataItem);
    }

    public Object showFront()
    {
        return this.get(1);
    }

    public Object showLast()
    {
        return this.get(numItems);
    }

    public void remove(int index)
                       throws ListIndexOutOfBoundsException
    {
        if (index >= 1 && index <= numItems)
        {
            if (index == 1)
            {
                head = head.getNext();
                if (head == null)
                    tail = null;
            }
            else
            {
                ListNode prev = find(index-1);
                ListNode curr = prev.getNext();
                prev.setNext(curr.getNext());
                if (index == numItems)
                    tail = prev;
            }
            numItems--;
        }
        else
        {
            throw new ListIndexOutOfBoundsException(
                   "List index out of bounds exception on remove");
        }
    }

    public boolean exists(Object dataItem)
    {
        for (ListNode tmp=head; tmp!=null; tmp=tmp.getNext())
            if (tmp.getItem().equals(dataItem))
                return true;
        return false;
    }

    public Object removeLast() throws ListException
    {
        if (isEmpty())
            throw new ListException("The linked list is empty");
        else
        {
            Object lastDataItem = tail.getItem();
            if (head == tail)
                head = tail = null;
            else
            {
                ListNode tmp = head;
                while (tmp.getNext().getNext() != null)
                    tmp = tmp.getNext();
                tail = tmp;
                tail.setNext(null);
            }
            numItems--;
            return lastDataItem;
        }
    }

    public Object removeFront() throws ListException
    {
        if (isEmpty())
            throw new ListException("The linked list is empty");
        else
        {
            Object frontDataItem = head.getItem();
            head = head.getNext();
            if (head == null)
                tail = null;
            numItems--;
            return frontDataItem;
        }
    }
}

您可以使用Collections.binarySearch方法查找將LaptopUser添加到List哪個索引,以便按字母順序對其進行排序。

SortedList:

public class SortedList implements Iterable<LaptopUser> {
    public List<LaptopUser> users = new ArrayList<LaptopUser>();

    public void add(LaptopUser user) {
        int index = Collections.binarySearch(users, user);

        if (index < 0)
            users.add(-index - 1, user);
        else
            users.add(index, user);
    }

    @Override
    public Iterator<LaptopUser> iterator() {
        return users.iterator();
    }

示例代碼:

public class LaptopUser implements Comparable<LaptopUser> {
    public String username;
    public String password;

    public LaptopUser(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public int compareTo(LaptopUser o) {
        return toString().compareTo(o.toString());
    }

    @Override
    public String toString() {
        return username.concat(password);
    }
}

public Sorted() {
    LaptopUser a =new LaptopUser("a", "password");
    LaptopUser b =new LaptopUser("b", "password");
    LaptopUser c =new LaptopUser("c", "password");
    SortedList list = new SortedList();

    list.add(c);
    list.add(a);
    list.add(b);
    for(LaptopUser user : list)
        System.out.println(user);
}

public static void main(String[] args) {
    new Sorted();
}

輸出:

apassword
bpassword
cpassword

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM