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.remove、 Set.remove、 removeAll、 retainAll 和 clear 操作可从映射中移除相应的映射关系。它不支持 add 或 addAll 操作。 -
-
返回:
- 此映射中包含的映射关系的 set 视图
public static interface Map.Entry<K,V>
映射项(键-值对)。Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。这些Map.Entry 对象仅 在迭代期间有效;更确切地讲,如果在迭代器返回项之后修改了底层映射,则某些映射项的行为是不确定的,除了通过setValue 在映射项上执行操作之外。