精华内容
下载资源
问答
  • 底层是基于链表来实现的。 treeset 要求元素必须实现 comparable 接口。它的进入依据是compareTo方法是否相同。 有序(自然顺序或自定义的排序规则),不可重复。 构造时如果没有传递自定义的比较器,则使用自然...

    回忆

    • set
      • 特点: 无序,不可重复。
      • 存放:先计算hashcode,hashcode相同时再计算equals方法。所以一般会同时重写这两个
      • hashset
        • 最常用的一种set集合。
      • linkedhashset
        • 有序,不可重复。底层是基于链表来实现的。
      • treeset
        • 要求元素必须实现 comparable 接口。它的进入依据是compareTo方法是否相同。
        • 有序(自然顺序或自定义的排序规则),不可重复。
        • 构造时如果没有传递自定义的比较器,则使用自然排序
        • 如果构造时传递了自定义的比较器,则使用自定义的排序规则
        • comparator

    map

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sv83czgb-1593465614003)(imges/image-20200629090827773.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OOSA5drE-1593465614009)(imges/image-20200629091000680.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4KuvK3GZ-1593465614015)(imges/image-20200629091208615.png)]

    hashMap

    这是Map接口的最常用的实现类。

    它的key是hashSet。

    linkedHashMap

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jNPIxcQf-1593465614021)(imges/image-20200629094516070.png)]

    它的key是linkedHashSet。

    它的迭代顺序是确定的。

    treeMap

    基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwMhscFf-1593465614025)(imges/image-20200629101517645.png)]

     Map.Entry<K,V> ceilingEntry(K key) 
              返回一个键-值映射关系,它与大于等于给定键的最小键关联;如果不存在这样的键,则返回 null。 
     K ceilingKey(K key) 
              返回大于等于给定键的最小键;如果不存在这样的键,则返回 null。 
     Comparator<? super K> comparator() 
              返回对此映射中的键进行排序的比较器;如果此映射使用键的自然顺序,则返回 null。 
     NavigableSet<K> descendingKeySet() 
              返回此映射中所包含键的逆序 NavigableSet 视图。 
     NavigableMap<K,V> descendingMap() 
              返回此映射中所包含映射关系的逆序视图。 
     Map.Entry<K,V> firstEntry() 
              返回一个与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null。 
     K firstKey() 
              返回此映射中当前第一个(最低)键。 
     Map.Entry<K,V> floorEntry(K key) 
              返回一个键-值映射关系,它与小于等于给定键的最大键关联;如果不存在这样的键,则返回 null。 
     K floorKey(K key) 
              返回小于等于给定键的最大键;如果不存在这样的键,则返回 null。 
     SortedMap<K,V> headMap(K toKey) 
              返回此映射的部分视图,其键值严格小于 toKey。 
     NavigableMap<K,V> headMap(K toKey, boolean inclusive) 
              返回此映射的部分视图,其键小于(或等于,如果 inclusive 为 true)toKey。 
     Map.Entry<K,V> higherEntry(K key) 
              返回一个键-值映射关系,它与严格大于给定键的最小键关联;如果不存在这样的键,则返回 null。 
     K higherKey(K key) 
              返回严格大于给定键的最小键;如果不存在这样的键,则返回 null。 
     Map.Entry<K,V> lastEntry() 
              返回与此映射中的最大键关联的键-值映射关系;如果映射为空,则返回 null。 
     K lastKey() 
              返回映射中当前最后一个(最高)键。 
     Map.Entry<K,V> lowerEntry(K key) 
              返回一个键-值映射关系,它与严格小于给定键的最大键关联;如果不存在这样的键,则返回 null。 
     K lowerKey(K key) 
              返回严格小于给定键的最大键;如果不存在这样的键,则返回 null。 
     NavigableSet<K> navigableKeySet() 
              返回此映射中所包含键的 NavigableSet 视图。 
     Map.Entry<K,V> pollFirstEntry() 
              移除并返回与此映射中的最小键关联的键-值映射关系;如果映射为空,则返回 null。 
     Map.Entry<K,V> pollLastEntry() 
              移除并返回与此映射中的最大键关联的键-值映射关系;如果映射为空,则返回 null。 
     NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) 
              返回此映射的部分视图,其键的范围从 fromKey 到 toKey。 
     SortedMap<K,V> subMap(K fromKey, K toKey) 
              返回此映射的部分视图,其键值的范围从 fromKey(包括)到 toKey(不包括)。 
     SortedMap<K,V> tailMap(K fromKey) 
              返回此映射的部分视图,其键大于等于 fromKey。 
     NavigableMap<K,V> tailMap(K fromKey, boolean inclusive) 
              返回此映射的部分视图,其键大于(或等于,如果 inclusive 为 true)fromKey。 
    

    自己定义treeMap,存放 Student 。 和 学号的对应关系。

    实现comparable接口。

    练习遍历:

    HashMap<String,HashMap<String,String>>  结构
        	身份证号  ->  人的基本信息
    HashMap<String,ArrayList<String>> 结构
        	人 -> 朋友列表
    ArrayList<HashMap<String,String>> 结构
        	一群人的基本信息
        
        
    //思考一下,在什么场景下对应上面的什么结构。
    

    hashTable(了解)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ibb8grRk-1593465614028)(imges/image-20200629143856878.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RrSjXK3B-1593465614029)(imges/image-20200629143911408.png)]

    线程安全,效率低。

    集合工具类Collections

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Mln2fAP-1593465614030)(imges/image-20200629144125174.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2TmVsoZ-1593465614031)(imges/image-20200629144142775.png)]

    <T> boolean 
     addAll(Collection<? super T> c, T... elements) 
              将所有指定元素添加到指定 collection 中。 
    static <T> int 
     binarySearch(List<? extends Comparable<? super T>> list, T key) 
              使用二分搜索法搜索指定列表,以获得指定对象。 
    static <T> void 
     copy(List<? super T> dest, List<? extends T> src) 
              将所有元素从一个列表复制到另一个列表。 
    static boolean disjoint(Collection<?> c1, Collection<?> c2) 
              如果两个指定 collection 中没有相同的元素,则返回 truestatic <T> List<T> 
     emptyList() 
              返回空的列表(不可变的)。 
    static <K,V> Map<K,V> 
     emptyMap() 
              返回空的映射(不可变的)。 
    static <T> Set<T> 
     emptySet() 
              返回空的 set(不可变的)。 
    static <T> Enumeration<T> 
     enumeration(Collection<T> c) 
              返回一个指定 collection 上的枚举。 
    static <T> void 
     fill(List<? super T> list, T obj) 
              使用指定元素替换指定列表中的所有元素。 
    static int frequency(Collection<?> c, Object o) 
              返回指定 collection 中等于指定对象的元素数。 
    static int indexOfSubList(List<?> source, List<?> target) 
              返回指定源列表中第一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1static int lastIndexOfSubList(List<?> source, List<?> target) 
              返回指定源列表中最后一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1static <T> ArrayList<T> 
     list(Enumeration<T> e) 
              返回一个数组列表,它按返回顺序包含指定枚举返回的元素。 
    static <T extends Object & Comparable<? super T>> 
    T 
     max(Collection<? extends T> coll) 
              根据元素的自然顺序,返回给定 collection 的最大元素。 
    static <T> T 
     max(Collection<? extends T> coll, Comparator<? super T> comp) 
              根据指定比较器产生的顺序,返回给定 collection 的最大元素。 
    static <T extends Object & Comparable<? super T>> 
    T 
     min(Collection<? extends T> coll) 
              根据元素的自然顺序 返回给定 collection 的最小元素。 
    static <T> T 
     min(Collection<? extends T> coll, Comparator<? super T> comp) 
              根据指定比较器产生的顺序,返回给定 collection 的最小元素。 
    static <T> boolean 
     replaceAll(List<T> list, T oldVal, T newVal) 
              使用另一个值替换列表中出现的所有某一指定值。 
    static void reverse(List<?> list) 
              反转指定列表中元素的顺序。 
    static void rotate(List<?> list, int distance)  //之前解决报数的问题(123出局)
              根据指定的距离轮换指定列表中的元素。 
    static void shuffle(List<?> list) 
              使用默认随机源对指定列表进行置换。 
    static <T extends Comparable<? super T>> 
    void 
     sort(List<T> list) 
              根据元素的自然顺序 对指定列表按升序进行排序。 
    static <T> void 
     sort(List<T> list, Comparator<? super T> c) 
              根据指定比较器产生的顺序对指定列表进行排序。 
    static void swap(List<?> list, int i, int j) 
              在指定列表的指定位置处交换元素。 
    

    Java中的异常处理机制

    异常指的是程序执行过程中发生了错误。

    我们熟悉的错误: IndexOutOfBoundsException,NullPointerException,ConcurrentModifiedException,…

    其实这些都是Java为我们封装好的一个对象而已。用对象来描述某种类型的错误。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IhVFLvqM-1593465614033)(imges/image-20200629164316667.png)]

    • Error: 是严重错误。也就是说我们也无能为力。比如: 内存不足错误,程序捕获了也没啥用。

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r29otJy7-1593465614035)(imges/image-20200629164652847.png)]

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xRlk0FTx-1593465614038)(imges/image-20200629165123352.png)]

    • Exception: 表示异常。如果没有进行正确的异常处理,这个异常最终会抛给Java虚拟机,由虚拟机来处理。虚拟机的默认处理策略是在控制台打印异常调用堆栈,然后退出虚拟机。

      • RuntimeException: 运行期异常【日常使用频率最高】。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S2Y2ogxV-1593465614041)(imges/image-20200629171826606.png)]
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SGBJM8M0-1593465614043)(imges/image-20200629171138902.png)]
      • 非RuntimeException:编译期异常。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-45HMRzmC-1593465614045)(imges/image-20200629171800247.png)]
        • DateFormat 进行 日期和字符串转换。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qw5lbK7e-1593465614048)(imges/image-20200629171737703.png)]
        • 编译期异常要求必须对潜在的异常进行处理
          • try catch finally 进行异常处理
          • throw 抛出
        • 编译期异常需要在方法声明上进行 throws 声明

    try catch异常处理

    支持的格式:

    try{
        可能发生异常的代码
    }catch(异常类型 变量名){
        发生了异常时,程序如何应对的代码
    }finally{
        释放资源
    }
    
    
    //变形1
    try{
    }catch(异常类型 变量名){    
    }
    
    //变形2: 分别处理不同的异常类型。
    try{
    }catch(异常类型 变量名){    
    }catch(异常类型2 变量名){    
    }catch(异常类型3 变量名){    
    }catch(异常类型4 变量名){    
    }....
    
    //变形3
     try{
    }catch(异常类型 变量名){    
    }catch(异常类型2 变量名){    
    }catch(异常类型3 变量名){    
    }catch(异常类型4 变量名){    
    }....   
    finally{
        释放资源
    }
    
    //变形4
    try{
        绝对不会发生异常的代码
    }finally{
        释放资源
    }
    
    • 原则:
      • try中的代码越少越好
      • catch中千万不要什么都不写,否则真的发生异常时,你是感知不到的。这种不是异常处理,而是隐藏异常,给自己挖坑。
    • finally语句块,是不论程序是否发生异常,均会执行。
    展开全文
  • 首先简单介绍下,这几种map的应用场景: ...TreeMap 插入数据后,对键值进行排序,内部是通过红黑树实现的; HashTable 与HashMap的功能相同,区别有两点: 1.HashTable是线程安全的,即某一时刻只允许一...

    首先简单介绍下,这几种map的应用场景:

    HashMap 存储键值对,没有什么特殊的功能;

    LinkedHashMap在存储的同时,能够保存用户插入数据的顺序,如果需要输出用户插入map的顺序可以用它;

    TreeMap 插入数据后,对键值进行排序,内部是通过红黑树实现的;

    HashTable 与HashMap的功能相同,区别有两点:

    1.HashTable是线程安全的,即某一时刻只允许一个线程访问;

    2.同时HashTable键值不允许为空,而HashMap可以

    如果HashTable想要允许多线程访问,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

    下面分别介绍下它们内部的实现原理:

    Hashmap

    0.75是经过大量的实验得出的比例。这里解释下为什么n必须为2的整数倍。因为为了提高运算效率,Hashmap源码中取模运算是用的2进制(如a%b=a&(b-1)),这种运算要求b必须为2的整数倍才能得到正确的取余结果。这里不要较真,说为什么非得这么取余,弄得n必须为2的倍数,至于这先生蛋还是先生鸡的问题,就不在这里讨论了。

    LinkedHashMap

    LinkedHashMap继承了HashMap,只不是是扩展了Entry类,增加了指向上一个节点的指针、指向下一个节点的指针。然后定义了一个扩展entry类的头节点按照存入顺序或访问顺序保存这个双向链表。

    TreeMap

    TreeMap内部是用红黑数存储的,所以有排序的功能,至于红黑数的具体实现可以参考这篇博文,介绍的很详细:

    http://blog.csdn.net/chenssy/article/details/26668941

    展开全文
  • TreeMap详解

    2017-03-05 16:01:00
    注:由于TreeMap的具体实现机制是红黑树,但是我现在还不懂红黑树的实现机制,所以就只是基本没有写什么,先立个flag,以后来写。 转载于:https://www.cnblogs.com/maying3010/p/6505706.html...

    TreeMap详解

    TreeMap


    注:由于TreeMap的具体实现机制是红黑树,但是我现在还不懂红黑树的实现机制,所以就只是基本没有写什么,先立个flag,以后来写。

    转载于:https://www.cnblogs.com/maying3010/p/6505706.html

    展开全文
  • Java基础之:Map——TreeMapTreeMap简单介绍TreeMap实现了Map的子接口SorteMap。而TreeMap与TreeSet一样,可以自己指定元素如何排列。TreeMap可以实现提供的比较机制。使用案例package class_Map;​import java.util...

    a3e993c4e84bdbd7b5399db57a9718c1.png

    Java基础之:Map——TreeMap

    TreeMap简单介绍

    TreeMap实现了Map的子接口SorteMap。

    而TreeMap与TreeSet一样,可以自己指定元素如何排列。TreeMap可以实现提供的比较机制。

    使用案例

    package class_Map;

    import java.util.Comparator;

    import java.util.TreeMap;

    public class ClassTest04_TreeMap {

    @SuppressWarnings({ "unchecked", "rawtypes" })

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    // 比如 String -key String -val

    // 希望 key 按照 长度 的从大到小

    TreeMap map = new TreeMap(new Comparator() {

    @Override

    public int compare(Object o1, Object o2) {

    // TODO Auto-generated method stub

    return ((String) o2).length() - ((String) o1).length();

    }

    });

    map.put("111", "hello01");

    map.put("22222", "hello02");

    map.put("33", "hello03");

    map.put("3666", "hello05");

    map.put("4", "hello02");

    map.put("5", null);

    System.out.println(map);

    }

    }

    程序输出

    {22222=hello02, 3666=hello05, 111=hello01, 33=hello03, 4=null}

    展开全文
  • treeMap 1、treeMap 概述 2、排序机制 3、treeSet 排序案例 3.1、自然排序 3.2、比较器排序 Map 1、Map 集合概述 Map 是 Java 中的另一种集合类型,它是一个接口,是将键映射到值的对象。 简单来说,Map 中存储的是...
  • TreeMap 源码阅读

    2019-02-16 17:01:58
      TreeMap是用红黑树实现的,插入数据后添加红黑树节点并进行红黑树的调整,删除数据后也同样进行红黑树的调整,查询数据时,不是用hashcode来进行查询,而是使用红黑树查询。TreeMap没有HashMap的扩容机制,所有...
  • Map 排序 TreeMap 陷阱

    千次阅读 2016-08-17 19:35:40
    HashMap的基于hash表的实现机制决定了他非常快的检索速度,但也定了“不能排序”的标牌,工作中如果需要排序就要使用TreeMap TreeMap是可排序map,可对ke进行排序,那么,是不是任何我们原来使用HashMap实现的业务都...
  • 一....TreeMap 实现了 NavigableMap HashMap 实现了 Map 二.存储方式 HashMap: TreeMap:一个内部类 Entry 三.判断重复的机制 HashMap:基于hashCode key:判断是否重复,先判断hashCode,如果has...
  • 集合-TreeSet

    2017-09-19 20:34:56
    在《Java提高篇(二七)-----TreeMap》中LZ详细讲解了TreeMap实现机制,如果客官详情看了这篇博文或者多TreeMap有比较详细的了解,那么TreeSet的实现对您是喝口水那么简单。 一、TreeSet定义 我们知道TreeMap是一...

空空如也

空空如也

1 2 3 4 5 6
收藏数 116
精华内容 46
关键字:

treemap实现机制