Map集合的整理
 
hashmap 无序存放 新的操作类,   key不可以重复 ,  内部结构是哈希表
hashtable 无序存放  旧的操作类,   key不允许重复 ,内部结构是哈希表
treemap  可以排序的map集合,按集合中的key排序,key不允许重复,内部结构是二叉树
 
weakhashMap:弱引用的map集合,当集合中的某些内容不再使用时,清除掉无用的数据,使用gc进行回收,system.gc( );
identityHashMapkey可以重复的map集合,
 
1:怎么样让hashmap实现迭代排序
如果hashmap中,想要有迭代顺序,也就是怎么样存就怎样取,那么就使用linkedhashmap,就可以实现,hashmap本身是无序的。
 
2:判断指定的keyvalue是否存在
   使用map接口中提供的containskeyobject key.containsValues(object value)两个方法
 
3:为什么还要继承使用enumeration
在旧的的系统或者是类库中,还在使用enumeration接口,所以掌握很有必要
vector中的Enumeration最早的迭代输出接口,在1,5之后被iterator给替代。用法和iterator相似
 
4mapcollection之间的区别?
collection set list 接口属于单值操作,每次只操作一个对象。
map,每次操作一对对象,即二元偶对象,map中的每个元素都使用key-value的形式存储在集合中,map接口定义
 
map一般很少直接输出,只是作为查询使用的
collection接口在开发中主要作用就是传递内容及输出的
 
5Map.entrySet  Map.keyset
1Map.entrySet 方法返回映射的 collection 视图,其中的元素属于此类。获得映射项引用的唯一 方法是通过此 collection 视图的迭代器来实现。
2map.entrymap内部定义的一个接口,专门来保存key --value的内容
3map.entry是使用static关键字声明的内部接口,此接口可以由外部通过外部类。内部类直接调用
4:  map中提供一个keyset的方法,可以讲map中的全部key变为一个set集合,一旦实例化,可以直接使用迭代方法输出,注意保证set集合中指定的泛型和map中的可以的泛型要保持一致
由于hashmap没有迭代方法,不可以直接取出,只能通过转为set集合,然后使用迭代方法,来间接取出元素
使用keyset遍历得到key的值
Set<String> s =map.keySet();//实例化接口
Iterator<String> it = s.iterator();//使用迭代方法取出元素
简写 
Iterator<String> it=map.keySet().iterator();
 
使用了entryset得到集合中相对应的集合值,遍历出来的
Set<Entry<String,String>> s1 = map.entrySet();
Iterator<Entry<String, String>> it2 =s1.iterator();
 
简写
Iterator<Entry<String, String>> it2 =map.entrySet().iterator();
 
6: hashmap hashtable之间的区别
1hashmapjdk1.2之后推出的,属于新的操作类,hashtablejdk1.0推出的,属于旧的操作类
2hashmap采用异步处理方式,性能更高,hashtable采用同步处理方式,性能较低
3hashmap属于非线程安全的操作类,hashtable属于线程安全的操作类
 
treemapmap中可以发现:数据是经过排序的,按照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集合 它可以有重复的可以存在,只要两个对象的地址值不同的话,可以解决覆盖问题
 
11foreach iterator两个方法
使用了foreach iterator两个方法分别输出
Set<Map.Entry<String,String>> all =map.entrySet();
                   //map接口实例化成一个set接口实例
                   Iterator<Map.Entry<String, String>> it =all.iterator();
                   //声明iterator的对象,实例化该对象
                   while (it.hasNext()) {
                            Map.Entry<String, String> ss = it.next();//找到map.entry实例,实现该对象
                            System.out.println(ss.getKey()+"\t"+ss.getValue());
                           
                   }
                  
                   System.out.println("----------------------------");
                   for (Map.Entry<String, String> aa : map.entrySet()) {
                            System.out.println(aa.getKey()+"\t"+aa.getValue());                
                   }
 
12collectioncollections两者之间的区别
--collection 集合框架的顶层接口
--collections工具类,都是用于操作集合的静态方法
 
collections里面的方法,list的排序,最值的获取,比较器的逆转,可以将非同步的集合转换为同步集合,实现安全性
collection是集合框架的顶层接口,两个常用的接口,list set
 
13:关于构造器的摘要
如果一个类,没有构造方法摘要,说明该类不可以创建对象
如果在该类中还有静态方法,说明该类应该提供静态返回该类型的对象的方法,而且只有一个,说明使用了单例