J'ai besoin de trier une liste chaînée par ordre alphabétique. J'ai une liste chaînée remplie de noms de passagers et j'ai besoin que ce nom soit trié par ordre alphabétique. Comment ferait-on cela? Quelqu'un a des références ou des vidéos?
Vous pouvez utiliser Collections#sort
pour trier les choses par ordre alphabétique.
Pour trier les chaînes par ordre alphabétique, vous devrez utiliser une variable Collator
, telle que:
LinkedList<String> list = new LinkedList<String>();
list.add("abc");
list.add("Bcd");
list.add("aAb");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Collator.getInstance().compare(o1, o2);
}
});
Parce que si vous appelez simplement Collections.sort(list)
, vous aurez des problèmes avec les chaînes contenant des caractères majuscules.
Par exemple, dans le code que j'ai collé, après le tri, la liste sera: [aAb, abc, Bcd]
mais si vous appelez simplement Collections.sort(list);
, vous obtiendrez: [Bcd, aAb, abc]
.
Remarque : Lorsque vous utilisez une Collator
, vous pouvez spécifier les paramètres régionaux Collator.getInstance(Locale.ENGLISH)
, ce qui est généralement très pratique.
En Java8, vous n'avez plus besoin d'utiliser la méthode Collections.sort car LinkedList hérite du tri de méthode de Java.util.List. Adaptez donc la réponse de Fido à 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);
}
});
Références:
http://docs.Oracle.com/javase/8/docs/api/Java/util/LinkedList.html
http://docs.Oracle.com/javase/7/docs/api/Java/util/List.html
Voici l'exemple pour trier la liste chaînée implémentée en Java sans utiliser aucune bibliothèque Java standard.
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();
}
}
}
LinkedList<String>list = new LinkedList<String>();
list.add("abc");
list.add("Bcd");
list.add("aAb");
list.sort(String::compareToIgnoreCase);
Une autre option serait d’utiliser des expressions lambda:
list.sort((o1, o2) -> o1.compareToIgnoreCase(o2));
Node mergeSort(Node head) {
if(head == null || head.next == null) {
return head;
}
Node middle = middleElement(head);
Node nextofMiddle = middle.next;
middle.next = null;
Node left = mergeSort(head);
Node right = mergeSort(nextofMiddle);
Node sortdList = merge(left, right);
return sortdList;
}
Node merge(Node left, Node right) {
if(left == null) {
return right;
}
if(right == null) {
return left;
}
Node temp = null;
if(left.data < right.data) {
temp = left;
temp.next = merge(left.next, right);
} else {
temp = right;
temp.next = merge(left, right.next);
}
return temp;
}
Node middleElement(Node head) {
Node slow = head;
Node fast = head;
while (fast != null && fast.next != null && fast.next.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
Je ne voudrais pas J'utiliserais une liste de tableaux ou une collection triée avec un comparateur. Trier une liste de liens est la procédure la plus inefficace à laquelle je puisse penser.
Si vous souhaitez savoir comment trier une liste chaînée sans utiliser de bibliothèques Java standard, nous vous conseillons d’examiner vous-même différents algorithmes. Exemples ici montre comment implémenter un tri par insertion, un autre article de StackOverflow montre un fusionner le tri , et ehow même donne quelques exemples sur la manière de créer une fonction de comparaison personnalisée au cas où vous souhaiteriez approfondir personnaliser votre tri.
Vous pouvez le faire avec une expression Java 8 lambda:
LinkedList<String> list=new LinkedList<String>();
list.add("bgh");
list.add("asd");
list.add("new");
//lambda expression
list.sort((a,b)->a.compareTo(b));