数据结构:
Map
Map 不是Collection的子类
Map 接口定义的集合包含两部分
key-value 以键值的形式保存元素
可以把map看作一个两列多行的表格
根据内部实现不同,我们常使用HashMap 也有通过二叉树实现的TreeMap
在Map中key是不重复的
存取数据的方法
V put(K k,V v): 根据给定的key存放给定的value 如使用已存在的key 存放元素,那么就替换value操作,返回值则是替换的元素否则返回null。
V get(Object k): 根据给定的key获取对应的value 如key在map中不存在则,返回null。
boolean containsKey(Object k):Map 中是否存在给定的key
boolean containsValue(Object v):查看当前Map中是否有给定的value
package day29;
import java.util.HashMap;
import java.util.Map;
public class Demo01 {
public static void main(String[] args){
Map<String,Point> points = new HashMap<String,Point>();//创建一个Map
points.put("1,2", new Point(1,2));//向map中存放元素
points.put("3,4", new Point(3,4));
points.put("5,6", new Point(5,6));
//获取[5,6]这个点
Point p = points.get("5,6");
System.out.println(p.getX()+","+p.getY());
}
}package day29;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Demo02 {
public static void main(String[] args){
String str = "123,456,789,987,741,258,963,321,456,258,456";
String[] arrStr = str.split(",");
System.out.println(Arrays.toString(arrStr));
Map<String,Integer> map = new HashMap<String,Integer>();
for(String i:arrStr){
if(map.containsKey(i)){
int value = map.get(i);
value = value+1;
map.put(i,value);
}else{
map.put(i, 1);
}
}
System.out.println(map);
}
}package day29;
import java.util.HashMap;
import java.util.Map;
public class Demo03 {//key 的hashCode值尽量不要变
public static void main(String[] args){
Map<Point,String> map = new HashMap<Point,String>();
Point p = new Point(1,2);
map.put(p,"one");
System.out.println(map.get(p));
System.out.println("map 中的元素数量:"+map.size());
p.setX(3);
p.setY(4);
String old = map.put(p,"two");
System.out.println(old);
System.out.println(map.get(p));
System.out.println("map 中的元素数量:"+map.size());
}
}HashMap的性能
Capacity:容量HashMap中散列数组的大小
在创建的时候会有一个初始的长度
initial capacity 初始容量 :16
size:大小 HashMap 中存放元素的数量
(***)loadfactor:加载因子默认值0.75,size/capacity得到的比值,当存储的数据量超过了0.75时,会对散列数组进行扩容,并对HashMap 中原来的所有元素重新计算并存入新的数组。可以修改,通常不修改
遍历key 遍历value(不常用) 遍历 key-value
package day29;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*
* 遍历key
*/
public class Demo04 {
public static void main(String[] args){
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("一",1);
map.put("二",2);
map.put("三",3);
map.put("四",4);
map.put("五",5);
map.put("六",6);
Set<String> keys = map.keySet();//返回一个set 的集合
for(String k:keys){//遍历key
System.out.println(k);
}
for(String k:keys){//遍历values
System.out.println(map.get(k));
}
for(String k:keys){//遍历key-values
System.out.println(k + "=" + map.get(k));
}
}
}package day03;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
*
* 遍历Map中所有的key-value
*Map 中使用Entry的实例来保存 键值对
*Entry 是Map的内部类,每一个实例用于保存一组存放在Map中的键值对
*
*/
public class Demo05 {
public static void main(String[] args){
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("一",1);
map.put("二",2);
map.put("三",3);
map.put("四",4);
map.put("五",5);
Set<Entry<String, Integer>> entries = map.entrySet();
Iterator<Entry<String,Integer>> it = entries.iterator();
while(it.hasNext()){
Entry<String,Integer> entry = it.next();
System.out.println(entry);//遍历key-value
String key = entry.getKey();
int value = entry.getValue();
System.out.println(key);//遍历key
System.out.println(value);//遍历value
}
}
}package day29;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
*
* 遍历Map中所有的value
* 不常用
*
*/
public class Demo06 {
public static void main(String[] args){
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("一", 1);
map.put("二", 2);
map.put("三", 3);
map.put("四", 4);
map.put("五", 5);
//返回的所有value不是Set集合而是Collection 不用Set 是因为Set 不能放重复的元素,但是value 是允许有重复的
Collection<Integer> values = map.values();
for(Integer i:values){
System.out.println(i);//遍历value
}
}
}本文出自 “浪漫的偷笑” 博客,转载请与作者联系!
原文:http://lmdtx.blog.51cto.com/6942028/1740430