目录
内容:
一、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行的问题
结论:数组转成集合,本质上依然是一个数组,长度是不可变的
集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素