想利用平衡二叉树的话,可以直接用Java的Treeset/Treemap接口,具体说明可看下面的两个链接:
https://www.liaoxuefeng.com/wiki/1252599548343744/1265117109276544
https://blog.csdn.net/bingxuesiyang/article/details/89228785?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.baidujs&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.baidujs
----------------------------------------------3.27更新-------------------------------------------
package Knowledgement;
import java.awt.RenderingHints.Key;
import java.util.*;
/*本节描述的是Treeset和Treemap
* 两者都是有序的集合,其中Treeset继承的是Treeset接口,只能保存一个数值,而Treemap继承的是Map接口,可以存储两个数Key和Value
* 其中只有Key是有序的。两者的有序性的底层实现都是通过红黑树,红黑树即是松弛版的平衡二叉树,平衡二叉树即可以O(logN)的范围内快速查找值
* 知识点:
* (1) Vector,LinkedList的排序可以通过Collectios.sort(a,[cmp])来实现,数组的则是
* Arrays.sort(a,[cmp])
* (2)Treemap实现了Map接口,Hashmap是无序的,而Treemap存储的数据是会按照Key的顺序进行排序,所以如果想改写排序器的话,要靠key是什么类型
* (3)Vector 对Array的相互转换
* vector->array: Vector<Integer> vec=new Vector<>();int []temp=vec.toArray(new int [vec.size])
* array->vector: 利用for循环遍历即可。vec.add
*/
public class treesetNtreemap {
static Comparator<Integer>cmp=new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
return b-a;//降序
}
};
public static void main(String []args) {
Map<Integer,String> newmap=new TreeMap<>();
newmap.put(1,"orange");
newmap.put(2, "apple");
newmap.put(3, "banana");
for(Integer k:newmap.keySet()) {
System.out.println(k);
}
Map<Integer,String> newmap2=new TreeMap<>(cmp);
newmap2.put(1,"orange");
newmap2.put(2, "apple");
newmap2.put(3, "banana");
for(Integer k:newmap2.keySet()) {
System.out.println(k);
}
TreeSet<Integer> newtreeset=new TreeSet<>(cmp);
newtreeset.add(3);
newtreeset.add(4);
newtreeset.add(8);
for(Integer i:newtreeset) {
System.out.println(i);
}
}
}