集合框架(四) Map接口

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 );
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值