Map接口的四种实现:
Map接口是java定义的一种键值对映射的数据结构接口,其实现方式有四种:HashMap,LinkedHashMap,Hashtable,TreeMap。
HashMap:
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null(HashSet的实现就是在hashmap的值为空的情况下);HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
LinkedHashMap:
LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关
Hashtable:
Hashtable和HashMap类似,它继承自Dictionary类,不同的是它不允许键或值为空。hashtable支持线程同步。即同一时刻只能有一个线程对hashtable进行操作。这也导致了它的写入较慢。
TreeMap:
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
关于Map实例:
实例1:
定义一个Map对象,如下Map<String,String> map =new HashMap<String,String>();
⑴在map中添加键值对(“1”,“xiaohong”)、(“2”,”xiaowang”)、(“3”,”xiaoli”)
⑵将map中的键值对打印出来(提示:可以将key集合放到一个set中,定义Iterator遍历器取出set中的key,然后通过key的值在map中取出对应value值,并将这两个值打印出来)
public class MapTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<String,String> map = new HashMap<>();
map.put("1", "xiaohong");
map.put("2", "xiaowang");
map.put("3", "xiaoli");
Set<String> set = map.keySet();
System.out.println("学号\t姓名");
for(String key:set){
System.out.println(key+"\t"+map.get(key));
}
}
}
实例2:从数据库中查询得到下列信息
请分别使用ArrayList、HashMap 存储这些信息,并将信息显示出来
分别在ArrayList、HashMap中集合查找KH071201007客户如果存在将客户信用度提升一个级别
Customer类:public class Customer {
private String cusNo;
private String cusName;
private String cusRegion;
private String cusLevel;
private int cusCredit;
private String cusAddress;
private String cusZip;
public Customer(String cusNo, String cusName, String cusRegion, String cusLevel,int cusCredit, String cusAddress, String cusZip) {
super();
this.cusNo = cusNo;
this.cusName = cusName;
this.cusRegion = cusRegion;
this.cusLevel = cusLevel;
this.cusCredit = cusCredit;
this.cusAddress = cusAddress;
this.cusZip = cusZip;
}
public String getCusNo() {
return cusNo;
}
public void setCusNo(String cusNo) {
this.cusNo = cusNo;
}
public String getCusName() {
return cusName;
}
public void setCusName(String cusName) {
this.cusName = cusName;
}
public String getCusRegion() {
return cusRegion;
}
public void setCusRegion(String cusRegion) {
this.cusRegion = cusRegion;
}
public String getCusLevel() {
return cusLevel;
}
public void setCusLevel(String cusLevel) {
this.cusLevel = cusLevel;
}
public int getCusCredit() {
return cusCredit;
}
public void setCusCredit(int cusCredit) {
this.cusCredit = cusCredit;
}
public String getCusAddress() {
return cusAddress;
}
public void setCusAddress(String cusAddress) {
this.cusAddress = cusAddress;
}
public String getCusZip() {
return cusZip;
}
public void setCusZip(String cusZip) {
this.cusZip = cusZip;
}
}
ArrayList存储信息,CustomerTest1测试类
public class CustomerTest1 {
static List list = new ArrayList<>();
public static void select(String id){
for(int i = 0;i< list.size();i++){
Customer c = (Customer) list.get(i);
if(c.getCusNo() == id){
System.out.println("找到了编号为"+id+"的客户,信用等级为"+c.getCusCredit());
int n = c.getCusCredit()+1;
c.setCusCredit(n);
System.out.println("等级增加后的信用等级为"+c.getCusCredit());
return;
}
}
System.out.println("没有找到编号为"+id+"的用户");
}
public static void main(String[] args) {
list.add(new Customer("KH071201001", "无线数码相机", "北京", "大客户 ", 8, "北京市海淀区成府路68号", "100027"));
list.add(new Customer("KH071201002", "潍坊华光。。", "华北", "大客户 ", 6, "潍城区园成路20号 ", "261021"));
list.add(new Customer("KH071201003", "北京神光培训", "北京", "大客户 ", 3, "北京市朝阳区兴华路28号", "100028"));
list.add(new Customer("KH071201004", "北京白羽有限", "北京", "普通客户 ", 2, "北京市西城区五四大道608号", "100023"));
list.add(new Customer("KH071201005", "北京天桥信息", "北京", "大客户 ", 3, "北京市东城区天桥路708号", "100025"));
list.add(new Customer("KH071201006", "云南天河烟草", "中南", "重点开发", 2, "昆明市盘龙区永安路273号", "650000"));
list.add(new Customer("KH071201007", "太阳药业集团", "华北", "重点开发", 3, "天津新城区八一路89号 ", "300000"));
list.add(new Customer("KH071201008", "北京明科科技", "北京", "普通客户 ", 2, "北京市朝阳区和平路53号", "100028"));
list.add(new Customer("KH071202001", "聪海信息科技", "北京", "战略合作", 8, "北京市海淀区成府路702号", "100027"));
System.out.println("cusNo\t\tcusName\t\tcusRegion\tcusLevel\tcusCredit\tcusAddress\t\tcusZip");
Iterator iter = list.iterator();
while(iter.hasNext()){
Customer cus = (Customer) iter.next();
System.out.println(cus.getCusNo()+"\t"+cus.getCusName()+"\t"+cus.getCusRegion()
+"\t\t"+cus.getCusLevel()+"\t\t"+cus.getCusCredit()+"\t\t"+cus.getCusAddress()
+"\t"+cus.getCusZip());
}
select("KH071201007");
}
}
HashMap存储信息,
CustomerTest2
测试类
public class CustomerTest2 {
private static Map<String,Customer> map = new HashMap<>();
public static void select(String id){
Set<String> set = map.keySet();
for (String key:set) {
if(key.equals(id)){
System.out.println("找到了编号为"+id+"的客户,信用等级为"+map.get(key).getCusCredit());
int n = map.get(key).getCusCredit()+1;
map.get(key).setCusCredit(n);
System.out.println("等级增加后的信用等级为"+map.get(key).getCusCredit());
return;
}
}
System.out.println("没有找到编号为"+id+"的用户");
}
public static void main(String[] args) {
Customer c1 = new Customer("KH071201001", "无线数码相机", "北京", "大客户 ", 8, "北京市海淀区成府路68号", "100027");
Customer c2 = new Customer("KH071201002", "潍坊华光。。", "华北", "大客户 ", 6, "潍城区园成路20号 ", "261021");
Customer c3 = new Customer("KH071201003", "北京神光培训", "北京", "大客户 ", 3, "北京市朝阳区兴华路28号", "100028");
Customer c4 = new Customer("KH071201004", "北京白羽有限", "北京", "普通客户 ", 2, "北京市西城区五四大道608号", "100023");
Customer c5 = new Customer("KH071201005", "北京天桥信息", "北京", "大客户 ", 3, "北京市东城区天桥路708号", "100025");
Customer c6 = new Customer("KH071201006", "云南天河烟草", "中南", "重点开发", 2, "昆明市盘龙区永安路273号", "650000");
Customer c7 = new Customer("KH071201007", "太阳药业集团", "华北", "重点开发", 3, "天津新城区八一路89号 ", "300000");
Customer c8 = new Customer("KH071201008", "北京明科科技", "北京", "普通客户 ", 2, "北京市朝阳区和平路53号", "100028");
Customer c9 = new Customer("KH071202001", "聪海信息科技", "北京", "战略合作", 8, "北京市海淀区成府路702号", "100027");
map.put(c1.getCusNo(), c1);
map.put(c2.getCusNo(), c2);
map.put(c3.getCusNo(), c3);
map.put(c4.getCusNo(), c4);
map.put(c5.getCusNo(), c5);
map.put(c6.getCusNo(), c6);
map.put(c7.getCusNo(), c7);
map.put(c8.getCusNo(), c8);
map.put(c9.getCusNo(), c9);
System.out.println("cusNo\t\tcusName\t\tcusRegion\tcusLevel\tcusCredit\tcusAddress\t\tcusZip");
Set<String> set = map.keySet();
for(String s:set){
System.out.println(s+"\t"+map.get(s).getCusName()+"\t"+map.get(s).getCusRegion()
+"\t\t"+map.get(s).getCusLevel()+"\t\t"+map.get(s).getCusCredit()+"\t\t"+map.get(s).getCusAddress()
+"\t"+map.get(s).getCusZip());
}
select("KH071201008");
}
}
实例3:已知某学校的教学课程内容安排如下:
完成下列要求:
1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述 课程安排。
2) 增加了一位新老师Allen 教JDBC 3) Lucy 改为教CoreJava put方法
3) 遍历Map,输出所有的老师及老师教授的课程(Set<Map.Entry<String,String>>、Set<String> get(key))
4) *利用Map,输出所有教JSP 的老师。
Teacher类:public class Teacher {
private String name;
private String course;
public Teacher(String name, String course) {
super();
this.name = name;
this.course = course;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
}
测试类:
public class TeacherTest {
static Map map = new HashMap<>();
public static void main(String[] args) {
// TODO Auto-generated method stub
TeacherTest tt = new TeacherTest();
Teacher tea1 = new Teacher("Tom", "CoreJava");
Teacher tea2 = new Teacher("John", "Oracle");
Teacher tea3 = new Teacher("Susan", "Oracle");
Teacher tea4 = new Teacher("Jerry", "JDBC");
Teacher tea5 = new Teacher("Jim", "Unix");
Teacher tea6 = new Teacher("Kevin", "JSP");
Teacher tea7 = new Teacher("Lucy", "JSP");
map.put(tea1.getName(), tea1);
map.put(tea2.getName(), tea2);
map.put(tea3.getName(), tea3);
map.put(tea4.getName(), tea4);
map.put(tea5.getName(), tea5);
map.put(tea6.getName(), tea6);
map.put(tea7.getName(), tea7);
tt.add();
// Set<Map.Entry<String,String>> set = 、Set<String> get(key)
Set<Map.Entry<String, Teacher>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Teacher>> iter = entrySet.iterator();
// System.out.println("老师\t\t\t学科");
System.out.println("教JSP的老师是");
while(iter.hasNext()){
Map.Entry<String, Teacher> entry = iter.next();
// System.out.println(entry.getValue().getName()+"\t\t\t"+entry.getValue().getCourse());
//遍历集合,输出所有JSP老师
if(entry.getValue().getCourse().equals("JSP")){
System.out.println(entry.getKey()+"\t");
}
}
}
public void add(){
Teacher tea8 = new Teacher("Allen", "JDBC");
map.put(tea8.getName(),tea8 );
}
}