Map集合框架

 前言:给大家讲讲Map结合框架

 码字不易,点个关注

 转载请说明!


思维导图:


目录

1.Map集合的特点

2.Map集合的遍历方式

3.常用实现类HashMap以及例题

1.什么是HashMap?

扫描二维码关注公众号,回复: 13153583 查看本文章

2.数据结构:

3.例题:统计字符串中各字符出现的次数

4.泛型

1.作用

2.泛型类

3.泛型方法

5.集合框架工具类

1.Collections

2.Arrays


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的小学生 

欢迎大佬指点 

猜你喜欢

转载自blog.csdn.net/weixin_56069070/article/details/119115401