点击查看:2015计算机等级考试二级Java入门教程章节汇总
点击查看:2015计算机等级考试二级Java入门教程第十章汇总
10.7 使用映像
如同在这章开始我们着到的,一个映像(map)是一种存储数据的方法,当你想要检索一个对象时,可以最小化查找需求。每个对象与一个键相关,键用于决定对象引用的存储位置。键和对象都存储在映像中。给定一个键,你总可以定位到按键存储的映像中的对象。更多地了解映像的存储机制是如何工作的,特别是了解使用默认的散列过程含义为什么很重要我们将首先在HashMap类的背景下研究映像的使用。
散列过程
一个映像用一个数组存储键和对象对。这个数组的下标由键对象产生的,通过使用对象的散列码计算存储键/对象数组中的偏移量。默认地,(完成)这些用到了作为键对象的hashCode()方法。这是从Object继承到所有的类中的:
注意,尽管每个键必须惟一,甸个键不一定产生惟一的散列码。当两个或更多的不同
为了用默认的构造函数创建一个映像,你可以写成:
hashmap themap.new hashmap()
映像的容量只是映像中能存储的键/对象对的数量。容量按击要自动增加,但这个操作相当耗费时间。映像的容虽值与散列码结合作为键,你可以用来计算下标决定一个对象和它的键存储的位置,为了使这个计算产生的下标值与键的散列码相结合,当你自已指定容
量时,最理想的是使用容量的原始数字例如:
HasMap myMap=new Hashmap(151)
这个映像可以容纳151个对象和相应的键,虽然实际存储的对象数量从没达到过这个数量。为了高效率的操作,映像中必须存在空的容量。空客量太小会增加不同键产生相同散列表下标的可能性,更容易发生冲突,在映像中会有不小心丢失对象的危险结果
装填因子(load factor)用于决定何时需要增加散列表的规模。当表的规摸达到了装填因子和容量相乘产生的值时,容量将会自动增加到旧容只的2倍加l-加1是为了确保如果不是素数,至少是奇数。0.75作为默认的装填因子是个好的方案但如果你想减少它可以使用第二种构造函数:
Hashmao aMaD=new HasMap(151,0.6f);//60%load factor
这个映像将比当前默认的构造函数效率高一点,但会消耗更多的未占用的空间。当90个对象存储好后,容量将增加到303个(2*151+1)。
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |