JavaRush /Java Blogu /Random-AZ /Java-da çeşidləməni necə düzgün etmək olar
eGarmin
Səviyyə

Java-da çeşidləməni necə düzgün etmək olar

Qrupda dərc edilmişdir
Bir çox açıq mənbəli Java layihələrinin mənbə kodunu təhlil edərək, əksər tərtibatçıların çeşidləməni yalnız iki fərqli şəkildə həyata keçirdiklərini gördüm. Onlardan biri və ya sort()sinif metodunun istifadəsinə , digəri isə və kimi öz-özünə çeşidlənən məlumat strukturlarının istifadəsinə əsaslanır . CollectionsArraysTreeMapTreeSetJava-da çeşidləməni necə düzgün etmək olar - 1

Sort() metodundan istifadə etməklə

Kolleksiyanı çeşidləmək lazımdırsa, istifadə edin Collections.sort().
// Collections.sort(…)
List<ObjectName> list = new ArrayList<ObjectName>();
Collections.sort(list, new Comparator<ObjectName>() {
	public int compare(ObjectName o1, ObjectName o2) {
		return o1.toString().compareTo(o2.toString());
	}
});
Massivi çeşidləmək lazımdırsa, istifadə edin Arrays.sort().
// Arrays.sort(…)
ObjectName[] arr = new ObjectName[10];
Arrays.sort(arr, new Comparator<ObjectName>() {
	public int compare(ObjectName o1, ObjectName o2) {
		return o1.toString().compareTo(o2.toString());
	}
});
sort()Kolleksiya və ya massiv artıq dəyərlərlə doldurulduqda üsul çox rahatdır.

Öz-özünə çeşidlənən məlumat strukturlarından istifadə

ListSiyahını çeşidləmək ( ) və ya ( ) təyin etmək lazımdırsa Set, TreeSetçeşidləmə strukturundan istifadə edin.
// TreeSet
Set<ObjectName> sortedSet = new TreeSet<ObjectName>(new Comparator<ObjectName>() {
	public int compare(ObjectName o1, ObjectName o2) {
		return o1.toString().compareTo(o2.toString());
	}
});
sortedSet.addAll(unsortedSet);
Əgər lüğəti çeşidləmək lazımdırsa ( Map), TreeMapçeşidləmə strukturundan istifadə edin. TreeMapdüyməsinə ( ) görə sıralanır key.
// TreeMap – использующий String ключи и компаратор (Comparator) CASE_INSENSITIVE_ORDER,
// упорядочивающий строки (String) методом compareToIgnoreCase
Map<String, Integer> sortedMap = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
sortedMap.putAll(unsortedMap);
//TreeMap – общий случай, компаратор указывается вручную
Map<ObjectName, String> sortedMap = new TreeMap<ObjectName, String>(new Comparator<ObjectName>() {
	public int compare(ObjectName o1, ObjectName o2) {
		return o1.toString().compareTo(o2.toString());
	}
});
sortedMap.putAll(unsortedMap);
Yuxarıdakı yanaşma kolleksiyadakı elementlər üçün çoxlu sayda axtarış aparmağınız lazım olduğu hallarda çox faydalıdır. Öz-özünə çeşidlənən məlumat strukturları O(log(n))daha yaxşı effektivliyə malikdir O(n). Bu o deməkdir ki, kolleksiyadakı məlumatların miqdarı iki dəfə artdıqda, axtarış vaxtı iki dəfə deyil, sabit miqdar artır .

Problemin çeşidlənməsinə pis yanaşma

Siz hələ də proqramçıların çeşidləmə alqoritmlərini müstəqil şəkildə təsvir etdiyi nümunələri tapa bilərsiniz. Aşağıda təqdim olunan çeşidləmə kodunu nəzərdən keçirin (ikiqat massivi artan qaydada çeşidləyin ). Bu kod təkcə səmərəsiz deyil, həm də oxunmur. Və belə misallar çoxdur.
double t;
for (int i = 0; i < N; i++)
	for (int j = i + 1; j < N; j++)
		if (r[j] < r[i]) {
			t = r[i];
			r[i] = r[j];
			r[j] = t;
		}
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION