Как я могу отсортировать свой arrayList лексикографически после его изменения? - PullRequest
0 голосов
/ 20 апреля 2020

Я пишу программу, в которой мне нужно составить последовательность (массив указателей на узел, который указывает на объект). Массив работает на основе пар ключ-значение, и я должен отсортировать его лексикографически по ключам. В настоящее время мне не хватает способа сортировки массива, и я действительно в растерянности. Любая помощь будет оценена!

примечание. Я не ищу, чтобы кто-то для меня это кодировал, просто руководство или идея о том, как бы я go сделал это

Вот моя последовательность класс до сих пор:

import java.util.ArrayList;
import java.util.Stack;

public class sequence 
{
    private class position
    { 
        private Stack<Account> stack; 
        private int index; 

        //constructors
        public position() 
        { 
            this.stack=new Stack<Account>(); 
            this.index=0;
        } 

        public position(int index, Account acc) 
        {
            this.index=index; 
            this.stack=new Stack<Account>(); 
            stack.push(acc);
        } 

        //muatators 
        public int getIndex() 
        { 
            return index;
        } 
        public void setIndex(int index) 
        { 
            this.index=index;
        } 

        public Stack<Account> getStack() 
        { 
            return stack;
        } 
        public void setStack(Stack<Account> newStack) 
        { 
            this.stack=newStack;
        }   
    }









    private int size;  
    //private int tail;
    private int elementsNum;
    //private int currentIndex;
    private ArrayList<position> Arr;
    public sequence() 
    {  
        //currentIndex=0; 
        size=0;
        Arr= new ArrayList<position>(); ;
    }  
    //add first method
    public void add(Account account) 
    { 
        for(int i=0; i<size; i++) 
        { 
                //if already in array, push into its stack
                if((Arr.get(i).getStack().peek().getVIN()).equals(account.getVIN())) 
                { 
                    Arr.get(i).getStack().push(account); 
                    break;
                } 
                //if not in array, make new entry for it
                else if(!(Arr.get(i).getStack().peek().getVIN()).equals(account.getVIN()) && i==size-1) 
                {
                    position added=new position(size, account);  
                    Arr.add(added);
                    //currentIndex++; 
                    size++;
                }
        }
    } 

    //addIndex  
    //don't think this method is necessary for assignment 
    /**
    public void addIndex(int ind, Account account) 
    { 
        position added=new position(ind, account);  
        Arr.add(ind, added); 
        size++; 
        //update indexes of position node
        updateIndex();
    }
    */ 

    //resizeArray and updates index
    public void resize() 
    { 
        Arr.trimToSize(); 
        updateIndex();
    } 

    //remove method 
    public void removeVIN(String VIN) 
    { 
        for (int i=0; i<size; i++) 
        { 
            if(size==0 || (!VIN.equals(Arr.get(i).getStack().peek().getVIN()) && i==size-1)) 
            { 
                System.out.println("The Sequence does not contain this VIN"); 
                break;
            }
            else if(VIN.equals(Arr.get(i).getStack().peek().getVIN())) 
            { 
                Arr.remove(i); 
                resize(); 
                size--; 
                System.out.println("Successfully removed " +VIN+" and associated values");
            }
        }
    } 

    //update indexes 
    public void updateIndex() 
    { 
        for (int i=0; i<size; i++) 
        { 
            if(Arr.get(i).getIndex() != i) 
            { 
                Arr.get(i).setIndex(i);
            }
        }
    } 

    //Get Values 
    //Will be used in CVR for both the getValues method (return all values) 
    //and prevAccids method (return only the accidents not entire account)
    public Stack<Account> getAccount(String VIN) 
    { 
        for (int i=0; i<size; i++) 
        { 
            if(size==0) 
            { 
                System.out.println("The Sequence is empty"); 
                break;
            }
            else if(VIN.equals(Arr.get(i).getStack().peek().getVIN())) 
            { 
                return Arr.get(i).getStack();
            }
        } 
        return null;
    }  
    //get previous VIN method
    public String preVIN(String VIN) 
    { 
        for (int i=0; i<size; i++) 
        { 
            if((Arr.get(i).getStack().peek().getVIN()).equals(VIN)) 
            { 
                if(i==0) 
                { 
                    return "There is no previous VIN, this is the first one";
                } 
                return Arr.get(i-1).getStack().peek().getVIN();
            } 
        }
        return null;
    } 

    //get next VIN method
    public String nextVIN(String VIN) 
    { 
        for (int i=0; i<size; i++) 
        { 
            if((Arr.get(i).getStack().peek().getVIN()).equals(VIN)) 
            { 
                if(i==size-1) 
                { 
                    return "There is no next VIN, this is the last one";
                } 
                return Arr.get(i+1).getStack().peek().getVIN();
            } 
        }
        return null;
    }  


}

и вот мой класс учетной записи до сих пор

//this method is similar to a node, contains 
//VIN, Owner, Accidents details
public class Account 
{
    private String VIN; 
    private String owner; 
    private String accidents; 

    public Account() {}; 
    public Account(String VIN) 
    { 
        this.VIN=VIN; 
        this.owner=null; 
        this.accidents=null;
    }

    public Account(String VIN, String owner, String accidents) 
    { 
        this.VIN=VIN; 
        this.owner=owner; 
        this.accidents=accidents;
    }  
    //mutators
    public void setVIN(String VIN) 
    { 
        this.VIN=VIN;
    } 
    public String getVIN() 
    { 
        return VIN;
    } 

    public void setOwner(String owner) 
    { 
        this.owner=owner;
    } 
    public String getOwner() 
    { 
        return owner;
    } 

    public void setAccids(String accidents) 
    { 
        this.accidents=accidents;
    } 
    public String getAccids() 
    { 
        return accidents;
    }

}

Использование последовательности требуется для назначения, в противном случае я бы просто использовал treeMap. Идея последовательности: идея последовательности

идея последовательности

...