首页 > 编程 > Java > 正文

Java--集合(Map)

2019-11-06 08:04:39
字体:
来源:转载
供稿:网友

一、Map接口概述

1、将键映射到值的对象

2、一个映射不能包含重复的键

3、每个键最多只能映射到一个值

二、Map接口和Collection接口的不同

1、Map是双列的,Collection是单列的

2、Map的键唯一,Collection的子体系Set是唯一的

3、Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效

三、Map集合的功能

1、添加功能

V put(K key,V value):添加元素。

如果键是第一次存储,就直接存储元素,返回null

如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

2、删除功能

void clear():移除所有的键值对元素

V remove(Object key):根据键删除键值对元素,并把值返回

3、判断功能

boolean containsKey(Object key):判断集合是否包含指定的键

boolean containsValue(Object value):判断集合是否包含指定的值

boolean isEmpty():判断集合是否为空

4、获取功能

Set<Map.Entry<K,V>> entrySet():

V get(Object key):根据键获取值

Set<K> keySet():获取集合中所有键的集合

Collection<V> values():获取集合中所有值的集合

5、长度功能

int size():返回集合中的键值对的个数

四、Collections成员方法

1、public static <T> void sort(List<T> list)

2、public static <T>int binarySearch(List<?> list,T key)

3、public static <T> T max(Collection<?>coll)

4、public static void reverse(List<?> list)       反转

5、public static void shuffle(List<?> list)       随机置换,用来洗牌

