- 浏览: 642276 次
文章分类
最新评论
-
netkongjian:
不错的报表工具知识分享![deyi]
报表漫谈 -
jiranjiran:
...
Eclipse + SVN + Google code 搭建代码仓库
黑马程序员<<Map>>
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
1. Map
Map也是一个集合,只是是以键值对存储的,常见的子类有Hashtable,HashMap,TreeMap。
Hashtable:是1.0版本,底层的数据结构是哈希表,键和值和不能是null值,线程安全,和HashMap比较,效率低。
HashMap:是1.2版本的,底层也是哈希表数据结构,键和值可以为空(null),线程不安全,效率比较高。更确切的说,HashMap是Hashtable的升级版。
TreeMap:可以排序,底层是二叉树。
下面以HashMap为例,介绍一下Map集合。
2. HashMap
1. 添加元素
import java.util.HashMap; import java.util.Map; public class MapDemo { public static void main(String[] args) { /* 定义了一个Map集合,键和值的类型都是String */ Map<String, String> map = new HashMap<String, String>(); map.put("110", "张三"); map.put("111", "李四"); map.put("112", "王五"); System.out.println("Map集合中的键和值:" + map); System.out.println("----------------"); /* 利用put方法来添加元素,返回值是当前键以前对应的值,如果没有则返回null *当添加了相同的键,那么新的键和值会替换原来的键和值 * */ System.out.println(map.put("111", "赵六"));//这里返回的是李四,因为此集合中前面有111键对应的值 System.out.println(map.put("113", "王刚"));//此时返回的是null,因为此集合中前面没有与113键对应的值 System.out.println("Map集合中的键和值:" + map); } } 结果: Map集合中的键和值:{112=王五, 110=张三, 111=李四} ---------------- 李四 null Map集合中的键和值:{112=王五, 113=王刚, 110=张三, 111=赵六}
2.判断元素
import java.util.HashMap; import java.util.Map; public class MapDemo { public static void main(String[] args) { /* 定义了一个Map集合,键和值的类型都是String */ Map<String, String> map = new HashMap<String, String>(); map.put("110", "张三"); map.put("111", "李四"); map.put("112", "王五"); System.out.println("Map集合中的键和值:" + map); /* * 利用booleancontainsKey(Object key)判断集合中是否有此键利用boolean * containsValue(Objectvalue)判断此集合中是否有此值 */ System.out.println("集合中是否包含110键:" + map.containsKey("110")); System.out.println("集合中是否包含000键:" + map.containsKey("000")); System.out.println("集合中是否包含 张三 值:" +map.containsValue("张三")); System.out.println("集合中是否包含 王梅 值:" +map.containsValue("王梅")); } } 结果: Map集合中的键和值:{112=王五, 110=张三, 111=李四} 集合中是否包含110键:true 集合中是否包含000键:false 集合中是否包含 张三 值:true 集合中是否包含 王梅 值:false
3.删除元素
import java.util.HashMap; import java.util.Map; public class MapDemo { public static void main(String[] args) { /* 定义了一个Map集合,键和值的类型都是String */ Map<String, String> map = new HashMap<String, String>(); map.put("110", "张三"); map.put("111", "李四"); map.put("112", "王五"); map.put("113", "赵六"); System.out.println("Map集合中的键和值:" + map); /* * 利用remove(Objectkey)通过键来删除元素,返回值是此键以前对应的值,如果不存在返回null 利用void * clear()清空集合中的元素 */ System.out.println("删除 110键对应的元素:" + map.remove("110"));// 这里返回是张三 System.out.println("删除 120键对应的元素:" + map.remove("120"));// 这里返回null,因为此集合中没有120对应的值 System.out.println("删除指定元素的集合:" + map); map.clear();// 清空集合 System.out.println("清空集合后的集合:" + map); } } 结果: Map集合中的键和值:{112=王五, 113=赵六, 110=张三, 111=李四} 删除 110键对应的元素:张三 删除 120键对应的元素:null 删除 指定元素的集合:{112=王五, 113=赵六, 111=李四} 清空集合后的集合:{}
3. 获取元素
1.单个获取
import java.util.HashMap; import java.util.Map; public class MapDemo { public static void main(String[] args) { /* 定义了一个Map集合,键和值的类型都是String */ Map<String, String> map = new HashMap<String, String>(); map.put("110", "张三"); System.out.println("Map集合中的键和值:" + map); /* * 利用get(Objectkey)获取键对应的单个值,如果不存在,然会null */ System.out.println("获取110对应的值:" + map.get("110"));// 这里返回是张三 System.out.println("获取111对应的值:" + map.get("111"));// 这里返回是null } } 结果: Map集合中的键和值:{110=张三} 获取110对应的值:张三 获取111对应的值:null
2. 获取键的集合
package www.fuxi.jihe; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapDemo { public static void main(String[] args) { /* 定义了一个Map集合,键和值的类型都是String */ Map<String, String> map = new HashMap<String, String>(); map.put("110", "张三"); map.put("111", "李四"); map.put("112", "王五"); System.out.println("Map集合中的键和值:" + map); /* * 利用Set<K>keySet()获取集合中键的集合返回值是Set集合 * 我们可以通过Set集合中的迭代器读取出键,然后再通过get(key)获取元素 */ Set<String> set = map.keySet();// 获得键的集合 Iterator<String> it = set.iterator();// 获得键集合的迭代器 while (it.hasNext()) { String key = it.next(); System.out.println(key + ":" + map.get(key)); } /* * 利用Set<K>keySet()获取集合中键的集合返回值是Set集合然后把集合装换成数组,然后读取也可以 */ System.out.println("----------\n"); Object[] keys = set.toArray(); for (int i = 0; i < keys.length; i++) { System.out.println((String) keys[i] + ":" + map.get((String) keys[i])); } } } 结果: Map集合中的键和值:{112=王五, 110=张三, 111=李四} 112:王五 110:张三 111:李四 ---------- 112:王五 110:张三 111:李四
3.获取值的集合
packagewww.fuxi.jihe; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapDemo { publicstatic void main(String[] args) { /* 定义了一个Map集合,键和值的类型都是String */ Map<String,String> map = new HashMap<String, String>(); map.put("110","张三"); map.put("111","李四"); map.put("112","王五"); System.out.println("Map集合中的键和值:" + map); /** * 通过方法Collection<V>values()获得集合中的所有值 */ System.out.println("集合中的值:"); Collection<String>values=map.values(); Iteratorit=values.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }结果: Map集合中的键和值:{112=王五, 110=张三, 111=李四} 集合中的值: 王五 张三 李四
4. 通过映射关系
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapDemo { public static void main(String[] args) { /* 定义了一个Map集合,键和值的类型都是String */ Map<String, String> map = new HashMap<String, String>(); map.put("110", "张三"); map.put("111", "李四"); map.put("112", "王五"); System.out.println("Map集合中的键和值:" + map); /* * 利用Set<Map.Entry<K,V>>entrySet()获取集合中的映射关系 * 然后通过迭代器读取Set集合 * 然后利用Map.Entry中的K getKey()获得键,V getValue()获取值 */ Set<Map.Entry<String,String>> set=map.entrySet();//获得映射的集合 Iterator<Map.Entry<String,String>> it=set.iterator();//获得迭代器 while(it.hasNext()){ Map.Entry<String, String> en=it.next();//获取集合中的元素 String key=en.getKey(); String value=en.getValue(); System.out.println("键-值:"+key+"-"+value); } } } 结果: Map集合中的键和值:{112=王五, 110=张三, 111=李四} 键-值:112-王五 键-值:110-张三 键-值:111-李四
Map.Entry是Map中的静态接口,此表示的把Map中的元素表示为映射关系
staticinterface |
4. HashMap和TreeMap的比较使用
HashMap比较的时候依赖于hashCode()和equals(Object ob)方法
TreeMap可以添加比较器或者是自然排序,对象实现接口comparable。
1. 利用HashMap
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HashMapDemo { public static void main(String[] args) { /* 定义HashMap,里面存储的是Student和地址 */ HashMap<Student, String> map = new HashMap<Student, String>(); map.put(new Student("张三", 23), "北京"); map.put(new Student("李四", 24), "上海"); map.put(new Student("王五", 23), "南京"); map.put(new Student("张三", 23), "广州");// 存了一个重复的值 // 第一种读取方式 Set<Student> set = map.keySet(); Iterator<Student> it = set.iterator(); while (it.hasNext()) { Student stu = it.next(); String name = stu.getName(); int age = stu.getAge(); String address = map.get(stu); System.out.println(name + ":" + age + ":" + address); } System.out.println("---------"); System.out.println("下面利用的是映射关系读取"); Set<Map.Entry<Student, String>> ens = map.entrySet(); Iterator<Map.Entry<Student, String>> its =ens.iterator(); while (its.hasNext()) { Map.Entry<Student, String> me = its.next(); Student stu = me.getKey(); String address = me.getValue(); System.out.println(stu.getName()+ ":" + stu.getAge() + ":" + address); } } } 结果: 张三:23:广州 王五:23:南京 李四:24:上海 --------- 下面利用的是映射关系读取 张三:23:广州 王五:23:南京 李四:24:上海
2. 利用TreeMap排序
import java.util.HashMap; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo { public static void main(String[] args) { /* 定义HashMap,里面存储的是Student和地址 */ TreeMap<Student, String> map = new TreeMap<Student, String>(); map.put(new Student("张三", 23), "北京"); map.put(new Student("李四", 21), "上海"); map.put(new Student("王五", 24), "南京"); map.put(new Student("赵六", 26), "广州"); Set<Student> set = map.keySet(); Iterator<Student> it = set.iterator(); while (it.hasNext()) { Student stu = it.next(); String name = stu.getName(); int age = stu.getAge(); String address = map.get(stu); System.out.println(name + ":" + age + ":" + address); } } } 结果: 李四:21:上海 张三:23:北京 王五:24:南京 赵六:26:广州
从结果可以看出,是按照年龄排序的,所以说TreeSet是具有排序的功能。
那么现在我们自定义比较器,是按照姓名排序。
import java.util.Comparator; public class StuNameComparatorimplements Comparator<Student> { /*按照姓名排序,如果姓名相同,那么按照年龄排序*/ public int compare(Student o1, Student o2) { int num = o1.getName().compareTo(o2.getName()); if (num == 0) { return o1.getAge() - o2.getAge(); } return num; } } import java.util.HashMap; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo { public static void main(String[] args) { /* 定义HashMap,里面存储的是Student和地址 */ TreeMap<Student, String> map = new TreeMap<Student, String>(newStuNameComparator()); map.put(new Student("java03", 23), "北京"); map.put(new Student("net02", 21), "上海"); map.put(new Student("java01", 24), "南京"); map.put(new Student("net03", 26), "广州"); Set<Student> set = map.keySet(); Iterator<Student> it = set.iterator(); while (it.hasNext()) { Student stu = it.next(); String name = stu.getName(); int age = stu.getAge(); String address = map.get(stu); System.out.println(name + ":" + age + ":" + address); } } } 结果: java01:24:南京 java03:23:北京 net02:21:上海 net03:26:广州
从结果可以看出,是按照姓名排序的,如果姓名相同,就按照年龄排序。
5. 练习
计算字符串中字符的个数,并且输出格式:a(1)b(3)c(4)….
思路:
1.把字符串转化成字符数组后,然后开始遍历数组
2.在遍历的时候,没读取一个字符,然后在集合中查看,如果存在则读取出来,然后数量加1,然后在存入里面如果没有,则添加里面,数量是1.
3.输出格式,读取集合然后拼接字符串,利用StringBuffer。
packagewww.fuxi.jihe; importjava.util.HashMap; importjava.util.Iterator; importjava.util.Map; importjava.util.Set; public classMapDemo { public static void main(String[] args) { String str ="ahjdkdmkamkmixkxmcsnlasickdj"; char[] cs = str.toCharArray(); HashMap<Character, Integer> map= new HashMap<Character, Integer>(); for (char c : cs) { if (map.containsKey(c)) { Integer count =map.get(c);// 取出此字符对应的数量 count++;// 数量++ map.put(c, count);// 然后重新添加里面,覆盖原来的 } else { map.put(c, newInteger(1));// 开始数量为1 } } StringBuffer bu = new StringBuffer(); Set<Character> set =map.keySet(); Iterator<Character> it =set.iterator(); while (it.hasNext()) { Character c = it.next(); Integer count = map.get(c); bu.append(c).append("(").append(count).append(")"); } System.out.println(bu); } } 结果: d(3)s(2)c(2)a(3)n(1)l(1)m(4)j(2)k(5)h(1)x(2)i(2)
要是使用的是TreeMap,那么就会按照字符排序。
6. 模拟学校
模拟学校,然后读取学校中班级—学生信息
利用的是集合中嵌套集合
package www.fuxi.jihe; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; class CollegeStudent { private Stringnum; private Stringname; CollegeStudent(Stringnum, String name) { super(); this.num =num; this.name =name; } public StringgetNum() { return num; } public StringgetName() { returnname; } } public class Demo { public staticvoid main(String[] agrs) { /* 学校 */ HashMap<String,List<CollegeStudent>> bdxy = new HashMap<String,List<CollegeStudent>>(); List<CollegeStudent>ruanjian = new ArrayList<CollegeStudent>();// 软件班 List<CollegeStudent>jiying = new ArrayList<CollegeStudent>();// 计应班 /* 把班级添加到学校中 */ bdxy.put("ruanjian",ruanjian); bdxy.put("jiying",jiying); /*向班级中添加学生*/ ruanjian.add(newCollegeStudent("110","zhansgan") ); ruanjian.add(newCollegeStudent("111","lisi") ); ruanjian.add(newCollegeStudent("112","王五")); jiying.add(newCollegeStudent("210","wangang") ); jiying.add(newCollegeStudent("211","wangemi") ); jiying.add(newCollegeStudent("212","xiaoqiang") ); /* 遍历学校中的班级,然后读取班级中的学生信息 */ Set<String>set = bdxy.keySet();// 获取班级名称集合 Iterator<String>it = set.iterator(); while(it.hasNext()) { StringClassName = it.next(); List<CollegeStudent>ClassInfo = bdxy.get(ClassName);// 获得班级 System.out.println(ClassName); show(ClassInfo); } } /* 输出班级的学生 */ public staticvoid show(List<CollegeStudent> list) { Iterator<CollegeStudent>it = list.iterator(); while(it.hasNext()) { CollegeStudentstu = it.next(); System.out.println(" |-"+stu.getNum() + ":" +stu.getName()); } } } 结果: jiying |-210:wangang |-211:wangemi |-212:xiaoqiang ruanjian |-110:zhansgan |-111:lisi |-112:王五
7.补充知识点
package www.fuxi.jihe; import java.util.HashMap; import java.util.Map; public class Text { public static void main(String[] args) { Map<String,String> map=new HashMap<String,String>(); map.put("110", "zhangsan"); map.put("111", "lisi"); map.put("112", "wangwu"); System.out.println("集合:"+map); /*boolean isEmpty()判断是否为空*/ System.out.println(map.isEmpty()); /*int size()判断集合中映射关系的个数*/ System.out.println("大小:"+map.size()); } } 结果: 集合:{112=wangwu, 110=zhangsan, 111=lisi} false 大小:3
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
相关推荐
List<Bean>转换为List<Map>, List<Object>转换为List<Object> list转化为 JsonArray ,list转换JsonArray
一般使用springjdbc、hibernate的sql查询,库获取到的数据都是List<Map<String, Object>>结果集,如果我们要转化为JavaBean,则需要做一系列的map.get(),然后obj.set()。 此工程中就是解决List<Map<String, Object>...
1. Map里存放的是bean时<br><br><logic:iterate id="destMap" name="srcMap"><br><br> <bean:define id="bean" name="destMap" property="value" /><br><br> <bean:write name="bean" property="name" /><br><br></...
public String helloHtml(HashMap<String, Object> map) { map.put("hello", "欢迎进入HTML页面"); return "/index"; } } --------------------------- HelloWorldController --------------------------- ...
<br><br>}<br><br>或者:<br><br>Map map = new HashMap();<br><br>for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {<br><br> Object key = iter.next();<br><br> Object val = map.get(key);<br>...
<transmission><forwardGears/></transmission> <speed>1234</speed> <heading>456</heading> <accelSet> <long>12</long> <lat>34</lat> <vert>56</vert> <yaw>78</yaw> </accelSet> <brakes> </brakes>...
javascript 模拟 java中的 List,Map<br>js文件为 js/utils.js<br>IE6.0 测试通过<br><br>List:<br>add(var obj) //添加一个元素<br>remove(var index) //删除一个元素<br>get(var index) //获取一个元素<br>remove...
stl的配置方法:<br>1、将jstl.jar和standard.jar拷贝到web-inf/lib下即可(如只使用...c:foreach-map</li><br><br> <c:forEach items="${map}" var="v"><br> ${v}<br><br> ${v.key}=${v.value }<br><br> </c:forEach>
" ></iframe> <br> <br> <br> </div><br> <img name="map" src="/image/maptop.gif" width="950" height="976" border="0" id="map" usemap="#m_map" alt="" /><br> <map name="m_map" id="m_map"><br> <area ...
GetObject 方法<br> getResource 方法<br> LogEvent 方法<br> MapNetworkDrive 方法<br> Popup 方法<br> Quit 方法<br> Read 方法<br> ReadAll 方法<br> ReadLine 方法<br> RegDelete 方法<br> RegRead 方法<br> ...
将list<Map>转换成JavaBean的工具类
<map> <entry key="交通银行" value="20200302"></entry> <entry> <key> <value>中信银行</value> </key> <value>6222620222266667</value> </entry> </map> </...
<name>Open Cycle Map1</name> <minZoom>1</minZoom> <maxZoom>20</maxZoom> <tileType>PNG</tileType> <tileUpdate>None</tileUpdate> <url>http://mt0.google.com/vt/lyrs=s,m&hl=iw&x={$x}&y={...
<br><br> <br><br>系统需求<br><br>1.Visual Studio 2005或更高版本<br><br>2.Microsoft ASP.NET AJAX Extensions支持<br><br>3.Internet Explorer 7.0或Mozilla Firefox 2.x<br><br> <br><br>你只需完成以下几步:...
<P>map集合转化成xml字符串</P> <P>xml字符串转化成map集合</P> <P>list集合转化成xml字符串</P> <P>xml字符串转化成list集合</P>
<center><h1><em>Hello,I am Gogo.</em></h1></center> <center> <ul class="information"> <li></li> <li></li> <li></li> </ul></center> </div> <div class="about" id="about"> <img alt="gogo.jpg" ...
<map name="Map"> <area shape="circle" coords="60,60,63" href="sc.chinaz.com"> </map> </div> <div id="content"> <div id="posts"> <div class="post"> <h2>Retro Photos</h2> <div><span class="date...
<li><a href="../menu/old_master.html" title="Image Map for detailed information">image map</a></li> <li><a href="../menu/bodies.html" title="fun with background images">fun backgrounds</a></li> <li><a...
<br><br><br><br>系统需求<br><br>1.Visual Studio 2005或更高版本<br><br>2.Microsoft ASP.NET AJAX Extensions支持<br><br>3.Internet Explorer 7.0或Mozilla Firefox 2.x<br><br><br><br>你只需完成以下几步:<br...
><br><ARCXML version="1.1"><br><REQUEST><br><GET_IMAGE><br><PROPERTIES><br><ENVELOPE minx="-125" miny="25" maxx="-67" maxy="50" /><br><IMAGESIZE width="700" height="500" /><br></PROPERTIES><br></GET_...