说说Map集合和它的实现类
- Map接口 , 专门用来实现键值对操作的集合类接口 。它的实现类有HashMap、HashTable、TreeMap和LinkedHashMap 。
- 实现类HashMap , 底层使用Hash表实现 , 它通过元素的hashCode来确定存储的位置 , 所以有很快的查询速度 , 但它遍历时的顺序是不确定的 。HashMap只允许一个key为null , 但可以多个key的value为null 。HashMap是非线程安全的 , 所以多线程环境下 , 对HashMap进行并发写会出现不一致性问题 , 可以通过Collections的synchronizedMap()方法对HashMap进行包装 , 让HashMap具有线程安全的能力 , 或者使用ConcurrentHashMap 。在JDK1.8之前 , HashMap底层是使用Hash表和链表实现 , 当发生hash冲突时 , 同一个位置的元素会形成链表存储 , 但是元素一多时 , 查询就会变为链表的遍历 , 效率比较低 。在JDK1.8时 , HashMap底层就变成Hash表和链表红黑树实现 , 当链表中的元素个数超过8时 , 链表转换为红黑树 , 避免遍历 , 优化了查询效率 。HashTable , 底层和JDK1.7的HashMap类似 , 但它的key和value都不能为null , 而且Hashtable是线程安全的 , 它的每个方法都有synchronized 关键字 , 所以多线程环境下可以使用它 。TreeMap , 底层是通过二叉树实现 , 它能在元素添加时 , 进行排序 , 它要求元素必须实现Comparable接口 , 复写compareTo()函数 , 或者在创建TreeMap时传入自定义Comparator比较器对象 , 否则会在运行时抛出java.lang.ClassCastException类型的异常 。LinkedHashMap , 它是HashMap的一个子类 , 保存了插入顺序 , 而其他Map实现类是无序的 。
- 泛型可以对类型进行抽象 , 可以让类型支持不同类型而重用 , 例如容器类ArrayList , 通过泛型 , ArrayList可以存储不同的元素 , 并且泛型后的Array元素是具体类型而不是Object , 避免了类型转换的麻烦 , 而且编译时会报错 , 避免了类型转换可能发生的类型转换错误 。
- 泛型擦除 , 因为Java的泛型是通过编译时实现的 , 生成的Java字节码中是不存在泛型信息的 , 所以泛型信息 , 在编译器编译时 , 会将泛型信息去除 , 这个过程就是泛型擦除 。所以List上附加的泛型信息 , 在JVM来说是不可见的 , 在它眼里都是Object类型 。
- 编译时异常
- 运行时异常
- 捕获异常 , 使用try-catch-finally
- 异常抛出 , 使用throws关键字
- 继承一个异常类 , 运行时异常继承RuntimeException , 编译时异常继承Exception 。
- 执行 , finally的执行在return之前 , 不管try中有没有异常 , 都会执行 。另外如果finally中有return , 则会在try的return之前执行 , 那么try中的return就执行不到了 。
- Excption与Error都是Throwable的子类 。
- Excption有运行时异常和编译时异常 , 他们都是可以捕获和处理 。编译时异常常见有:IOException、FileNotFoundException、SQLException , 必须在代码中处理 , 否则编译会报错 。运行时异常常见有:ClassCastException、IndexOutOfBoundsException、NullPointerException
- Error , 和运行时异常一样 , 编译器也不会对错误进行检查 。当资源不足、约束失败、或是其它程序无法继续运行的条件发生时 , 就产生错误 。程序本身无法修复这些错误的 。常见子类有OutOfMemoryError
- 按流的流向分 , 可以分为输入流和输出流
- 按操作的单元分 , 可以分为字节流和字符流
- 按照流的角色分 , 可以分为节点流和处理流
- InputStreamReader , 所有输入流的基类 , InputStream为字符输入流 , Reader为字符输入流 。
推荐阅读
- 袁天罡的后人是谁 历史上有袁天罡这个人吗
- Mysql数据库实现主从同步,看这一篇就够了
- 10分钟自建企业级Docker镜像仓库!这个开源项目太顶了
- 电视机顶盒和网络机顶盒哪个好?
- Python自带爬虫库urllib使用大全
- 癫痫的前兆有哪些症状
- 如何治疗痔疮的小窍门
- 皮肤受损后该如何修复
- 西装|辣目洋子教你玩转西装穿搭,微胖女生这样穿也能在职场脱颖而出
- 老年人脚麻木吃什么药
