仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 431|回复: 9
打印 上一主题 下一主题

[学习教程] 发布一篇Java汇合进修(九) Map架构

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:00:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,netbeans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。
后面,我们已体系的对List举行了进修。接上去,我们先进修Map,再进修Set;由于Set的完成类都是基于Map来完成的(如,HashSet是经由过程HashMap完成的,TreeSet是经由过程TreeMap完成的)。
起首,我们看看Map架构。
如上图:
Map是映照接口,Map中存储的内容是键值对(key-value)。
AbstractMap是承继于Map的笼统类,它完成了Map中的年夜部分API。别的Map的完成类能够经由过程承继AbstractMap来削减反复编码。
SortedMap是承继于Map的接口。SortedMap中的内容是排序的键值对,排序的办法是经由过程对照器(Comparator)。
NavigableMap是承继于SortedMap的接口。比拟于SortedMap,NavigableMap有一系列的导航办法;如"猎取年夜于/即是某对象的键值对"、“猎取小于/即是某对象的键值对”等等。
TreeMap承继于AbstractMap,且完成了NavigableMap接口;因而,TreeMap中的内容是“有序的键值对”!
HashMap承继于AbstractMap,但没完成NavigableMap接口;因而,HashMap的内容是“键值对,但不包管序次”!
Hashtable固然不是承继于AbstractMap,但它承继于Dictionary(Dictionary也是键值对的接口),并且也完成Map接口;因而,Hashtable的内容也是“键值对,也不包管序次”。但和HashMap比拟,Hashtable是线程平安的,并且它撑持经由过程Enumeration往遍历。
WeakHashMap承继于AbstractMap。它和HashMap的键范例分歧,WeakHashMap的键是“弱键”。
有了下面的整体框架以后,我们先来看看各个接口和笼统类的先容;前面再对各个完成类举行具体申明。
1Map
Map的界说以下:
publicinterfaceMap<K,V>{}
Map是一个键值对(key-value)映照接口。Map映照中不克不及包括反复的键;每一个键最多只能映照到一个值。
Map接口供应三种collection视图,同意以键集、值集或键-值映照干系集的情势检察某个映照的内容。
Map映照按次。有些完成类,能够明白包管其按次,如TreeMap;另外一些映照完成则不包管按次,如HashMap类。
Map的完成类应当供应2个“尺度的”机关办法:第一个,void(无参数)机关办法,用于创立空映照;第二个,带有单个Map范例参数的机关办法,用于创立一个与其参数具有不异键-值映照干系的新映照。实践上,后一个机关办法同意用户复制恣意映照,天生所需类的一个等价映照。只管没法强迫实行此倡议(由于接口不克不及包括机关办法),可是JDK中一切通用的映照完成都服从它。
Map的API
  1. abstractvoidclear()
  2. abstractbooleancontainsKey(Objectkey)
  3. abstractbooleancontainsValue(Objectvalue)
  4. abstractSet<Entry<K,V>>entrySet()
  5. abstractbooleanequals(Objectobject)
  6. abstractVget(Objectkey)
  7. abstractinthashCode()
  8. abstractbooleanisEmpty()
  9. abstractSet<K>keySet()
  10. abstractVput(Kkey,Vvalue)
  11. abstractvoidputAll(Map<?extendsK,?extendsV>map)
  12. abstractVremove(Objectkey)
  13. abstractintsize()
  14. abstractCollection<V>values()
复制代码
申明:
(01)Map供应接口分离用于前往键集、值集或键-值映照干系集。
entrySet()用于前往键-值集的Set汇合
keySet()用于前往键集的Set汇合
values()用户前往值集的Collection汇合
由于Map中不克不及包括反复的键;每一个键最多只能映照到一个值。以是,键-值集、键集都是Set,值集时Collection。
(02)Map供应了“键-值对”、“依据键猎取值”、“删除键”、“猎取容量巨细”等办法。
2Map.Entry
Map.Entry的界说以下:
interfaceEntry<K,V>{}
Map.Entry是Map中外部的一个接口,Map.Entry是键值对,Map经由过程entrySet()猎取Map.Entry的键值对汇合,从而经由过程该汇合完成对键值对的操纵。
Map.Entry的API
abstractbooleanequals(Objectobject)
abstractKgetKey()
abstractVgetValue()
abstractinthashCode()
abstractVsetValue(Vobject)
3AbstractMap
AbstractMap的界说以下:
publicabstractclassAbstractMap<K,V>implementsMap<K,V>{}
AbstractMap类供应Map接口的主干完成,以最年夜限制地削减完成此接口所需的事情。
要完成不成修正的映照,编程职员只需扩大此类并供应entrySet办法的完成便可,该办法将前往映照的映照干系set视图。一般,前往的set将顺次在AbstractSet上完成。此set不撑持add()或remove()办法,其迭代器也不撑持remove()办法。
要完成可修正的映照,编程职员必需别的重写此类的put办法(不然将抛出UnsupportedOperationException),entrySet().iterator()前往的迭代器也必需别的完成其remove办法。
AbstractMap的API
  1. abstractSet<Entry<K,V>>entrySet()
  2. voidclear()
  3. booleancontainsKey(Objectkey)
  4. booleancontainsValue(Objectvalue)
  5. booleanequals(Objectobject)
  6. Vget(Objectkey)
  7. inthashCode()
  8. booleanisEmpty()
  9. Set<K>keySet()
  10. Vput(Kkey,Vvalue)
  11. voidputAll(Map<?extendsK,?extendsV>map)
  12. Vremove(Objectkey)
  13. intsize()
  14. StringtoString()
  15. Collection<V>values()
  16. Objectclone()
复制代码
4SortedMap
SortedMap的界说以下:
publicinterfaceSortedMap<K,V>extendsMap<K,V>{}
SortedMap是一个承继于Map接口的接口。它是一个有序的SortedMap键值映照。
SortedMap的排序体例有两种:天然排序大概用户指定对照器。拔出有序SortedMap的一切元素都必需完成Comparable接口(大概被指定的对照器所承受)。
别的,一切SortedMap完成类都应当供应4个“尺度”机关办法:
(01)void(无参数)机关办法,它创立一个空的有序映照,依照键的天然按次举行排序。
(02)带有一个Comparator范例参数的机关办法,它创立一个空的有序映照,依据指定的对照器举行排序。
(03)带有一个Map范例参数的机关办法,它创立一个新的有序映照,其键-值映照干系与参数不异,依照键的天然按次举行排序。
(04)带有一个SortedMap范例参数的机关办法,它创立一个新的有序映照,其键-值映照干系和排序办法与输出的有序映照不异。没法包管强迫实行此倡议,由于接口不克不及包括机关办法。
检察本栏目更多出色内容:http://www.bianceng.cn/Programming/Java/
<p>
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-20 12:37:17 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
若相依 该用户已被删除
板凳
发表于 2015-1-24 13:47:09 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
山那边是海 该用户已被删除
地板
发表于 2015-1-24 16:08:35 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
不帅 该用户已被删除
5#
发表于 2015-2-3 12:16:35 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
兰色精灵 该用户已被删除
6#
发表于 2015-2-8 22:01:47 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
因胸联盟 该用户已被删除
7#
发表于 2015-2-26 11:33:23 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
飘灵儿 该用户已被删除
8#
发表于 2015-3-8 14:20:06 | 只看该作者
是一种为 Internet发展的计算机语言
金色的骷髅 该用户已被删除
9#
发表于 2015-3-16 01:10:24 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
小妖女 该用户已被删除
10#
发表于 2015-3-22 18:12:42 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 15:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表