CodeGym /Blog Jawa /Acak /Koleksi Java sort()
John Squirrels
tingkat
San Francisco

Koleksi Java sort()

Diterbitake ing grup
Salah sawijining fungsi sing paling umum sing kita butuhake minangka pangembang sing ngurusi data yaiku ngurutake - kanthi bisa ngurutake data, kita bisa ngoptimalake algoritma supaya bisa mlaku luwih cepet, lan nemokake data sing dibutuhake sajrone sawetara wektu. bakal njupuk kanggo digunakake. Ing wulangan dina iki, kita bakal ngomong babagan Java Collections sort (). Minangka eksperimen pamikiran cepet: mbayangno sampeyan nggoleki jeneng liwat daptar tugas universitas. Bisa uga ana puluhan ewu siswa ing sekolah iki. Yen daptar tugas sing diwenehake ora miturut abjad, sampeyan kudu mbukak saben kaca lan mriksa kanthi teliti kanggo mesthekake yen sampeyan ora ngliwati jeneng siji ing ngendi wae, nganti sampeyan nemokake jeneng sing digoleki. Ing sisih liya, yen daptar tugas digawe miturut abjad, ora mung sampeyan kudu kurang teliti ing panelusuran, nanging sampeyan bisa kanthi gampang mlumpat menyang bagean ing daptar tugas karo huruf pisanan padha, lan terus mlumpat watara kaca ing kabisat amba nganti sampeyan nampa marang wong sing padha looking for. Data liyane sing sampeyan gunakake, luwih penting sampeyan nggunakake kanthi efektif lan efisien. Ing artikel iki, kita bakal ngrembug babagan cara ngurutake implementasine List ing Jawa (kalebu ArrayList) nggunakake metode Koleksi Koleksi.

Cara Ngurutake ArrayList ing Jawa nggunakake metode Java Collections sort

Ayo dadi pirembagan bab cara Java Collections.sort. Paket java.util ngemot akeh utilitas lan paket migunani sing asring digunakake dening pangembang, kalebu ArrayList. Upaminipun sampeyan duwe program prasaja ing ngisor iki:

import java.util.*;
import java.io.*;
class Main{
     public static void main(String[] args){
          List<String> colors = new ArrayList<String>();
          colors.add("Red    ");
          colors.add("Orange");
          colors.add("Green");
          colors.add("Blue");
    }
}
Sampeyan pengin bisa nyithak dhaptar warna, nanging kanthi urutan abjad. Kepiye carane sampeyan bisa nindakake iki? Nggunakake java.util.Collections, ngurutake gampang kaya siji-liner:

Collections.sort(colors);
Ta-da! Dhaptar warna sampeyan saiki wis diurutake ing papan. Yen sampeyan bakal nyithak dhaptar kasebut, kayata:

System.out.println(colors);
Banjur sampeyan bakal entuk output ing ngisor iki:

[Blue, Green, Orange, Red]
Carane gampang iku?! Iku bakal dadi gampang kanggo nggunakake Collections.sort () kanggo ngurutake munggah menyang dhaftar Integers, Floats, utawa jinis data prasaja liyane babagan iki. Nanging apa yen sampeyan pengin ngurutake ing urutan mudhun? Mesthine ana kasus sing bisa dingerteni - bayangake sampeyan duwe dhaptar skor tes kanggo kelas tartamtu, lan sampeyan pengin ngerti sapa siswa sing paling dhuwur. Luwih becik ngurutake dhaptar kanthi urutan mudhun (skor paling dhuwur dhisik), supaya jawaban sing sampeyan goleki ana ing ndhuwur. Matur nuwun sanget, Collections.sort () ditimpa karo parameter 2nd opsional, sing ngidini sampeyan nindakake iki:

sort(List l, Comparator c)
Nanging apa sing komparator? Ya, komparator mung minangka fungsi sing mbandhingake rong input lan ngasilake nomer sing nuduhake input sing luwih dhisik. Yen sampeyan ngurutake ArrayList jinis data primitif, banjur Java Collections wis menehi sampeyan komparator reverseOrder (). Bisa diarani kaya mangkene:

Collections.sort(colors, Collections.reverseOrder());
Saiki, werna wis diurutake ing panggonane supaya yen dicithak, sampeyan bakal entuk output ing ngisor iki:

[Red, Orange, Green, Blue]

Cara nggunakake Koleksi kanggo ngurutake jinis data non-primitif ing Jawa

