集合框架之map

一、map集合的特点

1.1 map集合的基本使用方式

map集合的使用包括增删改查
下面展示 map集合的增删改查代码

package com.Yzp.map;

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

/**
 * map集合的特点
 * 键值对
 * 遍历:
 *		拿到key,再拿值
 *		拿到映射关系,键值都有了
 *HashMap与hashtable的区别
 *1.hashtable 是线程安全的
 *2.jdk1.8以下hashtable的key不能存放null
 *
 * @author 易泽鹏
 *
 * 2022年6月9日上午11:15:38
 */
public class YzpDemo1 {

	public static void main(String[] args) {
		Hashtable<String, Integer> table = new Hashtable<>();
		// public synchronized v put(K key,V value)
		table.put("a", 1);
		
		
		
		Map<String, Integer> map = new HashMap<>();
		//V put (K key,V value);
		map.put("a", 1);
		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"));

1.2 map集合的两种遍历方式

map集合两种遍历方式一种是先拿到map集合中的所有key还有一种是
2.拿到映射关系

下面展示 map两种遍历方式代码

//1.先拿到map集合中的所有key
		Set keys = map.keySet();
		for (Object key : keys) {
			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());

		}

二、字符串切割和 debug的使用

2.1字符串的切割

实现思路:
* 1.做一个字符串切割,得到一个字符数组
* 2.接下里遍历,拿到单个字符
* 3.如果该字符没有出现过,即value值为null,那么该字符为key,值初始化为1
* 4.如果已经出现过,拿到原来的值+1

下面展示一些 内联代码片

package com.Yzp.map;

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

public class YzpDemo2 {

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

2.2 debug的使用

debugger的使用:调试代码
* 1.打断点
* 2.采用debug的方式运行程序
* 3.进入调试窗口,左上方有一个step over调试箭头,快捷键F6
* 4.接下来可以通过F6一步步调试当前程序对应的每一个变量值

三、泛型

泛型的作用:可以将将错在的问题暴露出来,早预防早治疗将运行期出现的异常转换为编译期的错误
之前:不健壮的代码,会运行时才会把错误暴露出来
之后:将错在的问题暴露出来,早预防早治疗将运行期出现的异常转换为编译期的错误

下面展示一些 泛型代码

package com.Yzp.map;

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

/**
 * 泛型
 * @author 易泽鹏
 *		之前:不健壮的代码,会运行时才会把错误暴露出来
 *		之后:将错在的问题暴露出来,早预防早治疗
 *			将运行期出现的异常转换为编译期的错误
 * 2022年6月9日下午3:25:27
 */
public class YzpDemo3 {

	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);
//		set.add("a");
		for (Object object : set) {
			if(Integer.valueOf(object.toString())%2==0) {
				System.out.println(object);
			}
//			set.remove(object);
		}
	}
}
class BookDao{
	// add(Book book)
	// del(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.数组转成集合,本质上依然是一个数组:长度是不可变
2.集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素w
如果强行运行会报:java.lang.UnsupportedOperationException **
​下面展示代码

package com.Yzp.map;

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

/**
 * 集合之间的相互转换:
 * 1.数组转成集合,本质上依然是一个数组:长度是不可变
 * 2.集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素
 * 
 * @author 易泽鹏
 *
 * 2022年6月9日下午8:10:47
 */
public class YzpDemo4 {

	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());
		 
	}
}

五、对其他工具类方法的使用

Collections:排序和集合转数组:toArray
Arrays里面的tostring和aslist和sort方法的使用*
下面展示代码

package com.Yzp.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.locks.Condition;

/**
 * 对于工具类其他方法的应用
 * sort
 * tostring
 * @author 易泽鹏
 *
 * 2022年6月9日下午8:18:18
 */
public class YzpDemo5 {

	public static void main(String[] args) {
//		List<String> list = new ArrayList<>();
//		list.add("b");
//		list.add("c");
//		list.add("d");
//		list.add("a");
//		System.out.println(list);
//		Collections.sort(list);
//		System.out.println(list);
//		//这里面的x,y指的是集合中的元素
//		Collections.sort(list, (x,y) -> y.compareTo(x));
//		System.out.println(list);
		
		
		List<Person> list = new ArrayList<>();
		list.add(new Person("b猪崽", 16));
		list.add(new Person("荣满崽", 1));
		list.add(new Person("a文比崽", 18));
		list.add(new Person("冠逼崽", 12));
		System.out.println(list);
//		Collections.sort(list, (x,y) ->x.getAge()-y.getAge());
		//实现接口
		Collections.sort(list);
		System.out.println(list);
		Integer[] arr = {12,5,3,6,14,9};
		Arrays.sort(arr, (x,y)->y-x);
		System.out.println(Arrays.toString(arr));
		
	}
}

class Person implements Comparable<Person>{
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Person() {
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public int compareTo(Person o) {
			
		return o.getName().compareTo(this.name);
	}
	
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值