J2EE基础----集合框架map

目录

思维导图​编辑

一、map集合的特点及遍历方式

 二、字符串出现的次数

 三、泛型

四、工具类

数据的转换 :

其他方法

sort方法 

 toString方法


 

思维导图

一、map集合的特点及遍历方式

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

案例如下: 

package com.heminjie.map;

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

/**
 * map集合的特点
 * 键值对
 * 遍历:
 * 		拿到key,再拿值
 * 		拿到映射关系:键值都有了
 * 
 * 
 * HashMao与hastable的区别
 * 1.hashtable 是线程安全的
 * 
 * 2.jdk1.8以下hashtable的key不能存放null
 * @author Administrator
 *
 */
public class Demo1 {

	public static void main(String[] args) {
//		Hashtable<Object, Object> table = new Hashtable<>();
//		table.put("a",1);
//		table.put(null,null);
		
		
		Map<String ,Integer> map = new HashMap<>();
		map.put("a", 1);
		map.put("b", 2);
//		map.put(null, 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", 21);
		System.out.println(map);
		
//		查询
		System.out.println(map.get("c"));
		
//		查询所有
//		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());
		}
		
	}

}

结果:

一个是先拿到map集合中的所有key

另一个是用映射关系

 二、字符串出现的次数

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

案例如下

package com.heminjie.map;

import java.nio.MappedByteBuffer;
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 = "jlkjslkdjlksjfksjfdkjljljflsajf";
		char[] arr = s.toCharArray();
		Map<Character, Integer> map = new HashMap<>();
		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());
		}	
	}
}

结果:

 若想按照字符的出现次数进行排序输出,可以这样写

案例

package com.heminjie.map;

import java.nio.MappedByteBuffer;
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 = "jlkjslkdjlksjfksjfdkjljljflsajf";
		
		char[] arr = s.toCharArray();
		Map<Character, Integer> map = new TreeMap<>();
		for (char c : arr) {
			Integer value = map.get(c);
			 if(value == null) {
				 map.put(c, 1);
			 }else {
				 map.put(c, value+1);
			 }
		}
		map.entrySet().stream().sorted((x,y)->x.getValue()-y.getValue()).forEach(System.out::println);
		
		
	}
}

结果

 三、泛型

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

package com.heminjie.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);
//		set.add("a");
		for (Object obj : set) {
			if(Integer.valueOf(obj.toString()) % 2 ==0) {
				System.out.println(obj);
			}
//			set.remove(obj);
		}
	}
}

结果:这个是能被2整除的数

 来和大家说下为什么要在Set那里加一个integer,不加的化,如果有人那里你这个代码,在set.add()括号里面放的不是数字就会报错,如下:

 固定了integer之后,在里面数的不是数字就会出错,这样就固定了,不然以后别人用自己代码出问题了,也好告诉他问题所在

 


四、工具类

数据的转换 :

 * 集合之间的相互转换:
 * 1.数组转成集合:本质上依然是一个数组,长度是不可变的
 * 2.集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素

案例:

package com.heminjie.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());
		
	}
}

结果:

数组里面就已经定死数量了的,若再给他在外增加一个,就是下面的结果,不增加打印出来的结果为4,大家可以去试试

 

其他方法

 * 对于工具类其他方法的一些应用
 * sort
 * tostring

sort方法 

案例:

package com.heminjie.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 对于工具类其他方法的一些应用
 * sort
 * tostring
 * @author Administrator
 *
 */
public class Demo5 {
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		list.add("b");
		list.add("c");
		list.add("a");
		//无序
		System.out.println("-------无序---------");
		System.out.println(list);
		//abc排序
		Collections.sort(list);
		System.out.println("-------abc排序---------");
		System.out.println(list);
		//cba排序
//		这里面的x、y指的是集合中的元素
		Collections.sort(list,(x,y)->y.compareTo(x));
		System.out.println("-------cba排序---------");
		System.out.println(list);
		
	}
}

结果:

 来跟大家说个方法,有些人为什么同样是sort,为什么报错

 

 首先,Collections.sort( );是用来排序的没错吧,上面那个list( )括号里面放的是String,而String是实现了接口的,自己可以看一下

 而我们现在的list放的是Person,而自己却没有给Person弄个接口,肯定会报错

 所以我们要实现一个接口,和从写一个compareTo,就不会报错啦,还可以打印出来

 

有人会问可以不写接口吗 ,答案是,当然可以,

案例如下

package com.heminjie.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 对于工具类其他方法的一些应用
 * sort
 * tostring
 * @author Administrator
 *
 */
public class Demo5 {
	public static void main(String[] args) {
		
		List<Person> list = new ArrayList<>();
		list.add(new Person("b",17));
		list.add(new Person("c",18));
		list.add(new Person("a",19));
//		System.out.println(list);
//		Collections.sort(list);
		Collections.sort(list,(x,y) -> x.getName().compareTo(y.getName()));
		System.out.println(list);
		
		
	}
}
class 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(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Person() {
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
}

结果

 toString方法

 最后一个案例,打印数组的内容:代码如下

package com.heminjie.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 对于工具类其他方法的一些应用
 * sort
 * tostring
 * @author Administrator
 *
 */
public class Demo5 {
	public static void main(String[] args) {

		
		Integer[] arr = {3,6,9,2,5,8};
		Arrays.sort(arr);
		System.out.println(arr);
		
	}
}

这样打印出来的结果是一串地址

 怎么样才能把他们打印出来了呢?简单,给他加一个Arrays.toString( )

如下

package com.heminjie.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 对于工具类其他方法的一些应用
 * sort
 * tostring
 * @author Administrator
 *
 */
public class Demo5 {
	public static void main(String[] args) {

		
		Integer[] arr = {3,6,9,2,5,8};
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));
		
	}
}

结果

 变为降序方法如下

ackage com.heminjie.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Demo5 {
	public static void main(String[] args) {
		Integer[] arr = {3,6,9,2,5,8};
		Arrays.sort(arr,(x,y) -> x - y);
		System.out.println(Arrays.toString(arr));
		
	}
}

结果

 

ok,今天就是分享的内容了,谢谢支持!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值