Supaya adoh, sampeyan wis weruh sing ngurutake ArrayLists strings utawa int ing Jawa nggunakake Collections.sort () cara gampang minangka siji baris kode. Nanging asring, ArrayLists sampeyan bakal nyimpen jinis data non-primitif. Nalika sampeyan nggarap data sing nduweni atribut sing luwih rumit, sampeyan pengin nulis kelas kanggo makili obyek kasebut lan kepiye dibandhingake karo saben liyane nggunakake atribut kasebut. Kanggo njelajah conto iki, ayo deleng maneh conto ngurutake dhaptar warna, nanging wektu iki, tinimbang ngurutake Strings, kita bakal ngurutake obyek Warna. Kelas Warna dhasar kita bisa uga katon kaya iki:

public class Color{
	private int r;
	private int g;
	private int b;
	private String name;

	Color(String name, int red, int green, int blue){
   	this.name = name;
    	this.r = red;
   	this.g = green;
   	this.b = blue;
	}
}
Kanggo nggawe kelas Warna kompatibel karo Collections.sort (), supaya Koleksi bisa ngerti carane mbandhingake lan ngurutake obyek Warna, kita kudu nggawe rong modifikasi cilik:
  1. nggawe Warna minangka obyek sing bisa dibandhingke (tambahake implementasine Comparable<Object>)
  2. ngganti metode compareTo ing kelas (override public int compareTo(Object o))
Kanthi modifikasi iki, kelas kita saiki katon kaya iki:

public class Color implements Comparable<Object>{
	private int r;
	private int g;
	private int b;
	private String name;

	Color(int red int green, int blue, String name){
    	this.r = red;
   	this.g = green;
   	this.b = blue;
   	this.name = name;
	}

	@Override
	public int compareTo(Object o) {
    	Color c = (Color) o;
    	return this.name.compareTo(c.name);
	}
}
Elinga yen metode compareTo Color mung nelpon metode compareTo String; ngurutake bakal ditindakake miturut abjad. Yen kita wanted kanggo Ngurutake dening Nilai abang ing urutan munggah, contone, kita bisa ngganti statement bali karo bali this.r - cr; (yen kita wanted kanggo Ngurutake dening Nilai ijo ing urutan mudhun, iku bakal bali cg - this.g;). Saiki, yen kita nelpon

Collections.sort(colors);
ing ArrayList of Colors tinimbang mung Strings, bakal bisa amarga Collections ngerti carane mbandhingake obyek Warna. Yen sampeyan ora pengin nggawe obyek ngleksanakake Comparable<Object>, sampeyan bisa uga nulis comparator kanggo kelas, lan pass menyang 2-parameter Collections.sort () cara. A comparator overrides cara public int mbandhingaké (Obyek siji, Obyek loro), lan Collections.sort () cara nggunakake iki kanggo mbandhingaké obyek nalika ngurutake. Conto komparator SortByName lan SortByRed ditindakake ing ngisor iki:

class SortByName implements Comparator<Color>
{
	public int compare(Color a, Color b)
	{
    	return a.name.compareTo(b.name);
	}
}

class SortByRGB implements Comparator<Color>
{
	public int compare(Color a, Color b)
	{
    	return a.r - b.r;
	}
}
Kanthi iki, sampeyan saiki bisa nelpon

Collections.sort(colors, new SortByName());
tanpa kelas Warna bener ngleksanakake Comparable, lan isih bakal bisa. Kadhangkala, sampeyan bakal weruh iki rampung ing baris, nggunakake fungsi lambda. Fungsi lambda sejatine minangka fungsi tanpa jeneng sing bisa ditemtokake ing baris kode, sing diarani. Iku migunani nalika sampeyan mung kudu nelpon fungsi kanggo siji Kayata tartamtu lan ora pengin netepake kabèh fungsi kapisah ing panggenan liya. Komparator SortByName bisa ditetepake ing baris, nggunakake fungsi lambda, kaya iki:

Collections.sort(colors, (a, b)-> {
          return a.name.compareTo(b.name)});
Minangka sampeyan bisa uga wis guessed, (a, b) nggantosi paramèter saka fungsi lambda (loro obyek kanggo dibandhingake). Ing -> nuduhake yen ing ngisor iki minangka definisi fungsi lambda. Semono uga! Sampeyan saiki wis ndeleng cara paling populer kanggo ngurutake ArrayLists ing Jawa nggunakake paket Koleksi.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION