导航:首页 > 编程语言 > 应用程序调用一个已为另一线程整理的接口

应用程序调用一个已为另一线程整理的接口

发布时间:2024-01-16 21:28:29

A. java.util.hashtable实现了哪个interface

一、Map
map接口,集合类的接口,声明了map的常用方法。所有的map都继承自改接口

二、java.io.Serializable接口,
接口里没有声明任何方法,该接口用来实现对象的序列化反序列化功能

三、java.lang.Cloneable
接口里没有声明任何方法,该接口实现对象复制功能

四. AbstractMap
重要的类:AbstractMap<K,V>

AbstractMap抽象类实现了一些简单且通用的方法,

在这个抽象类中有两个方法非常值得关注,keySet和values方法源码的实现可以说是教科书式的典范。

抽象类通常作为一种骨架实现,为各自子类实现公共的方法。

Java中Map类型的数据结构有相当多,AbstractMap作为它们的骨架实现实现了Map接口部分方法,也就是说为它的子类各种Map提供了公共的方法,没有实现的方法各种Map可能有所不同。

抽象类不能通过new关键字直接创建抽象类的实例,但它可以有构造方法。AbstractMap提供了一个protected修饰的无参构造方法,意味着只有它的子类才能访问(当然它本身就是一个抽象类,其他类也不能直接对其实例化),也就是说只有它的子类才能调用这个无参的构造方法。

在Map接口中其内部定义了一个Entry接口,这个接口是Map映射的内部实现用于维护一个key-value键值对,key-value存储在这个Map.Entry中。AbstractMap对这个内部接口进行了实现,一共有两个:一个是可变的SimpleEntry和一个是不可变的SimpleImmutableEntry。

1. SimpleEntry

1.1 定义
实现了Map.Entry<K, V>接口,并且实现了Serializable(可被序列化)。它的方法比较简单都是取值存值的操作,对于key值的定义是一个final修饰意味着是一个不可变的引用。

1.2 setValue
ll另外其setValue方法稍微特殊,存入value值返回的并不是存入的值,而是返回的以前的旧值。

源码:

1.3 equals和hashCode
需要重点学习的是它重写的equals和hashCode方法。

eq方法

要想正确重写equals方法并能正确使用,通常还需要重写hashCode方法。因为集合中的元素,判断是否一样时,先hash再equals,这也是个知识点,详细的,学习一下原理。

hashcode源码:可以看成求hashcode值时,即返回的int数据,是key.hashCode() ^ value.hashCode(),即key、value的hashcode值异或

2. SimpleImmutableEntry

2.1 定义
源码:

它相比于SimpleEntry其key和value成员变量都被定义为了final类型。即定义为不可变的Entry,不提供setValue方法,不能通过setValue方法进行修改。

2.2 setValue
调用setValue方法将会抛出UnsupportedOperationException异常。即定义为不可变的Entry,不提供setValue方法,不能通过setValue方法进行修改。

它的equals和hashCode方法和SimpleEntry一致。

3. 实现的Map接口方法

接下来查看AbstractMap抽象类实现了哪些Map接口中的方法。

3.1 public int size()
Map中定义了一个entrySet方法,返回的是Map.Entry的Set集合,直接调用Set集合的size方法即是Map的大小。

3.2 public boolean isEmpty()
调用size方法,等于0即为空。

3.3 public boolean containsValue(Object value)
这个方法的实现较为简单,通过调用entrySet方法获取Set集合的迭代器遍历Map.Entry,获取对应的value与参数value比较。Map可以存储为null的value值,由于value=null在Map中存储比较特殊(不能计算hashCode值),所以在这里也做了判断参数value是否为空。

public boolean containsKey(Object key)

这个方法实现和containsValue一致。

3.4 public V get(Object key)
这个方法实现和containsValue类似,不同的是上面相等返回boolean,这个方法返回value值。

3.5 public V put(K key, V value)
向Map中存入key-value键值对的方法并没有具体实现,会直接抛出一个UnsupportedOperationException异常。

6 public V remove(Object key)
通过参数key删除Map中指定的key-value键值对。这个方法也很简单,也是通过迭代器遍历Map.Entry的Set集合,找到对应key值,通过调用 Iterator.remove() 方法删除Map.Entry。

