1.java的接口接口Comparable和Comparator区别
2.ComparableåComparatorçåºå«
3.TreeMap就这么简单源码剖析
java的Comparable和Comparator区别
Java编程时,有时会用到`Comparable`和`Comparator`来实现数据的源码源码排序。它们都有比较的接口接口用途,但有明显的源码源码差异,我们先从基础和使用场景开始探讨。接口接口
### 基础对比
`Comparable`与`Comparator`都属于接口类型,源码源码快马公式源码但前者属于`java.lang`包下,接口接口后者则位于`java.util`包中。源码源码
### 方法对比
`Comparable`提供了`compareTo`方法,接口接口用以比较对象之间的源码源码大小关系。而`Comparator`提供了`compare`方法,接口接口通常用于对比对象进行排序。源码源码`compareTo`和`compare`方法的接口接口基本用途相似,但后者更通用,源码源码可以为不同类型的接口接口对象提供比较逻辑。
### 内部与外部比较器
`Comparable`可以被视为一个对象内部的比较机制,它主要用于实现数据类型的如何查看txt源码自然排序规则。反之,`Comparator`作为外部比较器,通常用于更复杂或特定的比较逻辑,如排序算法。
### 实现与使用场景
使用`Comparable`时,通常需将实现此接口的类与排序方法结合,直接使用该类创建的实例来进行比较。而借助`Comparator`,充电线收钱源码可以灵活处理不同类型的数据或定制化的比较逻辑,例如在`Arrays.sort`或`Collections.sort`方法中传入`Comparator`对象。
在代码设计中,选择`Comparable`还是`Comparator`取决于比较规则的固定性和灵活性需要。若规则易变动,推荐使用`Comparator`,因为它提供独立的比较逻辑,简化了维护和扩展。txt+听书++源码如`String`和`Integer`等类自带的比较规则比较稳定且符合自然顺序,故往往选择实现`Comparable`。
深入源码分析,你将了解到接口的具体实现逻辑和行为,这对理解Java编程的核心逻辑至关重要。
ComparableåComparatorçåºå«
comparatoræ¥å£ä¸Comparableæ¥å£çåºå«
1. Comparator å Comparable ç¸åçå°æ¹
ä»ä»¬é½æ¯javaçä¸ä¸ªæ¥å£, 并ä¸æ¯ç¨æ¥å¯¹èªå®ä¹çclassæ¯è¾å¤§å°ç,
ä»ä¹æ¯èªå®ä¹class: å¦ public class Person{ String name; int age }.
å½æ们æè¿ä¹ä¸ä¸ªpersonList,éé¢å å«äºperson1, person2, persion3....., æ们ç¨Collections.sort( personList ), æ¯å¾ä¸å°é¢æçç»æç. è¿æ¶è¯å®æ人è¦é®, é£ä¸ºä»ä¹å¯ä»¥æåºä¸ä¸ªå符串listå¢:
å¦ StringList{ "hello1" , "hello3" , "hello2"}, Collections.sort( stringList ) è½å¤å¾å°æ£ç¡®çæåº, é£æ¯å 为 String è¿ä¸ªå¯¹è±¡å·²ç»å¸®æ们å®ç°äº Comparableæ¥å£ , æ以æ们ç Person å¦ææ³æåº, ä¹è¦å®ç°ä¸ä¸ªæ¯è¾å¨ã
2. Comparator å Comparable çåºå«
Comparable
Comparable å®ä¹å¨ Personç±»çå é¨:
public class Persion implements Comparable { ..æ¯è¾Personç大å°..},
å 为已ç»å®ç°äºæ¯è¾å¨,é£ä¹æ们çPersonç°å¨æ¯ä¸ä¸ªå¯ä»¥æ¯è¾å¤§å°ç对象äº,å®çæ¯è¾åè½åStringå®å ¨ä¸æ ·,å¯ä»¥éæ¶éå°çæ¿æ¥æ¯è¾å¤§å°,å 为Personç°å¨èªèº«å°±æ¯æ大å°ä¹åçãCollections.sort(personList)å¯ä»¥å¾å°æ£ç¡®çç»æã
Comparator
Comparator æ¯å®ä¹å¨Personçå¤é¨ç, æ¤æ¶æ们çPersonç±»çç»æä¸éè¦æä»»ä½åå,å¦
public class Person{ String name; int age },
ç¶åæ们å¦å¤å®ä¹ä¸ä¸ªæ¯è¾å¨:
public PersonComparator implements Comparator() { ..æ¯è¾Personç大å°..},
å¨PersonComparatoréé¢å®ç°äºæä¹æ¯è¾ä¸¤ä¸ªPersonç大å°. æ以,ç¨è¿ç§æ¹æ³,å½æ们è¦å¯¹ä¸ä¸ª personListè¿è¡æåºçæ¶å, æ们é¤äºäºè¦ä¼ épersonListè¿å», è¿éè¦æPersonComparatorä¼ éè¿å»,å 为æä¹æ¯è¾Personç大å°æ¯å¨PersonComparatoréé¢å®ç°ç, å¦:
Collections.sort( personList , new PersonComparator() ).
3. Comparator å Comparable çå®ä¾
Comparable:
å®ç°Comparableæ¥å£è¦è¦çcompareToæ¹æ³, å¨compareToæ¹æ³éé¢å®ç°æ¯è¾ï¼
public class Person implements Comparable {
String name;
int age
public int compareTo(Person another) {
int i = 0;
i = name.compareTo(another.name); // 使ç¨å符串çæ¯è¾
if(i == 0) { // å¦æååä¸æ ·,æ¯è¾å¹´é¾, è¿åæ¯è¾å¹´é¾ç»æ
return age - another.age;
} else {
return i; // ååä¸ä¸æ ·, è¿åæ¯è¾ååçç»æ.
}
}
}
è¿æ¶æ们å¯ä»¥ç´æ¥ç¨ Collections.sort( personList ) å¯¹å ¶æåºäº.
Comparator:
å®ç°Comparatoréè¦è¦ç compare æ¹æ³ï¼
public class Person{
String name;
int age
}
class PersonComparator implements Comparator {
public int compare(Person one, Person another) {
int i = 0;
i = one.name.compareTo(another.name); // 使ç¨å符串çæ¯è¾
if(i == 0) { // å¦æååä¸æ ·,æ¯è¾å¹´é¾,è¿åæ¯è¾å¹´é¾ç»æ
return one.age - another.age;
} else {
return i; // ååä¸ä¸æ ·, è¿åæ¯è¾ååçç»æ.
}
}
}
Collections.sort( personList , new PersonComparator()) å¯ä»¥å¯¹å ¶æåº
4:æ»ç»
两ç§æ¹æ³åæä¼å£, ç¨Comparable ç®å, åªè¦å®ç°Comparable æ¥å£ç对象ç´æ¥å°±æ为ä¸ä¸ªå¯ä»¥æ¯è¾ç对象,ä½æ¯éè¦ä¿®æ¹æºä»£ç , ç¨Comparator ç好å¤æ¯ä¸éè¦ä¿®æ¹æºä»£ç , èæ¯å¦å¤å®ç°ä¸ä¸ªæ¯è¾å¨, å½æ个èªå®ä¹ç对象éè¦ä½æ¯è¾çæ¶å,ææ¯è¾å¨å对象ä¸èµ·ä¼ éè¿å»å°±å¯ä»¥æ¯å¤§å°äº, 并ä¸å¨Comparator éé¢ç¨æ·å¯ä»¥èªå·±å®ç°å¤æçå¯ä»¥éç¨çé»è¾,ä½¿å ¶å¯ä»¥å¹é ä¸äºæ¯è¾ç®åç对象,é£æ ·å°±å¯ä»¥èçå¾å¤éå¤å³å¨äºã
TreeMap就这么简单源码剖析
本文主要讲解TreeMap的实现原理,使用的是JDK1.8版本。
在开始之前,编程源码如何看建议读者具备一定的数据结构基础知识。
TreeMap的实现主要通过红黑树和比较器Comparator来保证元素的有序性。如果构造时传入了Comparator对象,则使用Comparator的compare方法进行元素比较。否则,使用Comparable接口的compareTo方法实现自然排序。
TreeMap的核心方法有put、get和remove等。put方法用于插入元素,同时会根据Comparator或Comparable对元素进行排序。get方法用于查找指定键的值,remove方法则用于删除指定键的元素。
遍历TreeMap通常使用EntryIterator类,该类提供了按顺序遍历元素的方法。TreeMap的遍历过程基于红黑树的结构,通过查找、比较和调整节点来实现。
总之,TreeMap是一个基于红黑树的有序映射集合,其主要特性包括元素的有序性、高效的时间复杂度以及灵活的比较方式。在设计和实现需要有序映射的数据结构时,TreeMap是一个不错的选择。
如有错误或疑问,欢迎在评论区指出,让我们共同进步。
请注意,上述HTML代码片段经过了精简和格式调整,保留了原文的主要内容和结构,但为了适应HTML格式并删除了不相关的内容(如标题、关注转发等),在字数控制上也有所调整。