Java how to sort a Linked List?

后端 未结 9 1924
耶瑟儿~
耶瑟儿~ 2020-12-03 03:00

I am needing to sort a linked list alphabetically. I have a Linked List full of passengers names and need the passengers name to be sorted alphabetically. How would one do t

相关标签:
9条回答
  • 2020-12-03 03:25

    In java8 you no longer need to use Collections.sort method as LinkedList inherits the method sort from java.util.List, so adapting Fido's answer to Java8:

        LinkedList<String>list = new LinkedList<String>();
        list.add("abc");
        list.add("Bcd");
        list.add("aAb");
    
        list.sort( new Comparator<String>(){
        @Override
            public int compare(String o1,String o2){
                return Collator.getInstance().compare(o1,o2);
            }
        });
    

    References:

    http://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html

    http://docs.oracle.com/javase/7/docs/api/java/util/List.html

    0 讨论(0)
  • 2020-12-03 03:26

    You can use Collections#sort to sort things alphabetically.

    0 讨论(0)
  • 2020-12-03 03:27

    You can do it by Java 8 lambda expression :

    LinkedList<String> list=new LinkedList<String>();
    list.add("bgh");
    list.add("asd");
    list.add("new");
    //lambda expression
    list.sort((a,b)->a.compareTo(b));
    
    0 讨论(0)
  • 2020-12-03 03:36

    I wouldn't. I would use an ArrayList or a sorted collection with a Comparator. Sorting a LinkedList is about the most inefficient procedure I can think of.

    0 讨论(0)
  • 2020-12-03 03:38

    Here is the example to sort implemented linked list in java without using any standard java libraries.

    package SelFrDemo;
    
    class NodeeSort {
        Object value;
        NodeeSort next;
    
        NodeeSort(Object val) {
            value = val;
            next = null;
    
        }
    
        public Object getValue() {
            return value;
        }
    
        public void setValue(Object value) {
            this.value = value;
        }
    
        public NodeeSort getNext() {
            return next;
        }
    
        public void setNext(NodeeSort next) {
            this.next = next;
        }
    
    }
    
    public class SortLinkList {
        NodeeSort head;
        int size = 0;
    
        NodeeSort add(Object val) {
            // TODO Auto-generated method stub
            if (head == null) {
                NodeeSort nodee = new NodeeSort(val);
                head = nodee;
                size++;
                return head;
            }
            NodeeSort temp = head;
    
            while (temp.next != null) {
                temp = temp.next;
            }
    
            NodeeSort newNode = new NodeeSort(val);
            temp.setNext(newNode);
            newNode.setNext(null);
            size++;
            return head;
        }
    
        NodeeSort sort(NodeeSort nodeSort) {
    
            for (int i = size - 1; i >= 1; i--) {
                NodeeSort finalval = nodeSort;
                NodeeSort tempNode = nodeSort;
    
                for (int j = 0; j < i; j++) {
    
                    int val1 = (int) nodeSort.value;
                    NodeeSort nextnode = nodeSort.next;
                    int val2 = (int) nextnode.value;
                    if (val1 > val2) {
    
                        if (nodeSort.next.next != null) {
                            NodeeSort CurrentNext = nodeSort.next.next;
                            nextnode.next = nodeSort;
                            nextnode.next.next = CurrentNext;
                            if (j == 0) {
                                finalval = nextnode;
                            } else
                                nodeSort = nextnode;
    
                            for (int l = 1; l < j; l++) {
                                tempNode = tempNode.next;
                            }
    
                            if (j != 0) {
                                tempNode.next = nextnode;
    
                                nodeSort = tempNode;
                            }
                        } else if (nodeSort.next.next == null) {
                            nextnode.next = nodeSort;
                            nextnode.next.next = null;
                            for (int l = 1; l < j; l++) {
                                tempNode = tempNode.next;
                            }
                            tempNode.next = nextnode;
                            nextnode = tempNode;
                            nodeSort = tempNode;
    
                        }
    
                    } else
                        nodeSort = tempNode;
                    nodeSort = finalval;
                    tempNode = nodeSort;
                    for (int k = 0; k <= j && j < i - 1; k++) {
                        nodeSort = nodeSort.next;
                    }
    
                }
    
            }
            return nodeSort;
    
        }
    
        public static void main(String[] args) {
            SortLinkList objsort = new SortLinkList();
            NodeeSort nl1 = objsort.add(9);
            NodeeSort nl2 = objsort.add(71);
            NodeeSort nl3 = objsort.add(6);
            NodeeSort nl4 = objsort.add(81);
            NodeeSort nl5 = objsort.add(2);
    
            NodeeSort NodeSort = nl5;
    
            NodeeSort finalsort = objsort.sort(NodeSort);
            while (finalsort != null) {
                System.out.println(finalsort.getValue());
                finalsort = finalsort.getNext();
            }
    
        }
    }
    
    0 讨论(0)
  • 2020-12-03 03:42

    If you'd like to know how to sort a linked list without using standard Java libraries, I'd suggest looking at different algorithms yourself. Examples here show how to implement an insertion sort, another StackOverflow post shows a merge sort, and ehow even gives some examples on how to create a custom compare function in case you want to further customize your sort.

    0 讨论(0)
提交回复
热议问题