7. public void putAll(Map<? extends K, ? extends V> m)
这个方法也很简单遍历传入的Map,调用put方法存入就可以了。

public void clear()

调用entrySet方法获取Set集合再调用Set#clear()方法清空。

keyset

返回Map key值的Set集合。AbstractMap中定义了一个成员变量“transient Set<K> keySet”,在JDK7中keySet变量是由volatile修饰的,但在JDK8中并没有使用volatile修饰。在对keySet变量的注释中解释道,访问这些字段的方法本身就没有同步,加上volatile也不能保证线程安全。关于keySet方法的实现就有点意思了。

首先思考该方法是返回key值的Set集合,很自然的能想到一个简单的实现方式,遍历Entry数组取出key值放到Set集合中,类似下面代码

这就意味着每次调用keySet方法都会遍历Entry数组,数据量大时效率会大大降低。不得不说JDK源码是写得非常好,它并没有采取遍历的方式。如果不遍历Entry,那又如何知道此时Map新增了一个key-value键值对呢?

答案就是在keySet方法内部重新实现了一个新的自定义Set集合,在这个自定义Set集合中又重写了iterator方法,这里是关键,iterator方法返回Iterator接口,而在这里又重新实现了Iterator迭代器,通过调用entrySet方法再调用它的iterator方法。下面结合代码来分析:

五、 Dictionary
Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。

给出键和值,你就可以将值存储在Dictionary对象中。一旦该值被存储,就可以通过它的键来获取它。所以和Map一样, Dictionary 也可以作为一个键/值对列表。Dictionary类已经过时了。在实际开发中,你可以实现Map接口来获取键/值的存储功能。

打开CSDN,阅读体验更佳

