深入java--容器深入研究

1 有一些以abstract开头的类,他们只是部分实现了接口的工具,例如,如果你在创建自己的set,那么并不用从set接口开始并实现其中的全部方法,只需从Abstract继承,然后执行一些新类创建的必须工作,。但是,事实上普通容器类库包含足够多的功能,任何时候都可以满足需求,因此通常可以忽略以Abstract开头的类。

2 SE5中CopeOnWriteArrayList和CopeOnWriteArraySet都是用于多线程机制的 EnumSet和EnumMap都是为enum而设计的set 和map的特殊实现

3 Collections.nCopes(复制的个数,复制的东西),Collections.fill(某集合,替换的内容) 注意fill只能替换已经在list中存在的元素,而不能添加新的元素。

4 set和collection有完全一样的接口 HashSet是为快速查找而设计的set 存入hashset的元素必须定义hashcode()。treeset是保持次序的set,底层为树结构,使用它可以从set中提取有序的序列,元素必须实现Comparable接口。LinkedHashSet 具有hashset的查询速度,且内部使用链表来维护元素的顺序(插入的顺序)于是使用迭代器迭遍历set时,结果会按照元素的插入顺序显示,元素也必须定义HashCode方法。

5 HashMap使用了散列骂来代替对键的缓慢搜索,散列吗是相对唯一的,用以代表对象的Int值,他是通过将对象的某些信息进行转换而生成,hashcode是根类object的方法,因此所有Java对象都能生成散列码,HashMap就是使用对象的hashcode()进行快速查询的,此方法能够显著提高性能。

6 WeakHashMap弱键  允许释放映射所指向的对象 。 ConcurrentHashMap一种线程安全的Map 它不涉及同步加锁

7 任何键都必须有一个equals方法,如果键被用于散列map,那么还必须拥有一个恰当的hashcode方法,如果键被用于treemap那么还必须实现comparable

8 默认的,Object类的hashCode()方法返回这个对象存储的内存地址的编号

原始的equals()方法用来比较两个对象的地址值,而原始的hashCode()方法用来返回其所在对象的物理地址

System.out.println(d1==d2);//等号比的是内存地址编号

1)、String 、Math、Integer以及Double等这些封装类已经对equals()和hashCode()方法进行了重写,这两个方法在这些类中已经改变了其本来意义;

2)、如果X.equals(Y),那么它们的X和Y的hashCode值一定相同(这也是java规范中规定的),不管equals进行的是地址比较还是内容比较

3)、如果两个对象X和Y的hashCode相同,但是X.equals(Y)不一定成立(比如:如果示例三中只重写了hashCode方法,没有重写equals方法,那么System.out.println(d1.equals(d2))一定会输出false);

9 Queue在SE5中仅有的两个实现是LinkedList和PriorityQueue 他们的差异在于排序行为而不是性能。

10 TreeMap 是唯一一个带有subMap()方法的Map,它可以返回一个子树。

11 Map中使用键的要求和set中元素的要求是一样的,任何键都必须具有一个equals方法,如果键被用于散列map,那么它还必须拥有恰当的hashcode方法,如果键被用于treemap,那么它必须实现comparable.键必须是唯一的,而值可以重复。

12 为了提高速度,LinkedHashMap散列化了所有元素,但是在遍历键值对的时候,却又以元素插入顺序返回键值对,此外,可以在构造器中设定LinkedHashMap,使之采用基于访问的“最近最少LRU”算法,于是没有被访问过的元素就出现在最前面。

13 map中

entrySet

Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。该 set 受映射支持,所以对映射的更改可在此 set 中反映出来,反之亦然。如果对该 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作,或者通过对迭代器返回的映射项执行 setValue 操作除外),则迭代结果是不确定的。set 支持元素移除,通过 Iterator.removeSet.removeremoveAllretainAllclear 操作可从映射中移除相应的映射关系。它不支持 addaddAll 操作。
返回:
此映射中包含的映射关系的 set 视图

public static interface Map.Entry<K,V>

映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。这些Map.Entry 对象 在迭代期间有效;更确切地讲,如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不确定的,除了通过setValue 在映射项上执行操作之外。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值