A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Map接口
Map接口没有继承Collection接口,Map提供keyvalue的映射。一个Map中不能包含相同的key,每个key只能映射一个valueMap接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
用于关键字/数值对,像个Dictionary
处理Map的三种集合:
关键字集KeySet()
数值集value()
项目集enrySet()
|--Hashtable
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)对象都可作为key或者value。添加数据使用put(key,value),取出数据使用get(key),这两个基本操作的时间开销为常数。Hashtable通过initial capacityload factor两个参数调整性能。
按照散列函数的定义,如果两个对象相同,则它们的hashcode必须相同,但如果两个对象不同,这它们的hashcode不一定不同,如果两个不同对象的hashcode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashcode()方法,能加快哈希表的操作。如果相同的对象有不同的hashcode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashcode方法,而不要只写其中一个。
Hashtable是同步的。
|--HashMap
HashMapHashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null valuenull key。但是将HashMap视为Collection时(values()方法可返回Collection),其迭代器操作时间开销和HashMap的容量成比例。因此,如果迭代器操作的性能相当重要的话,不要将HashMap的初始化容量设得过高。
|--WeakHashMap
WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。
总结
如果涉及到堆栈,队列等操作,应该考虑用list,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equalshashcode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变,这就是针对抽象编程

4 个回复

倒序浏览
这是第二部分集合,大家好好的努力呀!!!!
回复 使用道具 举报
多谢楼主分享
回复 使用道具 举报
感谢分享
回复 使用道具 举报
多谢楼主的分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马