前言:给大家讲讲Map结合框架
码字不易,点个关注
转载请说明!
思维导图:
目录
1.Map集合的特点
1.可以进行增删改查
2.以键值对形式存在
3.key可以是空(null)
代码展示:
/**
* Map集合的特点
* key 键 value 值
* @author zjjt
*
*/
public class Dome1 {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("a", 1);// 增加的方法
map.put("b", 2);
map.put("c", 3);
map.put(null, 4);//key 键值可以为空
System.out.println(map.remove("a"));//删除的方法,返回键对应的值
map.put("a", 6);//修改的方法,修改元素值
System.out.println(map.get("a")); //查询的方法 返回键对应的值
System.out.println(map);
}
}
输出结果如下:
2.Map集合的遍历方式
代码展示:
/**
* Map的遍历方式
*
* @author zjjt
*
*/
public class Dome2 {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
//将所有的键保存在set集合,再遍历输出键值对
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println("key:"+key+"---"+"value:"+map.get(key));
}
System.out.println("-----------------------");
//先获取Map集合的映射关系
Set<Entry<String, Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet) {
System.out.println("key:"+entry.getKey()+"---"+"value"+entry.getValue());
}
}
}
结果如下:
3.常用实现类HashMap以及例题
1.什么是HashMap?
说到容器,你肯定会想到 Java中对象存储容器还有ArrayList,LinkedList,HashSet等,HashMap 相对这些容器来说,可以理解为多了一层指向关系,可以用指定Key找到指定Value
2.数据结构:
1.整体是一个数组
2.数组每个位置是一个链表
3.链表每个节点中的Value即我们存储的Object
3.例题:统计字符串中各字符出现的次数
遇到问题首先要学会思考
步骤1:把字符串转换成字符数组
步骤2:遍历数组,将字符放入Map集合中的key
步骤3:判断,如果字符没有,给字符对应的值设置为1,如果有,给字符对应的值+1
代码展示 :
/*
* 统计字符串中字符出现次数
*/
public class Dome3 {
public static void main(String[] args) {
String s = "asdfsdfdsnjfdvkjhdsnfsfjkjshscjsdosdfsdfxcsv";
char[] charr = s.toCharArray();
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (char c : charr) {
Integer num=map.get(c);
if(num==null || num==0) {
map.put(c, 1);
}else {
map.put(c, ++num);
}
}
Set<Entry<Character, Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
System.out.println(entry.getKey()+"出现了"+entry.getValue()+"次");
}
}
}
输出结果如下:
4.泛型
1.作用
1.类型安全
2.消除强制类型转换
3.将运行时产生的异常转换成编译器的错误
4.更好的代码复用性
筛选出value为偶数对应的key
代码如下:
map.put("o", "张三");//插了一条键为o值为张三的数据
编译的时候告诉你没有问题,执行出来才会报错
这个时候value指定泛型为Integer,已经指定泛型,你还要加张三就会编译错误
2.泛型类
//定义一个泛型类,
class xxdao<H>{
public List<H> list(H h){
System.out.println("方法");
return null;
}
}
class Teacher{
}
class Student{
}
//指定泛型Teacher
class TeacherDao extends xxdao<Teacher>{
@Override
public List<Teacher> list(Teacher h) {
// TODO Auto-generated method stub
return super.list(h);
}
}
//指定泛型Student
class StudentDao extends xxdao<Student>{
@Override
public List<Student> list(Student h) {
// TODO Auto-generated method stub
return super.list(h);
}
}
3.泛型方法
//类与抽象类
//类里面不允许有抽象方法
//抽象类允许有抽象方法
//如果不是泛型类,那么方法内部不能泛型方法 不完全对
//泛型方法解决上面问题
class xxdao1<H>{
public <T> List<H> list(H h){
System.out.println("方法");
return null;
}
}
5.集合框架工具类
1.Collections
1.排序
2.集合转数组:toArray
2.Arrays
1.toString
2.sort
3.asList
代码如下
/**
* 集合框架工具类
*
* @author zjjt
*
*/
public class Dome5 {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三", 16));
list.add(new User("李四", 17));
list.add(new User("王五", 20));
list.add(new User("赵六", 18));
// 年龄降序 sort
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return -(o1.getAge() - o2.getAge());
}
});
for (User s : list) {
System.out.println(s);
}
String[] arr = new String[] { "a", "h", "j", "p", "g", "w" };
//System.out.println(arr);会得到地址 [Ljava.lang.String;@7852e922
/**
* 取到数组里面的值
*/
// for (String string : arr) {
// System.out.println(string);
// }
// toString
System.out.println(Arrays.toString(arr));
//把数组变成集合操作,不能违背数组本身的特点
//例如数组长度不可变
List<String> asList = Arrays.asList(arr);
//asList.add("4");运行会报错
/**
* 冒泡排序
*/
Integer[] in=new Integer[] {5,3,8,7};
Arrays.sort(in);
System.out.println(Arrays.toString(in));
}
}
class User {
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;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
到这里就结束了,我依旧是那个学IT的小学生
欢迎大佬指点