map集合

本文详细介绍了Java HashMap的特性,包括增删改查操作、键值对存储结构,展示了keySet和entrySet的遍历方法,并对比了HashMap与Hashtable的区别。此外,讲解了泛型在Map中的运用,以及集合框架工具Collections和Arrays的实用技巧。
摘要由CSDN通过智能技术生成

目录

一、map集合的特点

二、map集合的遍历方式

三、常用实现类HashMap

四、泛型

五、集合框架工具类


内容:

一、map集合的特点

1、增删改查

2、键值对形式存在

3、key可以为空

代码展示:

Map<String,Integer> map=new HashMap<>();
		map.put("a", 1);
//		V put(K key, V value);
		map.put(null, null);
		map.put("b", 2);
		map.put("c", 3);
		map.put("d", 4);
		System.out.println(map);
		Object remove = map.remove("b");
		System.out.println(remove);
		System.out.println(map);
//		修改 也是调用put方法
		map.put("c", 32);
		System.out.println(map);
		
//		查询
		System.out.println(map.get("c"));

运行效果:

 结论:map集合的特点
         键值对
        遍历:
        拿到key,再拿值
        拿到映射关系,键值都有了

二、map集合的遍历方式

1、keySet

2、entrySet

 代码展示:

查询所有
//		1.先拿到map集合中的所有key
		Set keySet = map.keySet();
		for (Object key : keySet) {
			System.out.println("键:"+key+";值:"+map.get(key));
		}
		
//		2.拿到映射关系
		Set<Entry<String, Integer>> entrySet = map.entrySet();
		for (Entry<String, Integer> entry : entrySet) {
			System.out.println("键:"+entry.getKey()+";值:"+entry.getValue());
		}

运行效果:


 HashMap与hashtable的区别
 *    1.hashtable 是线程安全的
 *    2.jdk1.8以下hashtable的key不能存放null
 

三、常用实现类HashMap

代码展示:

​
package com.xnx.map;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class Demo2 {
	public static void main(String[] args) {
		String s="ajfdshhssuhsklasowhskjdhiwsjhshwiklash";
		/**
		 * 实现思路:
		 * 1.做字符串切割:得到一个字符数组
		 * 2.接下来遍历,拿到单个字符
		 * 3.如果该字符没有出现过,即value值为null,那么该字符为key,值初始化为1
		 * 4.如果已经出现过,拿到原来的值+1
		 * 
		 * debugger的使用:调试代码
		 * 1.打断点
		 * 2.采用debug的方式运行程序
		 * 3.左上方进入调试窗口,左上方有一个step over调试箭头,快捷键F6
		 * 4.接下来可以通过F6一步步调试当前程序对应的每一个变量值
		 * 
		 * 按照字符的出现次数进行排序输出
		 */
		char[] arr=s.toCharArray();
		Map<Character, Integer> map=new TreeMap<Character, Integer>();
		for (char c : arr) {
			Integer value = map.get(c);
			if(value==null) {
				map.put(c, 1);
			}else {
				map.put(c, value+1);
			}
		}
		/*Set<Entry<Character, Integer>> entrySet = map.entrySet();
		for (Entry<Character, Integer> entry : entrySet) {
			System.out.println(entry.getKey()+":"+entry.getValue());
		}*/
		
		map.entrySet().stream().sorted((x,y)->x.getValue().compareTo(y.getValue())).forEach(System.out::println);
		
	}
}

​

运行效果:

四、泛型

1、作用

①将运行时产生的异常转换为编译期的错误

②提高代码的健壮性

2、泛型类(通用的增删改查)

3、泛型方法(通用结果集处理的思考)

代码展示:

package com.xnx.map;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 泛型
 * 	之前:不健壮的代码,会在运行时才会把错误暴露出来
 * 	之后:将潜在的问题暴露出来,早预防早治疗
 * 		将运行期的出现的异常转换为编译期的错误
 * @author Administrator
 *
 */
public class Demo3 {
	public static void main(String[] args) {
		Set<Integer> set = new HashSet<>();
		set.add(1);
		set.add(2);
		set.add(3);
		set.add(4);
		set.add(5);
		for (Object obj : set) {
			if(Integer.valueOf(obj.toString())%2==0) {
				System.out.println(obj);
			}
		}
	}
}
class BookDao{
//	add(Book book);
//	del(Book book);
//	edit(Book book);
//	list(Book book);
}
class UserDao extends BaseDao{
}
class BaseDao<T>{
	void add(T t) {
		
	}
	void del(T t) {
		
	}
	void edit(T t) {
		
	}
	List<T> list(T t){
		return null;
	}
}
class Result{
	<T> void del(T t) {
		
	}
}

运行效果:

五、集合框架工具类

1、Collections

①排序

②集合转数组:toArray

2、Arrays

①toString

②asList

③sort

代码展示:

package com.xnx.map;

import java.util.Arrays;
import java.util.List;

/**
 * 集合之间的相互转换:
 * 1.数组转成集合,本质上依然是一个数组,长度是不可变的
 * 2.集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素
 * 
 * @author Administrator
 *
 */
public class Demo4 {
	public static void main(String[] args) {
		String[] arr={"a","b","c","d"};
		List<String> list = Arrays.asList(arr);
//		Object[] array = list.toArray();
		list.add("e");
//		java.lang.UnsupportedOperationException
		System.out.println(list.size());
	}
}

 运行效果:

原因:主要是第19行的问题

结论:数组转成集合,本质上依然是一个数组,长度是不可变的

集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值