Sobes.tech
Junior — Middle

Кадом намудҳои объектҳо иҷозат дода мешаванд, ки дар TreeSet ҷойгир шаванд?

sobes.tech AI

Ҷавоб аз AI

Дар TreeSet мумкин аст танҳо объектҳо, ки ё иҷро мекунанд интерфейси Comparable, ё барои онҳо ҳангоми эҷоди TreeSet муайян карда шудааст муқоисакор (Comparator), илова карда шаванд. Ин барои он зарур аст, ки элементҳоро метавон ба тартиб даровард, зеро TreeSet элементҳоро дар шакли ба тартиб дароварда нигоҳ медорад.

Агар объектҳо Comparable-ро иҷро накунанд ва Comparator пешниҳод нашуда бошад, дар кӯшиши илова кардани элемент, хатогии ClassCastException ба вуҷуд меояд.

Масалан:

TreeSet<String> set = new TreeSet<>(); // String `Comparable`-ро иҷро мекунад
set.add("ҷам" );
set.add("банан" );

// Барои синфи фармоишӣ:
class Person implements Comparable<Person> {
    String номи;
    public Person(String номи) { this.номи = номи; }
    @Override
    public int compareTo(Person дигар) {
        return this.номи.compareTo(друг.номи);
    }
}

TreeSet<Person> одамон = new TreeSet<>();
одамон.add(new Person("Али"));
одамон.add(new Person("Вели"));

Ё бо муқоисакор:

TreeSet<Person> одамон = new TreeSet<>(Comparator.comparing(p -> p.номи));
одамон.add(new Person("Али"));
одамон.add(new Person("Вели"));