一、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 ); }}
新闻热点
疑难解答