HashMap、TreeMap、Hashable和LinkedHashMap_kgu的博客
HashMap、TreeMap、Hashable和LinkedHashMap Map是最重要的数据结构之一。开始会告诉怎么用HashMap、TreeMap、Hashtable和LinkedHashMap 1、Map概述 在Java SE中有4种Map的实现:HashMap、TreeMap、Hashtable和LinkedHashMap. HashMap:用哈...
继续访问
Python 接口:从协议到抽象基类_weixin_30492047的博客
首先,基本的事实是,Python语言没有 interface 关键字,而且除了抽象基类,每个类都有接口:类实现或继承的公开属性(方法或数据属性),包括特殊方法,如__getitem__ 或 __add__。 按照定义,受保护的属性和私有属性不在接口中:即便“受保护...
继续访问
最新发布 Java集合(九)HashMap接口
HashMap小结:(1)Map接口的常用实现类:HashMap、Hashtable和Properties(2)HashMap是Map接口使用频率最高的实现类(3)HashMap是以key-val对的方式来存储数据(HashMap$Node类型)(4)key不能重复,但是值可以重复,允许使用null键和null值(5)如果添加相同的key,则会覆盖原来的key-val,等同于修改.(key不会替换,val会替换)我们来把断点放在map.put("no1","张三丰“);
继续访问

Hashtable和HashMap的异同
Hashtable和HashMap两者的原理相同,功能相同,很多情况下可以互用。 Hashtable和HashMap的主要区别如下: 1、Hashtable继承自Dictionary类,而HashMap实现了Map接口 2、Hashtable线程安全,HashMap重速度、轻安全,是线程非安全的,所以当运行到线程环境中时,需要程序员自己管理线程的同步问题。 3、Hashtable不允许null值(key和value都不允许),HashMap允许null值(key和value都允许) 其他异同点可参照博客:
继续访问
Hashable / Hasher_weixin_33909059的博客
哈希函数的选择应该作为实现细节,而不是设计中的固定部分;因此,使用者不应该依赖于编译器自动生成的 Hashable 函数的具体特征。最可能的实现是在每个成员的哈希值上调用标准库中的_mixInt函数,然后将他们逻辑异或(^),如同目前Collection类...
继续访问
php的数据结构_PHP 的数据结构扩展_myh991235的博客
Sequence 是类数组数据结构的基础接口,定义了很多重要且方便的方法,比如 contains, map, filter, rece, find, first, last 等。从图中可知,Vector, Deque, Stack, Queue 都直接或者间接的实现了这个接口。 Hashable 在图中看起来比...
继续访问
33.Java之Map接口实现类(HashMap、HashTable、Properties、TreeSet 和 TreeMap基本介绍,HashMap 底层机制)
Map 接口的常用实现类:HashMap、Hashtable 和 Properties 33.1 HashMap 基本介绍 是 Map 接口使用频率最高的实现类 是以 Key-value 的方式来存储数据(HashMap$Node类型) Key 不能重复,但是值可以重复,允许使用 Null 键和 Null 值 如果添加相同的 Key,则会覆盖原来的 Key-value,等同于修改(Key不会替换,value会替换) 与 HashSet 一样,不保证映射的顺序(即添加顺序与输出顺序不一样),因为底层是以
继续访问

Map接口:HashMap与HashTable的区别
1)HashMap和Hashtable都实现了Map接口,但是继承的父类不同: public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map2)HashMap是非synchronized,执行速度快,而HashTab...
继续访问
php7 唯一数字_PHP7中高效的数据结构_王雷Neo的博客
实现Hashable接口的数据结构是Map和Set。 Map 一个Map 是一个键值对的连续集合,和数组几乎一致。键可以是任何类型,但是必须唯一。 强项: 性能和内存效率和数组几乎一致 当长度降低的时候自动释放内存 ...
继续访问
java常见笔试_Java 常见笔试题(2)_weixin_39998462的博客
java.util.Hashtable实现了哪个接口? A. java.util.Map B. java.util.List C. java.util.Hashable D. java.util.Collection 9. 1. class A implements Runnable{ 2. int i; 3.
继续访问
实现原理_HashTable实现原理
概要前一章,我们学习了HashMap。这一章,我们对Hashtable进行学习。我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable。第1部分 Hashtable介绍第2部分 Hashtable数据结构第3部分 Hashtable源码解析(基于JDK1.6.0_45)第4部分 Hashtable遍历方式第5部分 Hashtable示例转载请注明出处...
继续访问
Hashtable源码分析
前言:Hashtable线程安全的集合类,虽然它线程安全,然而在日常开发中使用的频率很低,毕竟锁的颗粒度太大了。但是这并不妨碍我们对其内部原理进行了解。 注:本文jdk源码版本为jdk1.8.0_172。 1.Hashtable基本概念 Hashtable与HashMap一样,都是以键值对的形式存储数据。但是Hashtable的键值不能为null,而HashMap的键值是可以为...
继续访问
Swift自定义Class实现Hashable_weixin_30273763的博客
增加代码后,发现编译器依然报错"Type 'Bit' does not conform to protocol 'Equatable'"-没有实现Equatable协议。 2.实现Equatable Commend+click点击Hashable定义,进入后再点击Equatable协议定义,可以看到如下定义: ...
继续访问
Array,Vertor,Arraylist,Hashable,Hashmap等几个易混淆的概念_tjjhz...
1.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现 2.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
继续访问
Hashtable简述
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。......
继续访问

Map接口与实现类HashTable
Map接口与实现类HashTable 源码位置 rt.jar/java.util包下 源码类 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable 特点 1、集合中key不能重复,若put时集合已含有此key,那新值会替换旧值;key,value不能为null 2、HashTable/Map中存放数
继续访问
Java面试知识整理_加温的啤酒的博客_java面试知识整理
都实现了list接口,都是有序的 vector线程是安全的,arraylist线程是不安全的 vector数据增长是原来的一倍,arraylist是数据增长是原来的0.5倍 hashmap和hashable的区别 hashmap是hashable的轻量级实现,hashmap允许空键值,hashable不允许 ...
继续访问
javase基础知识总结_id_1314520的博客
interface接口: 默认所有方法都是抽象的,并且public修饰的. 属性: 默认为public修饰的常量(public final修饰的) abstract抽象类: 类名被abstract修饰的类; 里面可以有抽象方法, 也可以没有抽象方法; 实现接口类,可以重写也可以不重写接口...
继续访问
集合—Map接口实现类-Hashtable
本次博客带领大家学习集合中的Map接口实现类-Hashtable。
继续访问
Hashtable 和 HashMap
HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 1.HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。 2...
继续访问
hashMap和hashTable的区别以及HashMap的底层原理?
hashMap和hashTable的区别? 1、继承的父类不同 HashTable继承Dictionary类,而hashMap继承了AbstractMap类,但是二者都实现了map接口。 2、线程安全性不同 Hashtable 线程安全,因为它每个方法中都加入了Synchronize。HashMap是线程不安全的。​ HashMap底层是一个Entry数组,当发生hash冲突的时候,ha......
继续访问

java---Map接口的实现类HashMap和Hashtable
package LyfPractice;import java.util.*;/** * Created by fangjiejie on 2016/12/19. */ /*Hashmap和Hashtable的区别 1.相同:都实现了Map接口,实现了key和value的保存与映射,有很多相同的方法 2.不同: Hashmap:是map接口的实现类 ,非同步,线程不安全 ,速度快,可以有
继续访问
Map 接口实现类-Hashtable
Map 接口实现类-Hashtable
继续访问

29. Map接口继承关系 / Map接口概述 / HashMap底层实现原理及相关知识 / Map常用方法 / TreeMap、Properties
Map接口继承关系 Map接口概述 Map与Collection并列存在。用于保存具有映射关系的数据:key-value Map 中的 key 和 value 都可以是任何引用类型的数据 Map 中的 key 用Set来存放, 不允许重复,即同一个 Map 对象所对应 的类,须重写hashCode()和equals()方法 常用String类作为Map的“键” key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到 唯一的、确定的 value Map接口的常用实现类: HashM
继续访问

Map接口的实现类----HashMap
Map接口的实现类----HashMap。
继续访问

JAVA基础 接口与继承 HashMap使用
https://blog.csdn.net/u010575093/article/details/50731281 抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量 接口不可继承抽象类,抽象类可实现多个接口。接口与接口之间是继承,用extends,可继承多个接口 mport java.util.HashMap; import java.util.Map; interface T...
继续访问
【Java_基础深入】LinkedHashMap 继承 HashMap又实现 Map 接口背后的设计思想
JDK源码的类定义 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable public class LinkedHashMap<K,V> extends HashMap<K,V> implements...
继续访问

Map接口及其实现类HashMap、LinkedHashMap和Hashtable的简单介绍
一、Map集合的特点 Map集合是一个双列集合,一个元素包含两个值(一个是key,一个是value)Map集合的特点 Map集合中的元素,key和value的数据类型可以相同也可以不同 Map集合中的元素,key是不允许重复的,value是可以重复的 Map集合中的元素,key和value是一一对应的 Map的常用方法 1、public V put (K key, V value)方法 作用:把指定的键与指定的值添加到Map集合中 返回值V的含义:存储键值对的时候,key如果不重复,返回值v是null;
继续访问
Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
转 http://www.cnblogs.com/skywang12345/p/3310887.html#top Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例 概要 前一章,我们学习了HashMap。这一章,我们对Hashtable进行学习。 我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Has
继续访问
HashTable实现原理
有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的value值。一个是前面提到的HashMap,还有一个就是马上要讲解的HashTable。对于HashTable而言,它在很大程度上和HashMap的实现差不多,如果我们对HashMap比较了解的话,对Has

阅读全文

与应用程序调用一个已为另一线程整理的接口相关的资料

热点内容
mdfldf是什么文件 浏览:569
文件在桌面怎么删除干净 浏览:439
马兰士67cd机版本 浏览:542
javaweb爬虫程序 浏览:537
word中千位分隔符 浏览:392
迷你编程七天任务的地图怎么过 浏览:844
word2003格式不对 浏览:86
百度云怎么编辑文件在哪里 浏览:304
起名app数据哪里来的 浏览:888
微信怎么去泡妞 浏览:52
百度广告html代码 浏览:244
qq浏览器转换完成后的文件在哪里 浏览:623
jsp中的session 浏览:621
压缩完了文件去哪里找 浏览:380
武装突袭3浩方联机版本 浏览:674
网络机顶盒移动网络 浏览:391
iphone手机百度云怎么保存到qq 浏览:148
数据库设计与实践读后感 浏览:112
js对象是什么 浏览:744
网页文件存pdf 浏览:567

友情链接