Java笔记
来源:互联网 发布:冰川网络股票代码 编辑:程序博客网 时间:2024/06/01 08:55
Map集合使用键值对来存储数据,将键映射到值对象,一个映射不能包含重复的键,每一个键最多只能映射到一个值。Map也被称为双列集合,对应的Collection集合是单列集合。
- Map集合的常用方法:
Map< K, V>
1. 添加
V put(K key,V value):返回前一个和key关联的值,如果没有返回null。如果此映射以前包含一个该键的映射关系,则用指定值替换旧值
2. 删除
void clear():清空Map集合
V remove(Object key):根据指定的key移除这个键值对,如果不存在key,返回null。
3. 判断
boolean containsKey(Object key):是否包含key
boolean containsValue(Object value):是否包含value
boolean isEmpty():Map集合是否为空,为空则返回true。
4. 获取
V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
int size():获取键值对的个数
Collection< V> values():返回此映射中包含的值的 Collection 视图。就是说返回一个包含Map集合中的值的Collection集合。
public static void main(String[] args){ Map<Integer, String> map = new HashMap<Integer, String>(); map.put(5,"zhangsan"); map.put(3,"wangwu"); map.put(2,"zhangsan"); map.put(6,"zhaoliu"); Collection<String> values = map.values(); Iterator<String> it2 = values.iterator(); while(it2.hasNext()){ System.out.println(it2.next()); }}
输出结果:
zhangsan
wangwu
zhangsan
zhaoliu
- Map集合取出元素的方法:
1. keySet
Collection集合中有迭代器,可以使用迭代器来取出Collection集合中的元素,但是Map集合中没有迭代器。通过keySet方法获取Map集合中所有的键所在的Set集合,再通过Set的迭代器获取到每一个键对应的值。
public static void main(String[] args){ Map<Integer, String> map = new HashMap<Integer, String>(); keySet(map);}public static void keySet(Map<Integer, String> map){ map.put(5,"zhangsan"); map.put(3,"wangwu"); map.put(2,"zhangsan"); map.put(6,"zhaoliu"); Set<Integer> ks = map.keySet(); Iterator<Integer> it = ks.iterator(); while(it.hasNext()){ Integer key = it.next(); String value = map.get(key); System.out.println(key+"...."+value); }}
输出结果:
2….zhangsan
3….wangwu
5….zhangsan
6….zhaoliu
2. entrySet
通过Map集合中的方法Set< Map.Entry< K,V>> entrySet()返回此映射中包含的映射关系的 Set 视图。该方法将Map集合中键与值的映射关系作为对象存储到Set集合中,Set集合中元素的类型就是Map.Entry类型的。
Map.Entry< K,V>是一个接口,表示映射项(键-值对)。接口中包含两个方法getKey()和getValue()分别返回对应的键和值。
public static void main(String[] args){ Map<Integer, String> map = new HashMap<Integer, String>(); entrySet(map);}public static void entrySet(Map<Integer, String> map){ map.put(5,"zhangsan"); map.put(3,"wangwu"); map.put(2,"zhangsan"); map.put(6,"zhaoliu"); Set<Map.Entry<Integer, String>> entrySet =map.entrySet(); Iterator<Map.Entry<Integer, String>> it = entrySet.iterator(); while (it.hasNext()) { Map.Entry<Integer, String> en = it.next(); Integer key = en.getKey(); String value = en.getValue(); System.out.println(key+".........."+value); }}
输出结果:
2……….zhangsan
3……….wangwu
5……….zhangsan
6……….zhaoliu
- Map集合常用子类
1. HashTable
HashTable的内部结构是哈希表,是同步的。HashTable不允许null作为键,也不允许null作为值。
HashTable在JDK1.0就已经出现了,当时还没有集合框架,没有Map集合。所以在当时单列集合就是Vector,双列集合就是HashTabel。
HashTable有一个十分重要的子类就是Properties类。它用来存储键值对型的配置文件信息。
2. HashMap
关于HashMap详解参见:http://alex09.iteye.com/blog/539545
下面直接举例说明:
public static void main(String[] args){ HashMap<Student,String> hm = new HashMap<Student,String>(); hm.put(new Student("lisi",23),"北京"); hm.put(new Student("zhaoliu",24),"上海"); hm.put(new Student("xiaoqiang",31),"沈阳"); hm.put(new Student("wangcai",28),"大连"); hm.put(new Student("zhaoliu",24),"铁岭"); Set<Map.Entry<Student,String>> entrySet = hm.entrySet(); Iterator<Map.Entry<Student,String>> it = entrySet.iterator(); while(it.hasNext()){ Map.Entry<Student,String> en = it.next(); Student key = en.getKey(); String value = en.getValue(); System.out.println(key.getName()+":"+key.getAge()+"---"+value); }}public class Person { private String name; private int age; //此处省略构造函数,get、set方法,hashCode方法,equals方法,toString方法}public class Student extends Person{ public Student() { super(); } public Student(String name, int age) { super(name, age); } public String toString() { return "Student:"+getName()+":"+getAge(); }}
输出结果:
wangcai:28—大连
lisi:38—北京
zhaoliu:24—铁岭
xiaoqiang:31—沈阳
zhaoliu:24—上海
3. TreeMap
原理参见:http://blog.csdn.net/chenssy/article/details/26668941
举例说明:
public static void main(String[] args) { TreeMap<Student,String> tm = new TreeMap<Student,String>(new ComparatorByName()); tm.put(new Student("lisi",38),"北京"); tm.put(new Student("zhaoliu",24),"上海"); tm.put(new Student("xiaoqiang",31),"沈阳"); tm.put(new Student("wangcai",28),"大连"); tm.put(new Student("zhaoliu",24),"铁岭"); Iterator<Map.Entry<Student, String>> it = tm.entrySet().iterator(); while(it.hasNext()){ Map.Entry<Student,String> me = it.next(); Student key = me.getKey(); String value = me.getValue(); System.out.println(key.getName()+":"+key.getAge()+"---"+value); } }
输出结果:
lisi:38—北京
wangcai:28—大连
xiaoqiang:31—沈阳
zhaoliu:24—铁岭
4. LinkedHashMap
LinkedHashMap由哈希表和链接列表实现,是有序的。
- java笔记
- JAVA笔记
- java笔记
- java笔记
- JAVA笔记
- java笔记
- Java 笔记
- java笔记
- java 笔记
- java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- Java笔记
- java笔记
- java笔记
- WPF X:Shared概述
- 随机非线性问题的随机方法
- 计算机研究生复试上机题目:顺时针螺旋矩阵简单实现
- MyBatis 延迟加载,一级缓存,二级缓存设置
- 函数调用原理与栈
- Java笔记
- 1002. 写出这个数 (20)
- Codeforces 808G Anthem of Berland[dp][kmp]
- Linux下快速MD5检测
- pyrhon--c++--连续子数组的最大和
- Xcode常用快捷键与技巧分享
- Dagger2的使用,这一篇就够了!
- 我的第一篇博客
- vi/vim 介绍和简单实用(转自菜鸟教程)