Day11_50_SortedMap集合

SortedMap集合

  • 二叉查找树二叉平衡树

    • 二叉查找树是一种有序的树,所有的左孩子的value值都是小于叶子结点的value值的,所有右孩子的value值都是大于叶子结点的。这样做的好处在于:如果需要按照键值查找数据元素,只要比较当前结点的value值即可(小
      于当前结点value值的,往左走,否则往右走),这种方式,每次可以减少一半的操作,所以效率比较高。

    • 比二叉查找树更进一步的是二叉平衡树,二叉平衡树除了保证有序外,还能够保持每个节点左右子树的高度相差不超过1。常见的平衡树有AVL树,Treap,红黑树,伸展树,等等。

    • 红黑树是在每个节点上增加一个存储位表示节点的颜色,可以是RED或BLACK。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。

    • 在TreeMap中,就是使用了红黑树。(HashMap在一个数组元素位里的链表长度过长时,也会把链表转为红黑树来存储数据。

  • SortedMap是一个接口,TreeMap是 SortedMap下的实现类, SortedMap是无序不可重复的,但可以对Key部分自动排序。

  • SortedMap集合实现自动排序需要Key(类)实现Comparable接口,或者单独写一个比较器。

  • SortedMap集合接口 相比 Map接口,主要增加了 comparator() 等比较相关方法,在定义中指出返回的 Set 应该是有序的。

  • 代码实例

    - 主类
    
        ```
          import java.util.Iterator;
          import java.util.Set;
          import java.util.SortedMap;
          import java.util.TreeMap;
    
          public class SortedMapTest01 {
              public static void main(String[] args) {
    
                  // 创建SortedMap集合
                  SortedMap produceMap=new TreeMap(new ProductComporator());   //传入比较器
    
                  // 创建商品对象
                  Product product1=new Product("ZARA 新款 男装 慢跑式腰身亚麻裤 08574423707",299);
                  Product product2=new Product("CONVERSE匡威官方1970s米白色高帮经典帆布鞋三星标情侣款162053C",599);
                  Product product3=new Product("New Balance多边形金属眼镜框防辐射近视眼镜架女可配镜片",432);
    
                  // 将创建的对象添加到集合中
                  produceMap.put(product1,2); //2 会自动装箱
                  produceMap.put(product2,8);
                  produceMap.put(product3,6);
    
                  //查看集合的大小
                  int size=produceMap.size();
                  System.out.println(size);
    
    
                  // 遍历集合
    
                  Set keySet=produceMap.keySet();
                  Iterator iterator=keySet.iterator();
                  while(iterator.hasNext()){
                      Object keys=iterator.next();
                      Object values=produceMap.get(keys);
                      System.out.println(keys+"------->"+values+"件");
                  }
    
            }
     }
    
  • 产品类 实现了Comparable接口

    
    public class Product implements Comparable{ 
    
         //属性
         String  name ;
         double price;
    
         //构造方法
         Product(){}
         Product(String name ,double price){
             this.name=name;
             this.price=price;
         }
    
    
        //重写toString()方法
         public String toString(){
             return "Product[商品名:"+name+" 商品价格:"+price+"]";
         }
    
    
    
       // 实现Comparable接口,重写 compareTo()方法,按照商品价格排序
    
         @Override
         public int compareTo(Object o) {
         double price1=this.price;
         double price2=((Product)o).price;
         if(price1>price2){
             return  1;
         }else if(price1<price2){
             return -1;
         }else{
             return 0;
         }
     }
     
    

}

 - 单独写一个比较器

 ```

      import java.util.Comparator;

      //Product类的比较器
      public class ProductComporator implements Comparator {

          @Override
          public int compare(Object o1, Object o2) {
              double price1=((Product)o1).price;
              double price2=((Product)o2).price;
              if(price1==price2){
                  return  0;
              }else if(price1<price2){
                  return 1;
              }else{
                  return -1;
              }

          }
      }
posted @ 2021-04-05 12:11  失昼  阅读(78)  评论(0)    收藏  举报