1.Map
采用了 Key-value键值对映射的方式进行存储 ;
* key在Map里面是唯一的但是value可以重复,一个key对应一个value,如果重复value将被覆盖;
* key是无序、唯一的,value是无序可重复的;
/**
* Collection每次只能保存一个对象,Map主要负责保存一对对象的信息;
* Map存放的信息的最终目的是为了信息的查找,Collection存放信息的最终目的输出;
* public interface Map<K,V>
* 主要方法:
* V put(K key,V value)想集合保存数据
* V get(Object key) 根据key查找对应的value值
* Set<Map.Entry<K,V>> entrySet() 将map集合转化为set集合;
* Set<K> keySet() 取出所有的key
* Map中常用的子类:HashMap,Hashtable
* Map的特点:
* 采用了 Key-value键值对映射的方式进行存储 ;
* key在Map里面是唯一的但是value可以重复,一个key对应一个value,如果重复value将被覆盖;
* key是无序、唯一的,value是无序可重复的;
* public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable
* HashMap特点:存储一组无序,key和空value可为null对象;
* public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, Serializable
* a.JDK1.0提供的;
* b.key和空value不允许为null对象, 但是允许空字符;
* HashMap和hashTable的确保
* HashMap:jdk1.2推出,采用异步处理,非线程安全,允许设置key和value值为null;
* HashTable:jdk1.0推出,采用同步处理,线程安全,不允许设置key和value的值为null;
*
*
*/
Map<String,Object> map=new HashMap<String,Object>();
map.put("1", "amy");
map.put("1", "mike");
map.put("", "null");
map.put(null, null);
map.put("2", 1000);
System.out.println(map);
Map<String,Object> ht=new Hashtable<String,Object>();
ht.put("1", "amy");
ht.put("1", "mike");
ht.put("", "null");
ht.put("3", "33");
ht.put("2", 1000);
ht.put("", "");
System.out.println(ht);
2.关于Iteration输出问题
/* *Iterator的输出问题;
* 在Map中很遗憾没有返回Iterator的方法;由于Collection和Map保存数据的特点,可以可以知道当我们使用put(key,value)方法想Map集合中保存一对数据的时候,
* 实际上会自动封装为Map.Entry<K,V>接口对象;
* public static interface Map.Entry<K,V>
* 主要方法:
* K getKey()获取key值
* V getValue()获取value值
* Map集合利用iterator接口输出的步骤;
* a.利用Map接口中的 entrySet()方法将Map集合变为set集合,里面的泛型是Map.Entry<K,V>
* b.利用Set集合中的iterator()方法将Set集合进行输出;
* c.每次迭代取出的都是Map.Entry<K,V>接口对象,利用对象进行key和value的获取;
* */
Map输出实现
1.最常用的方式
//使用泛型
Map<String,Object> map=new HashMap<String,Object>();
map.put("1", "amy");
map.put("1", "mike");
map.put("", "null");
map.put(null, null);
map.put("2", 1000);
Set<Entry<String, Object>> entrySet = map.entrySet();
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
while(iterator.hasNext()) {
Entry<String, Object> next = iterator.next();
String key=next.getKey();
Object value = next.getValue();
System.out.println("key: "+key+" value :"+value);
}
//不使用泛型
Map map1=new HashMap<String, Object>();
map1.put("name", "李白");
map1.put("name", "李煜");
Iterator iterator = map1.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, Object> next = (Map.Entry<String, Object>)iterator.next();
String key = next.getKey();
Object value=next.getValue();
//System.out.println(key+" : "+value);
}
JDK1.8 使用Lambda表达式
map.forEach((k,v)->{
System.out.println("key "+k+" value "+v);
}
);
2.其他输出方式
Map<String,Object> map=new HashMap<String,Object>();
map.put("1", "amy");
map.put("1", "mike");
map.put("", "null");
map.put(null, null);
map.put("2", 1000);
//使用泛型
//取出所有的键
for (Map.Entry<String, Object> entry : map.entrySet()) {
//System.out.println(entry.getKey()+" : "+entry.getValue());
}
//分别取出key和value
for (Object key : map.keySet()) {
System.out.println(key);
}
//取出所有的值
for (Object val : map.values()) {
System.out.println(val);
}
//通过键取值
for (String string : map.keySet()) {
String key=string;
Object value = map1.get(key);
System.out.println(key+" : "+value);
}
Map中key的相关说明
/**
* Map集合中key值得说明
* 自定义得类作为key值必须重写Object中的hashCode()和equals()(只有这两个方法可以确定元素是否重复),在Map中指的是是否可以找到;
* 在实际中尽量考虑用String
*/