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
:关于构造器的摘要
如果一个类,没有构造方法摘要,说明该类不可以创建对象
如果在该类中还有静态方法,说明该类应该提供静态返回该类型的对象的方法,而且只有一个,说明使用了单例