键值对Map
映射是一个存储关键字和值的关联,或者说是“关键字\值”对的对象,即给定一个关键字key,就可以得到它的值value,关键字必须是唯一的,但是可以存在相同的值。
可以将Map看做是偶对象保存接口,Collection每一次保存一个对象,而Map可以保存一对对象,而这一对对象是按照“key=value”保存的,也就是通过key就可以找到value
map支持的子类
map接口常用方法
我们先通过例子来演示map的使用和其中两个方法entrySet(),keySet()
代码演示:
package demo;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer,String>();
map.put(1, "dodo");
map.put(2, "haha");
map.put(3, "lili");
map.put(4, "lucy");
//获取Map中所有的key组成的集合(key唯一)
Set<Integer> keys = map.keySet();
for (Integer key : keys) {
System.out.println(key+"--->"+map.get(key));
}
}
}
代码结果:
代码演示:
package demo;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer,String>();
map.put(1, "dodo");
map.put(2, "haha");
map.put(3, "lili");
map.put(4, "lucy");
//获取Map中的所有Entry(key-value)
Set<Map.Entry<Integer, String>> entrys = map.entrySet();
for (Entry<Integer, String> entry : entrys) {
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"---->"+value);
}
}
}
代码结果:
代码讲解:我们能够看到,通过entrySet(),和keySet()方法,我们都可以很好将map转换成Set集合来进行迭代输出,能够发现在map中所有的key就是一个set集合
================================================
选用哪一种容器取决于每一种容器的存储特点以及当前业务的需求:
List: 单一元素集合.
允许元素重复/记录元素的添加顺序.
Set:单一元素集合.
不允许元素重复/不记录元素的添加顺序.
既要不重复,又要保证先后顺序:LinkedHashSet.
Map: 双元素集合. 如果存储数据的时候,还得给数据其为一个的一个名称,此时考虑使用Map.
--------------------------------------------------------------------------------
List和Set以及Map之间相互转换问题:
List<String> list = new ArrayList<>();
把List转换为Set:
Set<String> set = new HashSet<>(list);//此时会消除重复的元素.
把Set转换为List:
List<String> list2 = new ArrayList<>(set );
Map不能直接转换为List或Set(但是Map中的方法可以间接转换).
Map在以后运用的非常广泛:比如可以表示JavaBean对象,可以做缓存(工具箱).
JavaBean对象: 多对,属性名=属性值(PS:属性名表示字段名)
Map对象:每一个key-value就好比是一对属性名=属性值.
把Map对象转换为JavaBean对象,把JavaBean对象转换为Map对象.
---------------------------------------------------------------------------------------------
Set,List,Map三种集合并不是都一直是单独使用的,偶尔也会综合使用。
代码演示:
package chap;
import java.util.*;
public class Example {
public static void main(String[] args) {
TreeMap<Integer, String> tm = new TreeMap<Integer,String>();
tm.put(new Integer(10000-2000), "张三");
tm.put(new Integer(10000-1500), "李四");
tm.put(new Integer(10000-3500), "王五");
tm.put(new Integer(10000-500), "赵六");
tm.put(new Integer(10000-5000), "陈二");
Collection<String> collection = tm.values();
Iterator<String> iterator = collection.iterator();
System.out.println("按工资由低到高顺序输出:");
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.println(string+" ");
}
}
}