android培训、java培训期待与您交流!
Map接口的集合特点:
1、Map集合中的元素是以键值对的形式而存在
2、Map集合中的键(key)是唯一的
3、通过键可以查找Map集合中的值
4、Map集合添加元素的方法是put(key,value)
Map集合中常用的方法:
put(K key, V value) 添加的方法
get(Object key) 根据键获取值
size() 获取集合的长度
isEmpty() 判断集合是否为空
containsKey(Object key) 判断集合是否包含指定的键
containsValue(Object value) 判断集合是否包含指定的值
Set
Set
Map集合的遍历方式:
由于Map集合没有实现Iterrable接口所以不能用增强for循环来遍历Map集合,但是Map集合提供了keySet( )和entrySet()两个方法给我来遍历Map集合。
entrySet():返回获取所有实体Map.Entry的Set集合,然后遍历Set集合获取每一个键和值。
keySet():返回所有键的Set的集合,然后通过get(Object key)方法 获取值。
第一种方式遍历:
1、获取键值对对象的集合
2、遍历键值对对象的集合,获取每一个键值对对象
3、根据键值对对象获取键和值
package map;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
public class MapHashMap4 {
public static void main(String[] args) {
//创建HashMap集合对象
HashMap hm=new HashMap();
//添加元素到集合中
hm.put("张三", 23);
hm.put("李四", 14);
hm.put("王五", 36);
hm.put("赵六", 43);
hm.put("田七", 29);
//获取Map集合所有的键值对的Set集合
Set> set= hm.entrySet();
//增强for遍历Set集合
for(Entry entry:set){
//用Map.Entry接口的getKey()获取键
String key=entry.getKey();
//用Map.Entry接口的getValue()获取值
int value=entry.getValue();
System.out.println(key+"----"+value);
}
}
}
第二种方式遍历:
1、获取所有键的集合
2、遍历所有键的集合,获取每一个键
3、根据获取到的键获取键对应的值
package map;
import java.util.HashMap;
import java.util.Set;
public class MapHashMap5 {
public static void main(String[] args) {
//创建HashMap集合对象
HashMap hm=new HashMap();
//添加元素到集合中
hm.put("张三", 23);
hm.put("李四", 14);
hm.put("王五", 36);
hm.put("赵六", 43);
hm.put("田七", 29);
//调用keySet()方法,获取所有的键的Set集合
Set set= hm.keySet();
for(String key:set){
int value=hm.get(key);//通过键获取值
System.out.println(key+"----"+value);
}
}
}
Map集合的实现类:
1、HashMap
特点:线程不安全,存取速度快,允许存放null键,null值。
2、Hashtable
特点:线程安全,速度慢,不允许存放null键,null值。该类已经被HashMap替代。
3、TreeMap
特点:线程不安全,基于红黑树实现的,TreeMap集合可以根据自然顺序进行排序也可以提供比较器对象进行排序,具体情况看构造方法。
TreeMap集合的练习:
一、根据自然顺序排序
package map;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapDemo2 {
public static void main(String[] args) {
//创建集合对象
TreeMap tm=new TreeMap();
//添加元素到集合中
tm.put("zhangsan", 110);
tm.put("lisi", 120);
tm.put("tianqi", 115);
tm.put("chengjiu", 114);
tm.put("huda", 123);
//获取集合中所有的键
Set set=tm.keySet();
//遍历键的集合,获取每一个键
for(String key:set){
//根据键获取值
int value=tm.get(key);
System.out.println(key+"----"+value);
}
}
}
二、用比较器排序
package map;
//自定义Student类
public class Student {
private String name;
private int age;
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 String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
package map;
import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
//TreeMap测试类
public class TreeMapDemo1 {
public static void main(String[] args){
//创建TreeMap集合对象,匿名内部类方式在构造方法中传入比较器
TreeMap tm=new TreeMap(new Comparator() {
@Override
public int compare(Student s1, Student s2) {
// TODO Auto-generated method stub
int num1=s2.getAge()-s1.getAge();
int num2=num1==0?s1.getName().compareTo(s2.getName()):num1;
return num2;
}
});
//添加元素到集合中
tm.put(new Student("张三",23), "001");
tm.put(new Student("李四",26), "003");
tm.put(new Student("王五",17), "004");
tm.put(new Student("赵六",41), "005");
tm.put(new Student("田七",12), "002");
//第一种方式遍历
Set> entry= tm.entrySet(); //获取所有键值对对象的集合
for(Map.Entry me:entry){ //遍历键值对对象集合获取每一个键值对对象
Student s=me.getKey();//获取每一个键值对对象的键
String value=me.getValue();//获取每一个键值对对象的值
System.out.println(s+"-----"+value);
}
System.out.println("----------------------------------------------");
//第二中方式遍历
Set set= tm.keySet(); //获取所有键的集合
for(Student key:set){//遍历所有键的集合获取每一个键
String value=tm.get(key);//根据键获取值
System.out.println(key+"----"+value);
}
}
}