【集合框架之Map】

前言

|ू・ω・` )
Map的方法使用跟Set的使用没有很大的区别,最大的区别就在于:

Map集合中存放的都是一组组映射关系

都是以一个建一个值

  1. HashMap(底层结构:哈希表数据结构,效率高)
Map<String, Object> mp = new HashMap<>();
  1. TreeMap(底层结构:二叉树结构,可以进行排序)
Map<student, String> map = new TreeMap<>();

应用一(HashMap):

需求:学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人
在这里插入图片描述
重写好**hashCode()方法和equals()**方法


应用一(TreeMap):

需求:按年龄进行排序
在这里插入图片描述

应用二

需求:统计字符串中字符出现次数,比如:(sjsdfsfsdfsfsdfsdfssdsa)
这个我们需先理清楚思路:
统计:

  1. 将字符串转换为字符数组,将这个字符串中的字符当作mapkey值,将出现的次数作为values
  2. 当字符第一次出现后,要去这个集合查找,若没有的话返回为null,那么就将values设置为1
  3. 如果说不是第一次,那么就返回不为null,就将values++;

ok,看代码

public static void main(String[] args) {
		String str ="sjsdfsfsdfsfsdfsdfssdsa";
		System.out.println(charach(str));
	}

	public  static StringBuffer charach(String str) {
		Map<Character, Integer> map = new TreeMap<>();
		char[] charArray = str.toCharArray();
		for (char c : charArray) {
			Integer  get = map.get(c);
			if(get==null) {
				map.put(c, 1);
			}
			else {
				map.put(c, ++get);
			}
		}
		StringBuffer sbf = new StringBuffer();
		Set<Entry<Character, Integer>> entrySet = map.entrySet();
		for (Entry<Character, Integer> entry : entrySet) {
			sbf.append(entry.getKey()+"("+entry.getValue()+")");
		}
		return sbf;
	}

根据次数排序

在这里插入图片描述

Set的用法和Map是差不多的主要在于他们的方法

  1. 增加
	put(K key, V value) 
	putAll(Map<? extends K,? extends V> m) 
  1. 删除
	clear() 
	remove(Object key) 
  1. 判断
	containsKey(Object key) 

	containsValue(Object value) 

	isEmpty() 
  1. 获取
	get(Object key)

	size()

	values()  


//遍历时所要用到的
	entrySet() 

	keySet()

题外(Collections和Arrays)

Collections:是集合框架中的工具类,方法是静态
如下一些:

  • Collections.sort(List list);按自然顺序排序
  • Collections.reverse(List list); 强行将按自然顺序排列的顺序逆转,可以自己加入比较器,按自定义比较方法逆转。
  • Collections.shuffle(List<?> list);使用默认随机源对指定列表进行替换。

Arrays:是集合框架中的工具类,方法是静态
如下一些:

  • Arrays.sort();排序
  • Arrays.binarySearch();二分查找
  • Arrays.equals();两个数组相等的判定:两个数组包含相同数量的元素,并且两个数组中的所有相应元素都是相等的。

题外 集合框架拓展(增强for循环、可变参数、静态导入)

  1. 增强for循环
    概念:实际上有很多人都用过的,但是不知道叫什么,
    也就是我们经常用的foreach遍历
 普通for循环的遍历方式 
    for(int i =  0 ; i<arr.length ; i++){ 
        System.out.println("元素:"+ arr[i]); 
    } 

    //使用增强for循环实现 
    for(int item :arr){ 
        System.out.println("元素:"+ item); 
    } 

其实:增强for循环底层也是使用了迭代器获取的


  1. 可变参数
    概念:如果在写一个方法时,不清楚自己到底要写多少参数时,就可以用到可变参数
    因为可变参数,会自动变化

如:

public static void main(String[] args) {
		printarr("first","second");
	}
	public static void printarr(String...str){
		for(String string:str){
			System.out.println(string); //输出 first     second
		}
	}

每个方法最多一个变长参数,并且该参数的位置是方法的的最后

**注意,虽然这种方法可以重载,但是系统调用时会优先调用固定参数的方法


  1. 静态导入

    概念:就是导入某个包里所有的静态成员

如:

import  static  java.util.system;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值