HashMap:使用散列算法实现的Map
TreeMap:使用二叉树算法实现的Map
V put(K key,V value):将给定的key与value存于map使用相同的key存放不同数据时为替换数据操作返回的就是被替换的数据.若当前key还不存在于map中返回null
V get(Object key):根据指定的key获取对应的value,若不存在则返回null
boolean containsKey(Object key):查看给定的key是否存在于Map
boolean containsValue(Object value):查看给的的value是否存在于Map
Map的替换方法
import java.util.HashMap;
import java.util.Map;
/**
* Map
* 另一种存数据的结构
* 有别于集合
* 使用key-value对的形式存放数据
* 若集合像数组的话,那么Map更像是多行两列的表格
* @author Administrator
*
*/
public class TestMap {
public static void main(String[] args){
Map<String,String> map=new HashMap<String,String>();
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");
map.put("d", "D");
System.out.println(map.size());//4
System.out.println("map是不是空的:"+map.isEmpty());//map是不是空的:false
System.out.println(map.toString());//{a=A, b=B, c=C, d=D}
/**
* toString:
* {k.toString()=v.toString,k.toString=v.toString,...}
*/
System.out.println(map);//{a=A, b=B, c=C, d=D}
/**
* 再次使用"a"作为key存放其他内容
* 这是替换操作!put方法返回值是被替换的"A".
*/
System.out.println("被替换的元素是: "+map.put("a", "F"));//A
System.out.println(map);//{a=F, b=B, c=C, d=D}
}
}
Map方法作用实践
import java.util.HashMap;
import java.util.Map;
public class TestHashMap {
public static void main(String[] args) {
/**
* 统计每个数字出现的次数
*/
String str="123,456,234,235,234,2,123,456,234,235,2,352,6,2";
String[] s=str.split(",");
Map<String,Integer> map=new HashMap<String,Integer>();
for(int i=0;i<s.length;i++){
if(!map.containsKey(s[i])){
map.put(s[i], 1);
}
if(map.containsKey(s[i])){
map.put(s[i], map.get(s[i])+1);//get value
}
}
System.out.println(map);
}
}
Map是根据key的Hash值进行存储的------证明
import java.util.HashMap;
import java.util.Map;
public class TestHashMap2 {
public static void main(String[] args) {
Point p1=new Point(1,2);
Map<Point,String> map=new HashMap<Point,String>();
map.put(p1, "abc");
System.out.println(map);//{x: 1,y: 2=abc}
p1.setX(5);
map.put(p1, "def");
System.out.println(map);//{x: 5,y: 2=abc, x: 5,y: 2=def}
p1.setX(1);
map.put(p1, "ghi");
System.out.println(map);//{x: 1,y: 2=ghi, x: 1,y: 2=def}
}
}
遍历Map
遍历Map有三种方式:
获取所有的key:方法Set<K> keySet()
该方法返回一个Set集合,其元素是map中所有的key
获取所有的value:方法values()
该方法返回所有Value
获取所有的键值对(Entry):
Entry类:map中每一个Entry实例代表一组键值对.
我们可以通过该实例的getKey()和getValue()方法获取这组键值对的键和值.
获取Key
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class HashMapKeySet {
/**
* 遍历HashMap
* 获取所有的key
*/
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("abc", 2);
map.put("def", 1);
map.put("ghi", 6);
//获取有的key
Set<String> set=map.keySet();
System.out.println(set);//[abc, def, ghi]
//遍历
for(String key:set){
System.out.println("key:"+key);
//顺便遍历value
System.out.println(map.get(key));
}
}
}
获取键值对
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class HashMapEntrySet {
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("abc", 2);
map.put("def", 1);
map.put("ghi", 6);
/**
* 遍历map中所有的键值对
* java.util.Map.Entry
* Entry是Map中定义的内部类
* 用于描述Map中的每一组键值对
*/
Set<Entry<String,Integer>> entry=map.entrySet();
for(Entry<String,Integer> et:entry){
System.out.println(et);
}
}
}
获取value
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* 遍历hashmap
* 获取所有的value
* @author Administrator
*
*/
public class HashMapValues {
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<String,Integer>();
map.put("abc", 2);
map.put("def", 1);
map.put("ghi", 6);
/**
* 获取所有的value
* 该方法返回一个集合.但不是Set.要注意
*/
//遍历
Collection<Integer> values=map.values();
for(Integer it :values){
System.out.println(it);
}
//或者
Iterator<Integer> it=values.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}