黑马程序员--java基础之类集框架(三)
Map练习
练习一;1、每个学生对应一个归宿地;
2、学生有姓名和年龄两个属性;
3、如果姓名年龄相同则为同一人;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
//实现Comparable接口是为了防止以后有可能存入TreeSet中;//因为二叉树结构需要有排序,不实现的话是按默认排序,复写其中的CompareTo方法可以自定义排序 class Student implements Comparable<Student>{ private String name; private int age; Student(String name, int age){ this.name = name; this.age = age; } public int compareTo(Student stu){ int num = new Integer(this.age).compareTo(new Integer(stu.age)); if(num == 0) return this.name.compareTo(stu.name); return num; } public int hashCode(){//只要底层数据结构式哈希表的就必须复写其中的hasCode方法和equals方法,要保证元素的唯一性 return name.hashCode() + age*34; } public boolean equals(Object obj){ if(!(obj instanceof Student)) throw new ClassCastException("类型转换异常"); Student stu = (Student)obj; return this.name.equals(stu.name) && this.age == stu.age; } public String getName(){ return name; } public int getAge(){ return age; } public void setName(){ this.name = name; } public void setAge(){ this.age = age; } public String toString(){ return name+"-"+age; }} |
练习二:将练习一的自定义对象排序
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
class myComparator implements Comparator<Student>{ public int compare(Student stu1,Student stu2){ int num = stu1.getName().compareTo(stu2.getName()); if(num == 0) return new Integer(stu1.getAge()).compareTo(new Integer(stu2.getAge())); return num; }}class MapTest{ public static void main(String [] args){ //HashMap<Student,String> hm = new HashMap<Student, String>(); TreeMap<Student,String> tm = new TreeMap<Student,String>(new myComparator()); // hm.put(new Student("zhangsan01",21), "beijing"); // hm.put(new Student("zhangsan02",22), "tianjin"); // hm.put(new Student("zhangsan02",25), "wuhan"); // hm.put(new Student("zhangsan03",23), "chongqing"); // hm.put(new Student("zhangsan04",24), "shanghai"); tm.put(new Student("zhangsan01",21), "beijing"); tm.put(new Student("zhangsan02",22), "tianjin"); tm.put(new Student("zhangsan02",25), "wuhan"); tm.put(new Student("zhangsan03",23), "chongqing"); tm.put(new Student("zhangsan04",24), "shanghai"); 注意:HashMap有两种读取方法 1、用keySet方法,返回Map中的键的引用,放在Set集合中,然后用Set集合的迭代器调用,迭代器返回的对象是自定义对象的引用; Set<Student> set = hm.keySet(); Iterator<Student> it = set.iterator(); while(it.hasNext()){ Student key = it.next(); String value = hm.get(key); System.out.println(key + "----"+ value); } 2、用entrySet方法,返回Map中键值对的关系引用,放在Set<Map.Entry<k,v>>中,然后用Set的迭代器调用,迭代器返回的是Map.Entry的引用,然后调用其中的getKey和getValue获取具体内容 Set<Map.Entry<Student,String>> set = tm.entrySet(); Iterator<Map.Entry<Student,String>> it = set.iterator(); while(it.hasNext()){ Map.Entry<Student,String> me = it.next(); Student key = me.getKey(); String value = me.getValue(); System.out.println(key+ "-----" + value); } }} |
练习三:记录字符串中的每个字符出现的次数,例:String str = "abcadncgbndacb";要求结果:a(3),b(3)...
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
class MapTest{ public static void main(String [] args){ String str = "abbcccddddeeeee"; str = charCount(str); System.out.println(str); } public static String charCount(String str){ char [] chs = str.toCharArray(); TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(); //int count = 0; for(int i=0; i<chs.length; i++){ if(!(char[i] > 'a' && char[i] < 'z' || char[i] > 'A' && char[i] < 'Z')) continue; Integer value = tm.get(chs[i]); /* if(value != null) count = value; count++; tm.put(char[i], count); count = 0; */ if(value == null) tm.put(chs[i],1); else{ value = value +1; tm.put(chs[i],value); } } // System.out.println(tm); StringBuffer sb = new StringBuffer(); Set<Character> set = tm.keySet(); Iterator<Character> it = set.iterator(); while(it.hasNext()){ char key = it.next(); int value = tm.get(key); sb.append(key+"("+value+")"); } return sb.toString(); } } |

浙公网安备 33010602011771号