Map
集合的整理
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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
关键字声明的内部接口,此接口可以由外部通过外部类。内部类直接调用

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

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
之间的区别

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<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());                

                   }

 

12
collection
collections
两者之间的区别

--collection
集合框架的顶层接口

--collections
工具类,都是用于操作集合的静态方法

 

collections
里面的方法,
list
的排序,最值的获取,比较器的逆转,可以将非同步的集合转换为同步集合,实现安全性

collection
是集合框架的顶层接口,两个常用的接口,
list set

 

13
:关于构造器的摘要

如果一个类,没有构造方法摘要,说明该类不可以创建对象

如果在该类中还有静态方法,说明该类应该提供静态返回该类型的对象的方法,而且只有一个,说明使用了单例