底层是一个数组,数组的每一项是一个链表,每次新建一个 HashMap 时,都会初始化一个 table 数组,存储方式是键值对。
主要用于查找的快捷性,如果两个对象相同, equals方法一定返回true,并且这两个对象的HashCode一定相同;
如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;
如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了;
ArrayList:动态数组数据结构,线程不安全,数据查询非常快
linkedList:基于链表的数据结构,在新增和删除的效率高
父类不同:HashMap继承自AbstractMap类,HashTable是继承自Dictionary类
对外提供的接口不同:
HashTable比HashMap多提供了elments()和contains()两个方法
elments:继承自HashMap的父类Disctionary
contains:判断该HashTable是否包含传入的value
对空值的支持不同
HashMap:键可以有多个对应的值为空
HashTable:键和值都不能为空
安全性不同:
HashMap是线程不安全的,对线程并发会出现线程死锁
HashTable是线程安全的,效率高于HashMap
5、Collection 包结构,与 Collections 的区别 ?
Collection是集合类的上级接口,子接口有,set、list、LinkList、ArrayList
Collections是集合类的一个工具类,此类不能实例化,实现集合的搜索,排序,线程安全化等操作
List:存储一组不唯一,有序的对象。
Set:不允许重复。
Map:键值对存储。
7、GIT常用命令?
初始化本地库:git init
查看日志信息:git log
状态跟踪:git status
添加文件:git add
添加所有文件:git add .
删除:git rm
提交:git commit -a -m
将本地推送到远程:git push
8、有哪些日志框架?
log4j、slf4j
9、日志的级别?
由高到低:ERROR、WARN、INFO、DEBUG
1. DEBUG Level
指出细粒度信息事件,主要用来调试应用程序。
2.INFO level
表明粗粒度级别,上强调应用程序的运行过程,比如进入某个业务分支。
3. WARN level
表明出现潜在错误。
4. ERROR leve
指出虽然发生错误事件,但不影响系统的继续运行。
5.FATAL level
指出每个严重的错误事件将会导致应用程序的退出。