黑马程序员技术交流社区
标题:
毕老师视频学习笔记之Map集合
[打印本页]
作者:
骑着毛驴去赶
时间:
2014-3-16 22:17
标题:
毕老师视频学习笔记之Map集合
一:Map<k,v>:该集合存储键值对,一对一对的忘里存,而且要保证键的唯一性
1.添加
put(k,v);
putAll(Map(? extends k,? extends v) m);
2.删除
clear();
remove(Object k);
3.判断
containsKey(k);
containsValue(v);
isEmpt();
4.获取
get(Object k);
size();
values();
二:Map的子类
Map<k,v>:
|--HashTable:底层是哈希表数据结构,线程是同步的,JDK1.0,效率低,不可以存入null键和null值
|--HashMap:底层是哈希表数据结构,线程是不同步的,效率高,可以存入null键和null值,已经代替HashTable
|--TreeMap:底层是二叉树数据结构,线程不同步,可以给Map中的键进行排序
1.当我们向一个Map中添加键值时,当添加的键是相同的时候,第二次添加的键会将第一次添加的键对应的值覆盖掉, 并返回第一次添加的
键对应的值
2.Map值的两种取出方式:
2-1:Set<key> keySet()获取Map中的值并将获取的值保存到Set集合中,因为set集合有迭代器的功能,然后有Map中的get(key)
方法获取值的值;
2-2:entrySet
① 利用ketSet()方法获取值的方法
main:
Map<String,String> m = new HashMap<String,String>();
m.put("01","张三1");
m.put("02","张三2");
② 利用keySet()方法获取键的集合
Set<String> s = m.ketSet();
//利用Set集合的迭代器进行输出
Iterator<String> it = s.iterator();
while(it.hasNext())
{
String key = it.next();
System.out.porintln(m.get(key));
}
②:利用enterSet()方法获取值的方法
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
//利用enterSet()方法获取值的方法
class Student implements Comparable<Student>
{
private String name;
private int age;
Student(String name,int age)
{
this.name=name;
this.age= age;
}
public void setName(String name)
{
this.name= name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age= age;
}
public int getAge()
{
return age;
}
//实现hasCode方法
public int hashCode()
{
return name.hashCode()+age*34;
}
//实现equals方法
public boolean equals(Object obj)
{
if(!(obj instanceof Student))
throw new ClassCastException("输入的类型不匹配");
Student stu =(Student)obj;
return this.getName().equals(stu.getName()) && this.getAge() == stu.getAge();
}
//实现Complarable接口的compareTo()方法
public int compareTo(Student st)
{
if(this.getAge() ==st.getAge())
return 0;
if(this.getAge() >st.getAge())
return 1;
return -1;
}
}
public class MapEntryDemo
{
public static void main(String[] args)
{
Map<Student,String> m = new HashMap<Student,String>();
m.put(new Student("张三1",23),"beijingshi");
m.put(new Student("张三2",22),"shanghai");
m.put(new Student("张三3",27),"guangzhou");
m.put(new Student("张三4",45),"nanjing");
//利用entrySet()方法获取
Set<Map.Entry<Student,String>> s =m.entrySet();
Iterator<Map.Entry<Student,String>> it = s.iterator();
while(it.hasNext())
{
Map.Entry<Student,String> me = it.next();
Student st = me.getKey();
String name=st.getName();
int age = st.getAge();
System.out.println(name+"---=-"+age);
}
}
}
复制代码
③:利用比较器对TreeMap进行排序
//定义比较器
class StuNameComplarator implements Comparator<Student>
{
@Override
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;
}
}
注意:TreeMap具有排序的功能
Map集合的使用场景:当数据之间存在着映射关系时,就要先想到使用Map集合
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2