0--星期日
1--星期一
...
有对应关系,对应关系的一方是有序的数字,可以将数字作为角标。
public String getWeek(int num){
if(num<
0 || num>
7)
throw new NoWeekException(num+
"没有对应的星期");
String[] weeks = {
"",
"星期一"....
"星期日"};//一张表。记录对应关系。换成List集合。
return weeks[num];
}
新需求:
"星期一"--
"Monday"
....
"星期日"--
"Sunday"
也存在对应关系,没有一方是有序的数字,无法作为角标存在。咋办?
0--星期日
1--星期一
...
int index = listcn.indexOf(
"星期一")
listen.get(index);
0--Sunday
1--Monday
...
解决中英对应问题,可以通过两个List完成。
一个list中通过中文获取对应角标。在用角标到另一个英文list中获取对应的星期英文。
前提:必须保证中英文对应的角标是一致的。
麻烦!Collection集合一次只能存储一个元素。希望的将两个有对应关系的一次都存储进去。这样更便于操作。
集合框架中是否有提供解决方案?找到了Map集合。
Map集合特点;
1,内部存储的都是键key值value对。
2,必须要保证的键的唯一性。
Map常见功能。
1,存储。v put(k,v);
2,获取。v get(k);
3,移除。v remove(k);
4,Set<k> keySet();
5,Set<Map.Entry<k,v>> entrySet();
6,Collection<v> values();
Map
|--Hashtable:数据结构:哈希表。是同步的,不允许null作为键和值。被hashMap替代。
|--Properties:属性集,键和值都是字符串,而且可以结合流进行键值的操作。等到了IO流,你会更清楚。
|--HashMap:数据结构:哈希表。不是同步的,允许null作为键和值。
|--LinkedHashMap:基于链表+哈希表。可以保证map集合有序(存入和取出的顺序一致)。
|--TreeMap:数据结构:二叉树。不是同步的。可以对map集合中的键进行排序。
什么时候使用map集合呢?
分析问题时出现对应关系,毫不犹豫的想到map集合。
如果对应关系中出现了有序的数字,想到数组。
注意:如果对应关系个数不确定,还是以map为主。
Map-特点&基本使用
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map<String,String> map =
new HashMap<String,String>();
System.
out.println(map.put(
"星期一",
"Monday"));
map.put(
"星期日",
"Sunday");
String
value = map.
get(
"星期二");
System.
out.println(
"value="+
value);
String s = map.remove(
"星期一");
System.
out.println(
"s="+s);
System.
out.println(map);
}
}
Map-keySet&()&entrySet()&values()演示
import java
.util.Collection
import java
.util.HashMap
import java
.util.Iterator
import java
.util.Map
import java
.util.Set
public class MapDemo2 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>()
map
.put(
"星期一",
"Monday")
map
.put(
"星期日",
"Sunday")
System
.out.println(
"------------keySet方法的获取---------------")
// System
.out.println(map
.get(
"星期一"))
//怎么获取到所有的键呢?既然是所有的键,应该是一个集合,而且是一个单列集合。
//list还是
set呢?应该是
set,因为map集合中键需要保证唯一性。
//找到一个方法
Set<k> keySet()
Set<String> keySet = map
.keySet()
for(Iterator<String> it= keySet
.iterator()
String key = it
.next()
String value = map
.get(key)
System
.out.println(key+
"::"+value)
}
//使用foreach循环,进行遍历。
for(String key : keySet){
System
.out.println(key+
":::::"+map
.get(key))
}
System
.out.println(
"-----------entrySet方法获取----------------")
Set<Map
.Entry<String,String>> entrySet = map
.entrySet()
Iterator<Map
.Entry<String, String>> it = entrySet
.iterator()
//遍历
Set中的映射关系对象。
while(it
.hasNext()){
Map
.Entry<String, String> me = it
.next()
//获取键。
String key = me
.getKey()
//获取值。
String value = me
.getValue()
System
.out.println(key+
"-----"+value)
}
for(Map
.Entry<String,String> me : map
.entrySet()){
String key = me
.getKey()
//获取值。
String value = me
.getValue()
System
.out.println(key+
"--------"+value)
}
System
.out.println(
"-----------获取所有值的方法 values()----------------")
//所有的英文星期。
Collection<String> values = map
.values()
for(String value : values){
System
.out.println(
"value:"+value)
}
}
}
//interface MyMap{
// public static interface MyEntry{}//内部接口。
//}
domain-Student
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
super();
}
public Student(String name,
int age) {
super();
this.name = name;
this.age = age;
}
public String
getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(
int age) {
this.age = age;
}
@Override
public int hashCode() {
final
int prime =
31;
int result =
1;
result = prime * result + age;
result = prime * result + ((name ==
null) ?
0 : name.hashCode());
return result;
}
@Override
public boolean
equals(Object obj) {
if (
this == obj)
return true;
if (obj ==
null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name ==
null) {
if (other.name !=
null)
return false;
}
else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String
toString() {
return "Student [name=" + name +
", age=" + age +
"]";
}
@Override
public int compareTo(Student o) {
int temp =
this.age - o.age;
return temp==
0?
this.name.compareTo(o.name):temp;
}
}
Map-HashMap存储自定义键值
往HashMap中存储学生对象(姓名,年龄)—归属地对应关系。
import java.util.HashMap;
import java.util.Map;
import cn.itcast.domain.Student;
public class HashMapTest {
public static void main(String[] args) {
Map<Student,String> map =
new HashMap<Student,String>();
map.put(
new Student(
"lisi",
28),
"上海");
map.put(
new Student(
"wangwu",
22),
"北京");
map.put(
new Student(
"zhaoliu",
24),
"成都");
map.put(
new Student(
"zhouqi",
25),
"广州");
map.put(
new Student(
"wangwu",
22),
"南京");
for(Student key : map.keySet()){
String
value = map.
get(key);
System.
out.println(key.toString()+
"....."+
value);
}
}
}
import java.util.Comparator;
import cn.itcast.domain.Student;
public class ComparatorByName implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
int temp = o1.getName().compareTo(o2.getName());
return temp==
0?o1.getAge() - o2.getAge() : temp;
}
}
Map-TreeMap存储自定义键值
对Map中存储学生对象(姓名,年龄)—归属地对应关系。
import java.util.Map;
import java.util.TreeMap;
import cn.itcast.api.c.comparator.ComparatorByName;
import cn.itcast.domain.Student;
public class TreeMapTest {
public static void main(String[] args) {
Map<Student, String> map =
new TreeMap<Student, String>(
new ComparatorByName());
map.put(
new Student(
"lisi",
28),
"上海");
map.put(
new Student(
"wangwu",
22),
"北京");
map.put(
new Student(
"zhaoliu",
24),
"成都");
map.put(
new Student(
"zhouqi",
25),
"广州");
map.put(
new Student(
"wangwu",
22),
"南京");
for(Map.Entry<Student, String> me : map.entrySet()){
Student key = me.getKey();
String value = me.getValue();
System.out.println(key+
"::"+value);
}
}
}
Test
“werertrtyuifgkiryuiop”,获取字符串中每一个字母出现的次数。 要求返回结果个格式是 a(1)b(2)d(4)……;
import java.util.Map;
import java.util.TreeMap;
public class MapTest {
public static void main(String[] args) {
String str =
"awaa+acr=ebarct,btydui[efgkiryuiop";
str = getCharCount(str);
System.out.println(str);
}
/**
* 获取字符串中的字母出现次数。
*
* @param str
* @return 返回一个每一个字母对应次数的字符串 格式 char1(count)char2(count).....;
*/
public static String
getCharCount(String str) {
char[] chs = str.toCharArray();
TreeMap<Character, Integer> map =
new TreeMap<Character, Integer>();
for (
int i =
0; i < chs.length; i++) {
if(!(chs[i]>=
'a' && chs[i]<=
'z' || chs[i]>=
'A' && chs[i]<=
'Z')){
continue;
}
Integer value = map.get(chs[i]);
if(value ==
null){
map.put(chs[i],
1);
}
else{
value++;
map.put(chs[i],value);
}
}
return mapToString(map);
}
private static String
mapToString(Map<Character, Integer> map) {
StringBuilder sb =
new StringBuilder();
for(Character key : map.keySet()){
Integer value = map.get(key);
sb.append(key+
"("+value+
")");
}
return sb.toString();
}
}
API-JDK1.5-可变参数
public class ParamDemo {
/**
* @param args
*/
public static void main(String[] args) {
int sum = add(
34,
12,
89);
System.out.println(
"sum="+sum);
int sum1 = add(
23,
11,
44,
55,
66);
System.out.println(
"sum1="+sum1);
}
public static int add(
int... arr){
int sum =
0;
for (
int i =
0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
public static int add(
int a,
int b) {
return a + b;
}
public static int add(
int a,
int b,
int c){
return a + b + c;
}
}
API-JDK1.5-静态导入
import java.util.List;
import java.util.ArrayList;
import static java.util.Collections.*;
import static java.lang.System.*;
public class StaticImportDemo {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list =
new ArrayList<String>();
max(list);
min(list);
out.println(
"hello itcast");
}
}