Map 集合的整理
 
hashmap 无序存放 新的操作类,    key 不可以重复 ,  内部结构是哈希表
hashtable 无序存放   旧的操作类,    key 不允许重复 ,内部结构是哈希表
treemap   可以排序的 map 集合,按集合中的 key 排序, key 不允许重复,内部结构是二叉树
 
weakhashMap :弱引用的 map 集合,当集合中的某些内容不再使用时,清除掉无用的数据,使用 gc 进行回收, system.gc( );
identityHashMap key 可以重复的 map 集合,
 
1 :怎么样让 hashmap 实现迭代排序
如果 hashmap 中,想要有迭代顺序,也就是怎么样存就怎样取,那么就使用 linkedhashmap, 就可以实现, hashmap 本身是无序的。
 
2 :判断指定的 key value 是否存在
   使用 map 接口中提供的 containskey object key .containsValues(object value) 两个方法
 
3 :为什么还要继承使用 enumeration
在旧的的系统或者是类库中,还在使用 enumeration 接口,所以掌握很有必要
vector 中的 Enumeration 最早的迭代输出接口,在 1,5 之后被 iterator 给替代。用法和 iterator 相似
 
4 map collection 之间的区别?
collection set list 接口属于单值操作,每次只操作一个对象。
map ,每次操作一对对象,即二元偶对象, map 中的每个元素都使用 key-value 的形式存储在集合中, map 接口定义
 
map 一般很少直接输出,只是作为查询使用的
collection 接口在开发中主要作用就是传递内容及输出的
 
5 Map.entrySet  Map.keyset
1 Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。
2 map.entry map 内部定义的一个接口,专门来保存 key --value 的内容
3 map.entry 是使用 static 关键字声明的内部接口,此接口可以由外部通过外部类。内部类直接调用
4:  map 中提供一个 keyset 的方法,可以讲 map 中的全部 key 变为一个 set 集合,一旦实例化,可以直接使用迭代方法输出,注意保证 set 集合中指定的泛型和 map 中的可以的泛型要保持一致
由于 hashmap 没有迭代方法,不可以直接取出,只能通过转为 set 集合,然后使用迭代方法,来间接取出元素
使用 keyset 遍历得到 key 的值
Set s =map.keySet();// 实例化接口
Iterator it = s.iterator();// 使用迭代方法取出元素
简写  
Iterator it=map.keySet().iterator();
 
使用了 entryset 得到集合中相对应的集合值,遍历出来的
Set> s1 = map.entrySet();
Iterator> it2 =s1.iterator();
 
简写
Iterator> it2 =map.entrySet().iterator();
 
6: hashmap hashtable 之间的区别
1 hashmap jdk1.2 之后推出的,属于新的操作类, hashtable jdk1.0 推出的,属于旧的操作类
2 hashmap 采用异步处理方式,性能更高, hashtable 采用同步处理方式,性能较低
3 hashmap 属于非线程安全的操作类, hashtable 属于线程安全的操作类
 
treemap map 中可以发现:数据是经过排序的,按照 key 排序
排序子类, hashmap hashtable 在存放数据时没有对齐排序,在输出的时候 key 都是无序的,但是 treemap 的主要功能是按 key 进行排序
 
7: 注意使用 Key 可能出现的问题
注意:使用自定义类作为 key 时类需要实现 comparable 接口
treemap 可以按照 key 排序,之前的代码使用的是 String 类作为 key ,因为 String 类本身已经实现了 comparable 接口
所以程序执行时,不会有任何问题,而如果使用一个自定义的类作为 key ,则此类必须实现 compareable 接口,否则将会转换异常
 
8: weakHashMap 集合,弱引用集合
jdk1.2 开始, java 把对象引用分为 4 种级别,从而使程序能更加灵活地控制对象的生命周期, 4 种级别分别为 : 强引用,软引用,弱引用,虚引用
强引用:当内存不足时,虚拟机宁可出现内存溢出,使程序停止,也不会回收此对象来释放空间
软引用:当内存不足时,会回收这些对象的内存,用来实现内存敏感的高速缓存
弱引用:无论内存是否紧张,被垃圾回收器发现立即回收
虚引用:和没有任何引用一样
 
9: 不能直接使用迭代输出 map 中的全部内容:
  对于 map 接口来说,其本身是不能直接使用迭代进行输出的,因为 map 中每个位置存放的是一对值( key -value , 而使用 iterator 中每次只能找到一个值,所以如果非要使用迭代进行输出,则必须按照以下步骤完成,
  1 ,将 map 的实例通过 entryset ()方法变为 set 接口对象
  2 ,通过 set 接口实例化为 iterator
  3 ,通过 iterator 迭代输出,每个内容的 map.entry 的对象
  4 ,通过 map.entry 进行 key --value 的分离
 
10: 关于 map 中重复的键值存在的解决办法
使用 hashmap 的过程中,不允许有重复的键值存在,不允许键值为空,如但是如果在编写过程中,出现了增加两个相同的元素, hashmap ,只会打印出一个值,另一个被覆盖了。
但是如果在使用过程中,内容一样,但是使用此类的地址值不一样的话( key1 =key2 )就表示不是重复的 key, 可以添加到集合中,使用 IdentityHashMap 集合 它可以有重复的可以存在,只要两个对象的地址值不同的话,可以解决覆盖问题
 
11 foreach iterator 两个方法
使用了 foreach iterator 两个方法分别输出
Set> all =map.entrySet();
                   // map 接口实例化成一个 set 接口实例
                   Iterator> it =all.iterator();
                   // 声明 iterator 的对象,实例化该对象
                   while (it.hasNext()) {
                            Map.Entry ss = it.next();// 找到 map.entry 实例,实现该对象
                            System.out.println(ss.getKey()+"\t"+ss.getValue());
                           
                   }
                  
                   System.out.println("----------------------------");
                   for (Map.Entry aa : map.entrySet()) {
                            System.out.println(aa.getKey()+"\t"+aa.getValue());                
                   }
 
12 collection collections 两者之间的区别
--collection 集合框架的顶层接口
--collections 工具类,都是用于操作集合的静态方法
 
collections 里面的方法, list 的排序,最值的获取,比较器的逆转,可以将非同步的集合转换为同步集合,实现安全性
collection 是集合框架的顶层接口,两个常用的接口, list set
 
13 :关于构造器的摘要
如果一个类,没有构造方法摘要,说明该类不可以创建对象
如果在该类中还有静态方法,说明该类应该提供静态返回该类型的对象的方法,而且只有一个,说明使用了单例