Java学习基础知识集合Map

Java集合Map

Map 双列集合的顶层接口
		Collections 工具类
		项目:斗地主的制牌,洗牌,发牌
	1.Map:(key,value)
	2.map始发地址,目的地址
	3.描述的就是一个数据到另一个数据的映射
	4.Map的特点:
		key是唯一的,value不是唯一的
	5.Map和Collection的区别
		Map是双列集合
		Collection是单列集合
		Map的键是唯一的,Collection中的子接口的Set也是唯一的;
		Set的底层结构是Map
Map的常用方法Map<K,V> key,value
		 void clear()  从此映射中移除所有映射关系(可选操作)。 
		 boolean containsKey(Object key)  如果此映射包含指定键的映射关系,则返回 trueboolean containsValue(Object value)   如果此映射将一个或多个键映射到指定值,则返回 true。 
		 Set<Map.Entry<K,V>> entrySet()  返回此映射中包含的映射关系的 Set 视图。 
		 boolean equals(Object o)   比较指定的对象与此映射是否相等。 
		 V get(Object key)  返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。 
		 int hashCode()   返回此映射的哈希码值。 
		 boolean isEmpty()  如果此映射未包含键-值映射关系,则返回 true。 
		 Set<K> keySet()  返回此映射中包含的键的 Set 视图。 
		 V put(K key, V value)   将指定的值与此映射中的指定键关联(可选操作)。*添加值* 
		 void putAll(Map<? extends K,? extends V> m)  从指定映射中将所有映射关系复制到此映射中(可选操作)。 
		 V remove(Object key)   如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。 
		 int size()  返回此映射中的键-值映射关系数。 
		 Collection<V> values()   返回此映射中包含的值的 Collection 视图。 
 Map的遍历
 	两张遍历方式
 		1.转成Set  Set<E> keySet = map.keySet();键的Set集合,get(key)获取value的值
 				for() 循环
 				Iterator  迭代器
 		2.Set<Map.Entry<K,V>> entrySet()  getKey() getValue()
          		返回此映射中包含的映射关系的 Set 视图。  
          		![Entry原理图](https://img-blog.csdnimg.cn/20190716142044421.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTczOTYyOA==,size_16,color_FFFFFF,t_70)
		          		 boolean equals(Object o) 
		          			比较指定对象与此项的相等性。 
		 				K getKey() 
		          			返回与此项对应的键。 
		 				V getValue() 
		          			返回与此项对应的值。 
						 int hashCode() 
		          			返回此映射项的哈希码值。 
		 				V setValue(V value) 
		          			用指定的值替换与此项对应的值(可选操作)。 
							Set<Entry<K,V>> set = map.entrySet();
		          			Iterator it = set .iterator();
		练习:录入一个字符串,统计每个字符出现的个数;
		import java.util.Map;
		import java.util.Scanner;
		import java.util.Set;
		import java.util.TreeMap;
		
		public class Map01{
		
			public static void main(String[] args) {
				Map<Character,Integer> map = new TreeMap();
				StringBuilder sb = new StringBuilder();
				Scanner sc = new Scanner(System.in);
				System.out.println("亲,请录入一个字符串");
				String str = sc.nextLine();
				//sdfjlsknlkh
				//获取字符串的字符数组  字符串--》字符数组
				char[] arr = str.toCharArray();
				//遍历
				for(char c:arr) {
					//判断该字符是否在map集合中
					//无,第一次出现,添加到集合中,同时赋value值为1
					//有,把原有的值取出来,加1再赋值回去
				/*	if(map.containsKey(c)) {
						//包含
						//先把原来的字符的次数取出
						int count = map.get(c);
						map.put(c, count+1);
						
					}else {
						//不包含
						map.put(c, 1);
					}*/
					map.put(c, map.containsKey(c)?map.get(c)+1:1);
				}
				//遍历map集合
				Set<Character> keySet = map.keySet();
				for(char c:keySet) {
					int count = map.get(c);
					sb.append(c+"("+count+")");
					
				}
				System.out.println(sb.toString());
				
				
		
			}
		
		}
HashMap 哈希表 HashSet的底层是HashMap,重写hashCode(),equals();
	HashSet和HashMap的键值列保证元素唯一的方式是相同的;
TreeMap 二叉树 TreeMap的底层是TreeMap,重写compareTo()方法
	TreeSet和TreeMap的键值列保持元素唯一的方式相同;

LinkedHashMap
	1.是HashMap的子类;
	2.拥有可预知的位置顺序,存储于取出的顺序一致
HashTable已废弃
	与HashMap的区别
	都是采用哈希表存取;
	版本出现不同:HashTable 从1.0开始,HashMap从1.2开始
	线程安全不同:HashTable是线程安全的,HashMap是线程不安全的;
	HashTable不能存储null值和null键,HashMap可以;
	命名规则不同:HashTable早期没有形成严格的命名体系;
Collections工具类
	常用方法:
		static <T> int  binarySearch(List<? extends Comparable<? super T>> list, T key) 
	          使用二分搜索法搜索指定列表,以获得指定对象。 
		static int frequency(Collection<?> c, Object o) 
	          返回指定 collection 中等于指定对象的元素数。 
		static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) 
	          使用另一个值替换列表中出现的所有某一指定值。 
		static <T> void  fill(List<? super T> list, T obj) 
	          使用指定元素替换指定列表中的所有元素。 //全部填充
	    static void reverse(List<?> list) 
          	  反转指定列表中元素的顺序。 
        static void shuffle(List<?> list) 
          	  使用默认随机源对指定列表进行置换。 //随机打乱顺序
        static void swap(List<?> list, int i, int j) 
          	  在指定列表的指定位置处交换元素。 
   		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值