java中的集合框架(2)
JDK提供的处理键值对数据的集合类
Map接口是处理键值对数据的顶级集合接口。
HashMap类
Hashtable类
HashMap类
- 可以处理键值对数据
- 保存键值对数据的存储空间会自动扩展。
- 所保存的键值对数据可以为null.
- 保存的键值对数据是无序的。
- 不能有重复的键【重复的键算一个数据】
构造方法:
HashMap() 构造一个空的 HashMap ,默认初始容量(16)和默认负载系数(0.75)。
HashMap(int initialCapacity) 构造一个空的 HashMap具有指定的初始容量和默认负载因子(0.75)。
HashMap(int initialCapacity, float loadFactor) 构造一个空的 HashMap具有指定的初始容量和负载因子。
HashMap(Map m) 将实现Map接口的集合类转换成HashMap
实例方法:
put(K key, V value) 添加键值对数据。
size() 得到集合中键值对元素的个数。
isEmpty() 判断集合书否为空
clear() 清空集合。
containsKey(Object key) 判断指定的键数据在集合中是否存在。
containsValue(Object value) 判断指定的值数据在集合中是否存在 。
get(Object key)根据指定的键数据得到与这个键对应的值数据。
remove(Object key)根据指定的键数据删除整个键值对数据。
replace(K key, V oldValue, V newValue) 根据指定的键数据替换对应的值数据。
遍历键值对集合:
Set<K> keySet() 得到键值对集合中所有键值对数据的键数据保存到set集合中
Collection<V> values() 得到键值对集合中所有键值对数据的键数据保存到Collection<V>集合中
Set<Map.Entry<K,V>> entrySet()得到键值对集合中所有键值对数据保存到Set<Map.Entry<K,V>>集合中
例如:
public static void main(String[] args) {
//构造方法:
//HashMap() 构造一个空的 HashMap ,默认初始容量(16)和默认负载系数(0.75)。
HashMap map1=new HashMap();
//HashMap(int initialCapacity) 构造一个空的 HashMap具有指定的初始容量和默认负载因子(0.75)。
HashMap map2=new HashMap(30);
//HashMap(int initialCapacity, float loadFactor) 构造一个空的 HashMap具有指定的初始容量和负载因子。
HashMap map3=new HashMap(30,0.5f);
//HashMap(Map m) 将实现Map接口的集合类转换成HashMap
HashMap map4=new HashMap(map2);
//put(K key, V value) 添加键值对数据。
HashMap map=new HashMap();
map.put(100,"zhangsan");
map.put(12.5,true);
map.put("test",1000);
map.put(false,168.5);
//键值对数据可以为null.
map.put(null, "java");
map.put("www",null);
//不能有重复的键.可以有重复的值
map.put(null,null);
//size() 得到集合中键值对元素的个数。
System.out.println("size===="+map.size());
//containsKey(Object key) 判断指定的键数据在集合中是否存在。
System.out.println("containsKey===="+map.containsKey("zhangsan"));
//containsValue(Object value) 判断指定的值数据在集合中是否存在 。
System.out.println("containsValue===="+map.containsValue("zhangsan"));
//get(Object key)根据指定的键数据得到与这个键对应的值数据。
System.out.println("get===="+map.get("test"));
//remove(Object key)根据指定的键数据删除整个键值对数据。
map.remove(null);
System.out.println("size===="+map.size());
//replace(K key, V oldValue, V newValue) 根据指定的键数据替换对应的值数据。
map.replace("test",1000,"hello");
System.out.println("get===="+map.get("test"));
//Set<K> keySet() 得到键值对集合中所有键值对数据的键数据保存到set集合中
Set keyset=map.keySet();
for(Object objkey:keyset){
System.out.println("key==="+objkey);
}
//Collection<V> values() 得到键值对集合中所有键值对数据的键数据保存到Collection<V>集合中
Collection vals=map.values();
for(Object objvalue:vals){
System.out.println("value==="+objvalue);
}
//Set<Map.Entry<K,V>> entrySet()得到键值对集合中所有键值对数据保存到Set<Map.Entry<K,V>>集合中
Set k_v_set=map.entrySet();
for(Object obj:k_v_set){
System.out.println(obj);
}
//遍历Map集合的方法
HashMap<String,String> testmap=new HashMap<String,String>();
testmap.put("name","zhangsan");
testmap.put("pass","123456");
testmap.put("address","西安");
for(Map.Entry<String,String> entry:testmap.entrySet()){
//System.out.println("mykey=="+entry.getKey());
//System.out.println("myvalue=="+entry.getValue());
System.out.println("k-v=="+entry.getKey()+":"+entry.getValue());
}
}
Hashtable类
1.可以处理键值对数据
2.保存键值对数据的存储空间会自动扩展。
3.不允许null出现
4.不能有重复的键【重复的键算一个数据】
5.保存的键值对数据是无序的。
构造方法:
Hashtable() 构造一个空的 Hashtable,默认初始容量(11)和默认负载系数(0.75)。
Hashtable(int initialCapacity) 构造一个空的 Hashtable具有指定的初始容量和默认负载因子(0.75)。
Hashtable(int initialCapacity, float loadFactor) 构造一个空的 Hashtable具有指定的初始容量和负载因子。
Hashtable(Map m) 将实现Map接口的集合类转换成Hashtable
实例方法:
put(K key, V value) 添加键值对数据。
size() 得到集合中键值对元素的个数。
isEmpty() 判断集合书否为空
clear() 清空集合。
containsKey(Object key) 判断指定的键数据在集合中是否存在。
containsValue(Object value) 判断指定的值数据在集合中是否存在 。
get(Object key)根据指定的键数据得到与这个键对应的值数据。
remove(Object key)根据指定的键数据删除整个键值对数据。
replace(K key, V oldValue, V newValue) 根据指定的键数据替换对应的值数据。
遍历键值对集合:
Set<K> keySet() 得到键值对集合中所有键值对数据的键数据保存到set集合中
Collection<V> values() 得到键值对集合中所有键值对数据的键数据保存到Collection<V>集合中
Set<Map.Entry<K,V>> entrySet()得到键值对集合中所有键值对数据保存到Set<Map.Entry<K,V>>集合中
例如:
public static void main(String[] args) {
Hashtable<String,Object> table= new Hashtable<String,Object>();
table.put("name","zhangsan");
table.put("age",23);
table.put("sex",true);
table.put("height",168.5);
//table.put("height",167.5);
//table.put(null,168.5);
//table.put("height",null);
System.out.println("size=="+table.size());
for(Map.Entry<String,Object> entry: table.entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
Collections类 【集合操作类的辅助类】
提供对集合进行操作的查询,复制,排序,线程安全操作的一系列静态方法
集合操作类的辅助类,与数组的辅助类【Arrays】相似。
例如:
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<String>();
list.add("name");
list.add("zhangsan");
list.add("age");
list.add("height");
list.add("sex");
list.add("address");
Collections.sort(list);
for(String str:list){
System.out.println(str);
}
}
作业:
1.Collection接口与Map接口的区别?
2.HashMap与Hashtable的区别?