今天继续了解了Map的用法,Map的子类包括HashMap,TreeMap等等。
主要更新了两个知识点:1.不同于C++,Java Map中的类型不能为int 或者 char,需要以Integer和String 作为键合值的类型。
1) Map 插入元素:map.put("9","jiu");
2) Map根据键获得元素的值 map.get(String.valueOf(t[i]));
2. String 类型和char[ ] 类型的转换
String 转 char 在数据结构(一)中提到,一般用 char[ ] temp = s.toCharArray() ; 单个字符转换 char c = s.toCharAt( i );
char 转 String 相对复杂些,引入头文件 Java.lang.String String c = String.valueOf( v[i]); v[ i ] 是 char[ ] 中的字符,String c 为长度为 1的单个字符串
题目: PAT 乙级 1002
1002 写出这个数 (20分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
import java.util.*;
import java.lang.*;
public class Main{
public static void main(String[] args)
{
String s = null;
Scanner in = new Scanner(System.in);
int sum = 0;
s = in.nextLine();
char[] temp = s.toCharArray();
for(int i = 0;i<s.length();i++)
{
sum+=CtoN(temp[i]);
}
Map<String,String> map = new HashMap<String,String>();
build_map(map);
show(map,sum);
in.close();
}
public static int CtoN(char c)
{
return (int)(c-'0');
}
public static void build_map(Map<String,String> map)
{
map.put("0","ling");
map.put("1","yi");
map.put("2","er");
map.put("3","san");
map.put("4","si");
map.put("5","wu");
map.put("6","liu");
map.put("7","qi");
map.put("8","ba");
map.put("9","jiu");
}
public static void show(Map<String,String> map,int sum)
{
int a = sum,c = 0;
String reverse = "";
String re = "";
while(a!=0)
{
c = a%10;
reverse+=(char)('0'+c);
a = a/10;
}
char[] t = reverse.toCharArray();
for(int i = reverse.length()-1;i>=0;i--)
{
re+=map.get(String.valueOf(t[i]));
if(i>0)
{
re+=" ";
}
}
System.out.print(re);
}
}
Map的4种遍历方式:
1.访问键的集合keySet( ) 进行遍历,通过map.getkey(key) 对 值value进行访问
2.Map.Entry<Student,String> 表示一个Entry内部类,可称之为映射项
通过映射的迭代器访问:Iterator<Map.Entry<Student,String>> it = map.entrySet().iterator();
3. 通过keySet() 的迭代器进行访问键,值
4. 访问Entry集合的迭代器 Iterator it = map.entrySet().iterator();
import java.util.*;
public class Main{
public static void main(String[] args)
{
Map<Student,String> map = new HashMap<Student,String>();
map.put(new Student("guyuan",22),"A");
map.put(new Student("xiaogu",23),"B");
map.put(new Student("xiaoyuan",24),"C");
Traversal(map);
Traversal2(map);
Traversal3(map);
Traversal4(map);
}
public static void Traversal(Map<Student,String> map)
{
// 通过访问键的集合进一步对值进行访问
for(Student key : map.keySet())
{
String value = map.get(key);
System.out.println("key = "+key.name+" "+key.age+" "+"value = "+value);
}
}
public static void Traversal2(Map<Student,String> map)
{
// 用entry内部类来表示一个映射项,映射项包含key和value
Iterator<Map.Entry<Student,String>> it = map.entrySet().iterator();
while(it.hasNext())
{
Map.Entry<Student,String> entry = it.next();
Student key = entry.getKey();
String value = entry.getValue();
System.out.println("key = "+key.name+" "+key.age+" "+"value = "+value);
}
}
public static void Traversal3(Map<Student,String> map)
{
// 用keySet() 进行迭代,找到键的集合
Iterator it = map.keySet().iterator();
while(it.hasNext())
{
Student key;
String value;
key = (Student)it.next();
value = map.get(key);
System.out.println("key = "+key.name+" "+key.age+" "+"value = "+value);
}
}
public static void Traversal4(Map<Student,String> map)
{
Iterator it = map.entrySet().iterator();
Student key;
String value;
while(it.hasNext())
{
Map.Entry entry = (Map.Entry)it.next();
key = (Student)entry.getKey();
value = (String)entry.getValue();
System.out.println("key = "+key.name+" "+key.age+" "+"value = "+value);
}
}
}
class Student{
String name;
int age;
Student(String name,int age)
{
this.name = name;
this.age = age;
}
}