Contoh ini menunjukkan menyusun senarai tali alfanumer di Java menggunakan komparator tersuai. Kami akan menggunakan rentetan dan kaedah List
, yang membolehkan kami menentukan logik penyortiran tersuai. Kaedah terbina dalam Collections.sort()
menggunakan jenis gabungan yang sangat dioptimumkan, yang menyediakan kerumitan masa O (N log n) dalam kes-kes purata dan terburuk. Walau bagaimanapun, kecekapan sangat bergantung pada
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class AlphanumericSort { public static void main(String[] args) { List<String> strings = new ArrayList<>(); strings.add("apple1"); strings.add("apple10"); strings.add("apple2"); strings.add("banana1"); strings.add("banana20"); strings.add("banana10"); strings.add("apple"); // Sort using a custom comparator Collections.sort(strings, new AlphanumericComparator()); System.out.println("Sorted strings:"); for (String str : strings) { System.out.println(str); } } static class AlphanumericComparator implements Comparator<String> { @Override public int compare(String s1, String s2) { int i = 0; while (i < s1.length() && i < s2.length()) { char c1 = s1.charAt(i); char c2 = s2.charAt(i); if (Character.isDigit(c1) && Character.isDigit(c2)) { int num1 = 0; int num2 = 0; while (i < s1.length() && Character.isDigit(s1.charAt(i))) { num1 = num1 * 10 + (s1.charAt(i) - '0'); i++; } while (i < s2.length() && Character.isDigit(s2.charAt(i))) { num2 = num2 * 10 + (s2.charAt(i) - '0'); i++; } return Integer.compare(num1, num2); } else if (Character.isDigit(c1)) { return 1; // Digits come after letters } else if (Character.isDigit(c2)) { return -1; // Digits come after letters } else if (c1 != c2) { return c1 - c2; // Compare characters } else { i++; } } return s1.length() - s2.length(); // Compare lengths if prefixes are equal } } }
Comparator
untuk mengendalikan bahagian angka sebagai nombor, bukan rentetan. Ia perlu membandingkan bahagian abjad terlebih dahulu dan kemudian bahagian angka, memastikan pesanan yang betul. Zeros terkemuka tidak boleh menjejaskan perintah penyortiran. Atas ialah kandungan terperinci Contoh rentetan alfanumerik jenis java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!