Салыстырмалы интерфейс негізінен реттелетін нысандардың массивтерін (немесе тізімдерін) сұрыптау үшін қолданылады.
Салыстырмалы интерфейсті іске асыратын нысандардың тізімі (және массивтер) автоматты түрде Collections.sort (және Arrays.sort) бойынша сұрыпталуы мүмкін. Теңшелетін нысандардың нысандарын қалай сұрыптауды көрмес бұрын, бұрыннан іске асырылатын массивтер мен Wrapper элементтерін сұрыптау әдістерін көруге мүмкіндік береді.
Мысал: Аралық және Wrapper сыныбын сұрыптау
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class Demo { public static void main (String [] арг) { / * * Integer class салыстырады * Интерфейс, біз сұрыптау әдісін пайдалана аламыз * / int [] arr = {11,55,22,089}; Arrays.sort (arr); System.out.print («Sorted Int Array:»); System.out.println (Arrays.toString (arr)); / * * String сыныбы салыстыруды жүзеге асырады * Интерфейс, біз сұрыптау әдісін пайдалана аламыз * / System.out.print («Sorted String Array:»); String [] names = {«Steve», «Ajeet», «Kyle»}; Arrays.sort (атаулар); System.out.println (Arrays.toString (атаулар)); / * * String сыныбы салыстыруды жүзеге асырады * Интерфейс, біз сұрыптау әдісін пайдалана аламыз * / System.out.print («Сұрыпталған тізім:»); Тізімді жемістер = жаңа ArrayList (); fruits.add («Апельсин»); fruits.add («Banana»); fruits.add («Apple»); fruits.add («Guava»); fruits.add («Жүзім»); Collections.sort (жемістер); for (String s: fruit) System.out.print (s + «,»); } }
Шығару:
Сұрыпталған Int Array: [0, 11, 22, 55, 89] Сұрыпталған массив массиві: [Ajeet, Kyle, Steve] Сұрыптау тізімі: Apple, Banana, Grapes, Guava, Orange,
Жоғарыда келтірілген мысалда, Салыстырмалы интерфейсті жүзеге асыратын массивтерді және нысандардың тізімін қарап шығу қаншалықты оңай екенін көрдіңіз, тек Collections.sort (және Arrays.sort) деп атауыңыз керек.
Алайда, пайдаланушы классының нысандарын сұрыптағыңыз келсе, біздің теңшелетін сыныптағы Салыстырмалы интерфейсті іске асыруыңыз керек.
Бұл интерфейстің тек бір әдісі бар:
public дерексіз int compareTo (T obj)
Бұл әдіс дерексіз болғандықтан, Салыстырмалы интерфейсті жүзеге асырсаңыз, бұл әдісті өзіңіздің сыныпта іске асырыңыз.
Мұны жақсы түсіну үшін мысал келтірейік:
Мысал: Салыстырмалы интерфейсті орындау арқылы теңшелетін нысанды сұрыптау
Көріп отырғанымдай, мен осы сыныптың нысандарын сұрыптағым келеді, себебі менің Author
сыныбындағы Салыстырмалы интерфейсті іске асырдым. CompareTo () әдісінде сұрыптау логикасын жаздым, логиканы талапқа сай жаза аласыз. Мен автордың есімдерін алдымен фамилия бойынша сұрыптағым келеді, ал егер тегі бірдей болса, онда бірінші аты болады. Егер сіз тек тегі бойынша сұрыптағыңыз келсе, онда compareTo () әдісінің бірінші жолында жеткілікті.
Автор сыныбы
қоғамдық сынақ Автор салыстырады <Автор> { String firstName; String lastName; String bookName; Автор (Бірінші жолды, Жолдың соңғы жолы, Жолақ кітабы) { this.firstName = бірінші; this.lastName = соңғы; this.bookName = кітап; } @Override / ** Бұл жерде сұрыптау үшін логиканы жазады. Бұл әдіс сұрыптау * Тегі болса, аты автоматты түрде * бірдей.* / public int compareTo (Автор au) { / ** Тегі бойынша сұрыптау. compareTo <0 болса, бұл (кілт сөз)бұл аудан аз болмақ.> Егер бұл қажет болса* Аумадан үлкенірек және 0 тең болған жағдайда. * / int last = this.lastName.compareTo (au.lastName); // Тегі болса, бірінші аты бойынша сұрыптау d соңғы == 0 қайтару керек пе? this.firstName.compareTo (au.firstName): соңғы; } }
Сұрыптау класы: SortAuthByNames
import java.util.ArrayList;import java.util.Collections; қоғамдық сынып SortAuthByNames { public static void main (Жол аралдары []) { // авторлар класының объектілерінің тізімі ArrayList <Автор> al = new ArrayList <Автор> ();al.add (жаңа автор («Генри», «Миллер», «Рак ауру тропик»)); al.add (жаңа автор («Нало», «Хопкинсон», «Қоңыр қызғылт қыз»)); al.add (жаңа автор («Франк», «Миллер», «300»)); al.add (жаңа автор («Дебора», «Хопкинсон», «Скай Бойз»)); al.add (жаңа автор («George RR», «Martin», «Ice and Fire әні»)); / ** Collections.sort () әдісін пайдаланып тізімді сұрыптау* Бұл әдісті қолдануға болады, себебі біз іске асырдық * Пайдаланушы анықтайтын интерфейс сыныпты Авторды анықтайды* / Collections.sort (al); (Авторы үшін: al) { System.out.println (str.firstName + «» + str.lastName + «» + «Book:» + str.bookName); } } }
Шығару:
Дебор Хопкинсон Кітап: Sky Boys Нало Хопкинсон Кітап: Қоңыр қызыл сақина Джордж Р.Р. Мартин Кітап: Мұз және Өрттің әні Фрэнк Миллер Кітап: 300 Генри Миллер Кітап: Тропикалық қатерлі ісік
Ескерту: compareTo () әдісін жазу керек, егер бұл (егер мен осы кілтсөзге сілтеме жасасам) берілген нысаннан аз болса, оң болса, оң және нөлге тең болса, ол теріс мәнді қайтаруы керек.
Сіз бұл логиканы не үшін жазғанымды білмеуіңіз мүмкін? Аты мен тегі жолдар болғандықтан, мен дәл осы жолмен салыстыратын string () жолының compareTo () әдісін шақырдым.
Алайда салыстырып жатқан заттар int сияқты басқа типте болса, онда келесідей логиканы жаза аласыз:
Қызметкер класының объектісі (empId, empName, empAge) және объектілерді empAge
сұрыптағымыз келеді.
public int compareTo (Қызметкер e) { егер (this.empAge == e.empAge) 0 қайтару; else if (this.empAge> e.empAge) 1 қайтару; басқа қайтару -1; }
немесе
public int compareTo (Қызметкер e) { қайтару this.empAge> e.empAge? 1: this.empAge <e.empAge? -1: 0; }
Пікір қалдыру Жауапты