关闭

集合框架之map

标签: 框架integerstringhashmapclassiterator
337人阅读 评论(0) 收藏 举报
分类:


Colllection接口是保存单值最大的父接口,那么Map接口保存的内容是一对值,所有的内容是以:key——>value 的形式保存的。

               类似 -----------------------------电话本

               张三----------------------123456

               李四----------------------234567

map接口本身有三个常用的子类

             HashMap  ,    Hashtable  ,     TreeMap

        1-------------------------------------新的子类:HashMap(重点)

                                                   map中的key是不能重复的,如果是重复的内容,则属于覆盖

        

package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Map;

public class HashMapDemo01 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		System.out.println(map) ;
	}

}


Map的最大特点是用于查找的操作,如果查找到了则返回内容,否则返回null

package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Map;

public class HashMapDemo02 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		Integer value = map.get("zhangsan") ;
		System.out.println(value) ;
	}

}

以上的功能是map最常见的一种功能

  还可以将Map中的全部Key以Set集合的形式返回

 

package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapDemo03 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		Set<String> set = map.keySet(); // 返回全部的key
		Iterator<String> iter = set.iterator();
		while (iter.hasNext()) {
			System.out.println(iter.next());
		}
	}

}

还可以在以上的程序上进行扩展,再将全部的值取出。

 

package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapDemo04 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		Set<String> set = map.keySet(); // 返回全部的key
		Iterator<String> iter = set.iterator();
		while (iter.hasNext()) {
			String key = iter.next();
			System.out.println(key + " --> " + map.get(key));
		}
	}

}

从运行结果可以看到HashMap本身也属于无序烦人一种操作

 也可以通过values()方法,将全部的value通过一个Collection接口的形式返回

package org.lxh.mapdemo;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HashMapDemo05 {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		Collection<Integer> col = map.values();// 取得全部value
		Iterator<Integer> iter = col.iterator();
		while (iter.hasNext()) {
			Integer value = iter.next();
			System.out.println(value);
		}
	}

}


2—————————旧的子类:Hashtable

           Hashtable实际上与Vector的产生时代是一样的   也属于最早的集合操作类。之后只是扩展了其应用实现了Map接口

  

package org.lxh.mapdemo;

import java.util.Hashtable;
import java.util.Map;

public class HashtableDemo01 {
 public static void main(String[] args) {
  Map<String, Integer> map = new Hashtable<String, Integer>();
  map.put("zhangsan", 1);
  map.put("zhangsan", 2);
  map.put("lisi", 3);
  map.put("wangwu", 5);
  System.out.println(map);
 }

}

3----------HashMap与Hashtable的区别

                HashMap与Hashtable都是Map接口的子类,既然是Map接口的子类,name这两个类有什么区别??

                            HashMap:是JDK1.2之后推出的,采用异步处理操作,性能高,非线性安全的操作

                            Hashtable:是JDK1.0是推出的,采用同步的处理操作,性能相对较低,线性安全

4—————————按key排序的子类:TreeMap(重点)

              TreeMap使用的时候可以进行按照key的方式进行排序

            

package org.lxh.mapdemo;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapDemo04 {
	public static void main(String[] args) {
		Map<String, Integer> map = new TreeMap<String, Integer>();
		map.put("A、zhangsan", 1);
		map.put("A、zhangsan", 2);
		map.put("C、lisi", 3);
		map.put("B、wangwu", 5);
		Set<String> set = map.keySet(); // 返回全部的key
		Iterator<String> iter = set.iterator();
		while (iter.hasNext()) {
			String key = iter.next();
			System.out.println(key + " --> " + map.get(key));
		}
	}

}


注 ::::::::::::::map不能直接使用Iterator输出

             要想输出则肯定依靠Map.Entry

            Map接口使用Iteartor输出的标准操作

           1.。。通过Map接口中的:Set<Map.Entry<K,V>> entrySet() 方法取得Set集合

            2.。。通过Set接口为Iterator进行初始化的操作

            3.。。通过Iterator取出每一个Map.Entry

            4..。。通过Map.Entry进行key与value的分离

package org.lxh.iteartordemo;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class IteartorMapDemo {
 public static void main(String[] args) {
  Map<String, Integer> map = new HashMap<String, Integer>();
  map.put("zhangsan", 1);
  map.put("zhangsan", 2);
  map.put("lisi", 3);
  map.put("wangwu", 5);
  Set<Map.Entry<String, Integer>> allSet = null;
  allSet = map.entrySet();
  Iterator<Map.Entry<String, Integer>> iter = allSet.iterator();
  while (iter.hasNext()) {
   Map.Entry<String, Integer> me = iter.next();
   System.out.println(me.getKey() + " --> " + me.getValue());
  }
 }
}
 
在JDK1.5之后可以使用foreach输出全部的内容
package org.lxh.foreachdemo;

import java.util.HashMap;
import java.util.Map;

public class ForeachMapDemo {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("zhangsan", 1);
		map.put("zhangsan", 2);
		map.put("lisi", 3);
		map.put("wangwu", 5);
		for (Map.Entry<String,Integer> me : map.entrySet()) {
			System.out.println(me.getKey() + " --> " + me.getValue());
		}
	}
}                                                                                                                                        
使用非系统类作为key值
ckage org.lxh.mapdemo;


public class Person {
	private String name;
	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (!(obj instanceof Person)) {
			return false;
		}
		Person p = (Person) obj;
		if (this.name.equals(p.name) && this.age == p.age) {
			return true;
		} else {
			return false;
		}
	}

	public int hashCode() { // 这个方法的返回值都是通过一个公式计算的
		// 此时的公式:名字的hashCode * age
		return this.name.hashCode() * this.age;
	}

	public String toString() { // 覆写toString()
		return "姓名:" + this.name + ";年龄:" + this.age;
	}
}
package org.lxh.mapdemo;

import java.util.HashMap;
import java.util.Map;

public class HashMapPersonDemo02 {
	public static void main(String[] args) {
		Map<Person, String> map = new HashMap<Person, String>();
		map.put(new Person("张三", 30), "zs");
		System.out.println(map.get(new Person("张三", 30)));
	}

}




   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:133213次
    • 积分:880
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:2篇
    • 译文:0篇
    • 评论:4条
    文章分类
    文章存档
    最新评论