黑马程序员技术交流社区
标题: java基础持续更新----集合(2) [打印本页]
作者: 青龙李坤 时间: 2015-6-17 22:34
标题: java基础持续更新----集合(2)
Map接口
Map接口没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供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 capacity和load factor两个参数调整性能。
按照散列函数的定义,如果两个对象相同,则它们的hashcode必须相同,但如果两个对象不同,这它们的hashcode不一定不同,如果两个不同对象的hashcode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashcode()方法,能加快哈希表的操作。如果相同的对象有不同的hashcode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashcode方法,而不要只写其中一个。
Hashtable是同步的。
|--HashMap类
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。但是将HashMap视为Collection时(values()方法可返回Collection),其迭代器操作时间开销和HashMap的容量成比例。因此,如果迭代器操作的性能相当重要的话,不要将HashMap的初始化容量设得过高。
|--WeakHashMap类
WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。
总结
如果涉及到堆栈,队列等操作,应该考虑用list,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashcode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变,这就是针对抽象编程
作者: 青龙李坤 时间: 2015-6-17 22:36
这是第二部分集合,大家好好的努力呀!!!!
作者: 给点正能量 时间: 2015-6-18 08:43
多谢楼主分享
作者: 王冲6060 时间: 2015-6-18 19:54
感谢分享
作者: yaoxufanalan 时间: 2015-6-18 20:07
多谢楼主的分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |