产品商城网站建设,怎么把svg做网站背景,商丘网信办,简历设计网一、容器键值对#xff1a; 1.HashMap 的 key 和 value 都允许为 null #xff0c; HashMap 在 key 为 null 的时候#xff0c;值必须为null。 2.Hashtable 的 key 和 value 都不允许为 null 。 Hashtable 遇到key或value为 null时 #xff0c;将抛出 NullPointerException…一、容器键值对 1.HashMap 的 key 和 value 都允许为 null HashMap 在 key 为 null 的时候值必须为null。 2.Hashtable 的 key 和 value 都不允许为 null 。 Hashtable 遇到key或value为 null时 将抛出 NullPointerException异常 。 二、容量设定与扩容机制 1.HashMap 默认初始化容量为 16并且容器容量一定是 2 的 n 次方。当元素数量达到容量和加载因子加载因子LoadFactor默认为0.75的乘积时会触发扩容并且是以原容量 2 倍 的方式 进行扩容。 2.Hashtable 默认初始化容量为 11。 在元素数量达到容量和加载因子加载因子默认是0.75的乘积时会进行扩容是以原容量 2 倍 再加 1 的方式进行扩容。即 int newCapacity (oldCapacity 1) 1; 。 三、存储位置 1.HashMap 是先将 key 键的 hashCode 经过扰动函数扰动后得到 hash 值然后再利用 hash (length - 1) 的方式由于 HashMap 的容器容量一定是 2 的 n 次方所以可以使用 hash (length- 1) 的方式代替取模的方式计算元素的位置从而提高运算效率代替取模得到元素的存储位置。JDK 1.8之后HashMap引入了红黑树来优化链表过长的问题。 2.Hashtable 是使用除留余数法进行计算存储位置的因为其默认容量不是2 的 n 次方故无法用位运算替代模运算 int index (hash 0x7FFFFFFF) % tab.length; 。 四、线程安全 1.HashMap 不是线程安全如果想线程安全可以通过调用Collections.synchronizedMap(MapK,V m) 使其线程安全。或使用 ConcurrentHashMap 容器以同样达到线程安全。 2.Hashtable 是线程安全的每个操作方法都有 synchronized 修饰使其同步但运行效率不高所以建议使用 ConcurrentHashMap 容器以达到线程安全。 3.总结 1Hashtable 是一个古老的容器如果我们不需要线程同步则可以使用HashMap 如果需要线程同步则可以使用 ConcurrentHashMap 。 2HashMap不是同步的所以性能会比Hashtable要高。 五、遍历及访问 1.HashMap和Hashtable都支持使用Iterator进行遍历。但是Hashtable还额外支持使用Enumeration进行遍历但此方式已过时。 2.HashMap 的迭代器Iterator是 fail-fast 的。如在迭代过程中需要修改 HashMap的结构除了通过迭代器的 remove() 方法是安全的之外调用其他方法都会抛出 ConcurrentModificationException 异常。 Hashtable 的迭代器不是 fail-fast 的。 3.HashMap迭代顺序不确定。Hashtable迭代顺序按照插入顺序进行。 4.Hashtable保留了containsKey、containsValue、contains三个方法用于检查是否包含某个键、值或键值对。 HashMap去掉了contains方法只保留了containsKey和containsValue两个方法。 六、其他 1.HashMap继承自AbstractMap实现了Map、Cloneable、Serializable接口。 2.Hashtable继承自Dictionary实现了Map、Cloneable、Serializable接口。 微风不燥阳光正好你就像风一样经过这里愿你停留的片刻温暖舒心。
我是程序员小迷致力于C、C、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享若作品对您有帮助请关注、分享、点赞、收藏、在看、喜欢您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好