import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Hashtable;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import java.util.TreeMap;import java.util.TreeSet;import com.cat.collection.Student;public class MapSet {	public static void main(String[] args) {		/*		 * 一、Map接口概述		      1、将键映射到值的对象			  2、一个映射不能包含重复的键			  3、每个键最多只能映射到一个值		   二、Map接口和Collection接口的不同			  1、Map是双列的,Collection是单列的			  2、Map的键唯一,Collection的子体系Set是唯一的			  3、Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效		   三、Map集合的功能		      1、添加功能				 V put(K key,V value):添加元素。					如果键是第一次存储,就直接存储元素,返回null					如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值			  2、删除功能				 void clear():移除所有的键值对元素				 V remove(Object key):根据键删除键值对元素,并把值返回			  3、判断功能				 boolean containsKey(Object key):判断集合是否包含指定的键				 boolean containsValue(Object value):判断集合是否包含指定的值				 boolean isEmpty():判断集合是否为空			  4、获取功能				 Set<Map.Entry<K,V>> entrySet():				 V get(Object key):根据键获取值				 Set<K> keySet():获取集合中所有键的集合				 Collection<V> values():获取集合中所有值的集合			  5、长度功能				 int size():返回集合中的键值对的个数				 Collections类概述            四、Collections成员方法		       1、public static <T> void sort(List<T> list)			   2、public static <T> int binarySearch(List<?> list,T key)			   3、public static <T> T max(Collection<?> coll)			   4、public static void reverse(List<?> list)       反转			   5、public static void shuffle(List<?> list)       随机置换,用来洗牌		 * */		putMethod();		removeMethod();		forMap();		mapEntry();		hashMap();//HashMap		linkedMap();//LinkedHashMap		treeMap1();//TreeMap		treeMap2();//TreeMap,直接传比较器		hashTable();		card();//洗牌斗地主无序的		card1();//洗牌斗地主有序的	}	//洗牌斗地主有序的	PRivate static void card1() {		System.out.println("=============洗牌斗地主有序的============");		String[] numA = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};		String[] colorA = {"红桃","黑桃","方片","梅花"};		HashMap<Integer, String> hm = new HashMap<>();		ArrayList<Integer> list = new ArrayList<>();		int index = 0;		//获得一副牌		for(String num:numA){			for(String color:colorA){				hm.put(index,color.concat(num));    //concat拼接字符串				list.add(index);				index++;			}		}		hm.put(index,"小王");		list.add(index);		index++;		hm.put(index,"大王");		list.add(index);				//洗牌		Collections.shuffle(list);//随机置换,用来洗牌//		System.out.println(list);				//三人组成斗地主,还有底牌		TreeSet<Integer> gaojin = new TreeSet<>();		TreeSet<Integer> wuge = new TreeSet<>();		TreeSet<Integer> me = new TreeSet<>();		TreeSet<Integer> dipai = new TreeSet<>();				//发牌		for(int i = 0;i < list.size();i++){			if(i >= list.size() - 3){				dipai.add(list.get(i));			}else if(i % 3 == 0){				gaojin.add(list.get(i));			}else if(i % 3 == 1){				wuge.add(list.get(i));			}else{				me.add(list.get(i));			}		}		//看牌		lookPai(gaojin,hm,"高进");		lookPai(wuge,hm,"五哥");		lookPai(me,hm,"我");		lookPai(dipai,hm,"底牌");	}		//看牌	public static void lookPai(TreeSet<Integer> treeSet,HashMap<Integer, String> hash,String name){		System.out.println(name + "的牌是:");		for(Integer i : treeSet){			System.out.print(hash.get(i) + ",");		}		System.out.println();	}	//洗牌斗地主无序的	private static void card() {		System.out.println("=============洗牌斗地主无序的============");		String[] numA = {"A","2","3","4","5","6","7","8","9","10","J","Q","K",};		String[] colorA = {"黑桃","红桃","方片","梅花"};		ArrayList<String> poker = new ArrayList<>();		//获得一副牌		for(String color:colorA){			for(String num:numA){				poker.add(color.concat(num));    //concat拼接字符串			}		}		poker.add("大王");		poker.add("小王");				//三人组成斗地主,还有底牌		ArrayList<String> gaojin = new ArrayList<>();		ArrayList<String> wuge = new ArrayList<>();		ArrayList<String> me = new ArrayList<>();		ArrayList<String> dipai = new ArrayList<>();				//洗牌		Collections.shuffle(poker);//随机置换,用来洗牌				//发牌		for(int i = 0;i < poker.size();i++){			if(i >= poker.size() - 3){				dipai.add(poker.get(i));			}else if(i % 3 == 0){				gaojin.add(poker.get(i));			}else if(i % 3 == 1){				wuge.add(poker.get(i));			}else{				me.add(poker.get(i));			}		}		System.out.println(gaojin);		System.out.println(wuge);		System.out.println(me);		System.out.println(dipai);	}	private static void hashTable() {		/*		 * HashMap和Hashtable的区别		   1、Hashtable是JDK1.0版本出现的,是线程安全的,效率低		      HashMap是JDK1.2版本出现的,是线程不安全的,效率高		   2、Hashtable不可以存储null键和null值  			  HashMap可以存储null键和null值		 * */		System.out.println("=============HashMap和Hashtable============");		HashMap<String, Integer> map = new HashMap<>();		map.put(null, 10);		map.put("s", null);		System.out.println(map);		//		//java.lang.NullPointerException//		Hashtable<String, Integer> table = new Hashtable<>();//		table.put(null, 10);//		table.put("s", null);//		System.out.println(table);	}	private static void treeMap2() {		System.out.println("=============treeMap2============");		//直接使用匿名比较器		TreeMap<Student, String> map = new TreeMap<>(new Comparator<Student>() {			@Override			public int compare(Student s1, Student s2) {				int num = s1.getName().compareTo(s2.getName());				return num == 0 ? s1.getAge() - s2.getAge() : num;			}		});		//实现Comparable接口,重写compareTo方法	    map.put(new Student("张三", 12),"北京");	    map.put(new Student("李四", 13),"深圳");	    map.put(new Student("张三", 21),"上海");	    map.put(new Student("王五", 16),"上海");	    map.put(new Student("赵六", 15),"广州");	    System.out.print('张' + '0' + " ");	    System.out.print('李' + '0' + " ");	    System.out.print('王' + '0' + " ");	    System.out.print('赵' + '0' + " ");	    System.out.println();	    System.out.println(map);	}	private static void treeMap1() {		System.out.println("=============treeMap1============");		TreeMap<Student, String> map = new TreeMap<>();		//实现Comparable接口,重写compareTo方法	    map.put(new Student("张三", 12),"北京");	    map.put(new Student("李四", 13),"深圳");	    map.put(new Student("张三", 12),"上海");	    map.put(new Student("赵六", 15),"广州");	    System.out.println(map);	}	private static void linkedMap() {		/*		 * LinkedHashMap的特点		 		底层是链表实现的可以保证怎么存就怎么取		 * */		System.out.println("=============linkedMap============");		LinkedHashMap<String, Integer> map = new LinkedHashMap<>();		map.put("张三", 12);	    map.put("李四", 13);	    map.put("王五", 14);	    map.put("赵六", 15);	    System.out.println(map);	}	private static void hashMap() {		System.out.println("=============hashMap============");		HashMap<Student, String> map = new HashMap<>();	    map.put(new Student("张三", 12),"北京");	    map.put(new Student("李四", 13),"深圳");	    map.put(new Student("张三", 12),"上海");	    map.put(new Student("赵六", 15),"广州");	    System.out.println(map);	}	private static void mapEntry() {		System.out.println("=============mapEntry============");		Map<String, Integer> map = new HashMap<>();	    map.put("张三", 12);	    map.put("李四", 13);	    map.put("王五", 14);	    map.put("赵六", 15);	    	    //Map.Entry说明Entry是Map的内部接口,将键和值封装成了Entry对象,并存储在Set集合中	    Set<Map.Entry<String, Integer>> entrySet = map.entrySet();//	    Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();//	    while(it.hasNext()){//	    		Entry<String, Integer> entry = it.next();//	    		String key = entry.getKey();//	    		Integer value = entry.getValue();//	    		System.out.println(key + "--" + value);//	    }	    	    //在此处使用Entry也是可以的,因为Entry implements Map.Entry<K,V>	    for (Entry<String, Integer> entry : entrySet){	    		System.out.println(entry.getKey() + "--" + entry.getValue());	    }	}	private static void forMap() {		System.out.println("=============遍历============");		Map<String, Integer> map = new HashMap<>();	    map.put("张三", 12);	    map.put("李四", 13);	    map.put("王五", 14);	    map.put("赵六", 15);	    	    //map中没有Iterator迭代器//	    Set<String> keySet = map.keySet();   //keySet()获取所有键的集合//	    Iterator<String> it = keySet.iterator();//获取迭代器//	    while(it.hasNext()){//	    		String key = it.next();//	    		Integer value = map.get(key);//	    		System.out.println(key + "--" + value);//	    }	    	    Set<String> keySet = map.keySet();	    for(String key:keySet){	    		Integer value = map.get(key);	    		System.out.println(key + "--" + value);	    }	}	private static void removeMethod() {		System.out.println("=============删除============");		Map<String, Integer> map = new HashMap<>();	    map.put("张三", 12);	    map.put("李四", 13);	    map.put("王五", 14);	    map.put("赵六", 15);	    	    System.out.println(map.remove("李四"));	    System.out.println(map);        //根据键删除值//	    map.clear();                    //删除所有元素值//	    System.out.println(map);	    System.out.println(map.containsKey("王五"));	    System.out.println(map.containsValue(20));	    System.out.println(map.isEmpty());	    System.out.println(map.values());	    System.out.println(map.size());	}	public static void putMethod() {		Map<String, Integer> map = new HashMap<>();	    Integer i1 = map.put("张三", 12);	    Integer i2 = map.put("李四", 13);	    Integer i3 = map.put("王五", 14);	    Integer i4 = map.put("赵六", 15);	    Integer i5 = map.put("张三", 20);//相同的键不存储值,将值给覆盖掉并返回	    System.out.println(map);//底层hash算法,不能保证怎么存怎么取	    System.out.println(i1 + " " + i2 + " " + i3 + " " + i4 + " " + i5 );	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表