您的位置:首页 > 职场人生

黑马程序员--Java基础--05Map

2014-03-23 10:23 260 查看
----------------------Android培训Java培训、java学习型技术博客、期待与您交流!
----------------------

Map接口:提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序
定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如
HashMap 类。

Map集合:该集合存储键值对。一对一对往里存,而且要保证键的唯一性。

1,添加
添加。
put(K key ,V value)
put
2,删除
clear()
remove(Object key)
3,判断。
containsValue(Object value)
containsKey(Object key)
isEmpty()
4,获取。
get(Object key)
size()
values()
entrySet()
keySet()
Map:

|--Hashtable:底层是哈希表数据结构,不可以存入null键和null值。该集合是线程同步的。jdk1.0效率低。

|--HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。jdk1.2效率高

|--TreeMap:底层是二叉树数据结构,线程不同步。可以用于给Map集合中的键进行排序。

和Set很像。

其实大家,Set底层就是使用了Map集合

例子演示:

class  MapDemo
{
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String[] args>
//添加元素,如果出现添加时,相同的键,那么后添加的值会覆盖原有键对应值
//并put方法会返回被覆盖的值。
System.out.println("put:"+map.put("01","zhangsan1"));
System.out.println("put:"+map.put("01","wangwu"));
map.put("02","zhangsan2");
map.put("03","zhangsan3");

System.out.println("containKey:"+map.containsKey("022"));
//System.out.println("remove:"+map.remove("02"););

System.out.println("get"+map.get("023"));

map.put("04",null);
System.out.println("get"+map.get("04"));
//可以通过get方法的返回值来判断一个键是否存在,通过返回null来判断。

//获取Map集合中所有的值。
Collection<String> col = map.values();

System.out.print(coll);
System.out.print(map);
}
}
map集合的两种取出方式:

1,keySet:将map中所有的键存入到Set集合。因为Set具备迭代器。

所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。

2,entrySet

例子演示:

import java.util.*;

class MapDemo2
{
public static void main(String[] args)
{
Map<String,String>map = new HashMap<String.String>();

map.put("02","zhangsan2");
map.put("02","zhangsan3");
map.put("02","zhangsan1");
map.put("02","zhangsan4");

//只获取map集合的所有键的Set集合,keySet();
Set<String> keySet = map.keySet();

//有了Set集合,就可以获取其迭代器。
Iterator<String> it = keySet.iterater();

while(it.hasNext())
{
String key = it.next();
//有了键可以通过map集合的get方法获取其对应的值。
String value = map.get(key);
System.out.println("key:"+key);
}
}
}
Set<K> keySet():将Map中所有的键存入到Set集合中。因为Set具备迭代器,

所以可以通过迭代方式去除所有的键,再根据get()方法获取每一个键所对应的值。

Set<Map.Entry<K,Y>> entrySet():将Map集合中键与值之间的映射关系获取到Set集合中。

通过Map。Entry<K,V>接口中的K getKey()和 V getValue()方法分别获取键和值。

例子演示:

import java.util.*;
class KeySet_EntrySet
{
public static void main(String[] args)
{
Map<Integer,String> map1 = new HashMap<Integer,String>();
//向Map集合中添加键值对。
map1.put(1,"abc");
map1.put(2,"bcd");
map1.put(3,"cde");
map1.put(4,"def");
map1.put(5,"efg");
map1.put(6,"fga");
//获取Map集合中所有键的Set集合
Set<Integer> keySet = map1.keySet();
//通过迭代器获取键,并通过get方法获取键对应的值
for(Iterator<Integer> it = keySet.iterator(); it.hasNext();)
{
Integer key = it.next();
String value = map1.get(key);
System.out.println("key:"+key+".."+"value:"+value);
}
/*
运行结果:
key:1..value:abc
key:2..value:bcd
key:3..value:cde
key:4..value:def
key:5..value:efg
key:6..value:fga
*/
Map<String,Integer> map2 = new HashMap<String,Integer>();
//向Map集合中添加键值对。
map2.put("abc",123);
map2.put("bcd",234);
map2.put("cde",345);
map2.put("def",456);
map2.put("efg",567);
map2.put("fga",678);
//将Map集合中键与值之间的映射关系取出到Set集合中
Set<Map.Entry<String,Integer>> entrySet = map2.entrySet();
for(Iterator<Map.Entry<String,Integer>> it = entrySet.iterator(); it.hasNext();)
{
Map.Entry<String,Integer> me = it.next();
String key = me.getKey();
Integer value = me.getValue();
System.out.println("key:"+key+".."+"value:"+value);
}
/*
运行结果:
key:fga..value:678
key:abc..value:123
key:def..value:456
key:bcd..value:234
key:efg..value:567
key:cde..value:345
*/

}
}


例子演示:

每一个学生都有对应的归属地。

学生student,地址String。

学生属性:姓名,年龄。

注意:姓名和年龄相同的视为同一个学生。

保证学生的唯一性。

1,描述学生

2,定义map容器。将学生作为键,地址作为值。存入。

3,获取map集合中的元素。
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 s)
{
int num = new Integer(this.age).compareTo(new Integer(s.age));
if (num==0)
return this.name.compareTo(s.name);
return num;

}
public int hashCode()
{
return name.hashCode()+age*34;

}
public boolean equals(Object obj)
{
if (!(obj instanceof Student))
throw new ClassCastException("类型不匹配");
Student s=(Student)obj;
return this.name.equale(s.name)&&this.age==s.age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public String toString()
{
return name+":"+age;
}

class MapTest
{
public static void main(String[] args)
{
HashMap<Student,String> hm =new HashMap<Student,String>();

hm.put(new  Student("lisi1",21),"beijing");
hm.put(new  Student("lisi1",21),"tianjing");
hm.put(new  Student("lisi2",21),"sahnghai");
hm.put(new  Student("lisi3",21),"nanjing");
hm.put(new  Student("lisi4",21),"shandong");

//第一种取出方式 keySet
Set<Student> keySet = hm.keySet();
Iterator<Student> it = keySet.iterator();
while(it.hasNext())
{
Student stu = it.next();
String addr = hm.get(stu);
System.out.println(stu+".."+addr);
}
//第二种取出方式entrySet
Set<Map.Entry<Student,String>> entrySet.iterator();

Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();

while (iter.hasNext())
{
Map.Entry<Sudent,String> me = iter.next();
student stu = me.getkey();
String addr = hm.get(stu);
System.out.println(stu+"......"+addr);
}
}
}


----------------------Android培训Java培训、java学习型技术博客、期待与您交流!
----------------------

详细请查看:http://edu.csdn.net/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: