Java基础 - 集合框架(5) : Map集合、Collections

1. Map集合的概述和特点

  • 将键映射到值的对象
  • 一个映射不能包含重复的键
  • 每个键最多只能映射到一个值

2. Map和Collection的区别 ?

  • A. Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
  • B. Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍

3. Map集合的遍历之键找值

  • 思路 :

     A. 获取所有的键
     B. 遍历键的集合,获取得到每一个键
     C. 根据键区找值
    
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo3 {

	public static void main(String[] args) {
		
		Map<String, String> map = new HashMap<String, String>();
		
		map.put("杨过", "小龙女");
		map.put("郭靖", "黄蓉");
		map.put("徐康健", "柳波");
		map.put("XKJ", "沙雳");

		Set<String> set = map.keySet();
		
//		for (Object object : set) {
			String key = (String) object;
			map.get(key);
			System.out.println(key + "---" + map.get(key));
//		}
//		
		for (String key : set) {
			String value = map.get(key);
			System.out.println(key + "---" + value);
		}

	}

}

4. Map集合的遍历之键值对对象找键和值

  • 思路 :

     A. 获取所有键值对对象的集合
     B. 遍历键值对对象的集合,得到每一个键值对对象
     C. 根据键值对对象获取键和值
    
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapDemo4 {

	public static void main(String[] args) {
	
	Map<String, String> map = new HashMap<String, String>();
		
		map.put("杨过", "小龙女");
		map.put("郭靖", "黄蓉");
		map.put("徐康健", "柳波");
		map.put("XKJ", "沙雳");

		Set<Entry<String, String>> set = map.entrySet();

		for (Entry<String, String> me : set) {
			String key = me.getKey();
			String value = me.getValue();
			System.out.println(key + "---" + value);
		}
		
	}

}

5. Map集合遍历的两种方式比较图解

在这里插入图片描述

6. HashMap集合键是Stirng值是String的案例(HashMap<String,String>)

  • 哈希表的作用是来保证键的唯一性的。
import java.util.HashMap;
import java.util.Set;

public class HashMapDemo {

	public static void main(String[] args) {
	
		HashMap<String, String> hm = new HashMap<String, String>();
		
		hm.put("AK002", "马云");
		hm.put("AK001", "马化腾");
		hm.put("AK005", "乔布斯");
		hm.put("AK003", "刘在石");
		hm.put("AK002", "朴明秀");
		
		Set<String> set = hm.keySet();
		for (String key : set) {
			String value = hm.get(key);
			System.out.println(key + "---" + value);
		}
		
	}

}

7. HashMap集合键是Integer值是String的案例(HashMap<Integer,String>)

import java.util.HashMap;
import java.util.Set;

public class HashMapDemo2 {

	public static void main(String[] args) {
		
		HashMap<Integer, String> hm = new HashMap<Integer, String>();

		hm.put(68, "科比");

		hm.put(26, "杨腾宇");
		hm.put(30, "徐康健德子");

		hm.put(24, "姚中仁");

		Set<Integer> set = hm.keySet();
		for (Integer key : set) {
			String value = hm.get(key);
			System.out.println(value + "---" + key);
		}
		
		System.out.println(hm);
		
	}

}

8. HashMap集合键是String值是Student的案例(HashMap<String,Student>)

import java.util.HashMap;
import java.util.Set;

public class HashMapDemo3 {
	public static void main(String[] args) {
		
		HashMap<String, Student> hm = new HashMap<String, Student>();
		
		Student s1 = new Student("周星驰", 58);
		Student s2 = new Student("柳大华", 55);
		Student s3 = new Student("梁朝伟", 59);
		Student s4 = new Student("刘嘉玲", 53);

		hm.put("9527", s1);
		hm.put("9522", s3);
		hm.put("9524", s2);
		hm.put("9529", s4);
		
		Set<String> set = hm.keySet();
		for (String key : set) {
			Student student = hm.get(key);
			System.out.println(student.getAge() + "---" + key + "---" + student.getName());
		}

	}
}

9. HashMap集合键是Student值是String的案例(HashMap<Student,String>)

  • Hash(哈希)结构都依赖hashCode()和equals()方法
import java.util.HashMap;
import java.util.Set;

public class HashMapDemo4 {

	public static void main(String[] args) {
		
		Map<Student, String> hm = new HashMap<Student, String>();
		
		Student s1 = new Student("杨腾宇", 26);
		Student s2 = new Student("王昭君", 28);
		Student s3 = new Student("西施", 16);
		Student s4 = new Student("貂蝉", 06);
		Student s5 = new Student("西施", 16);  // 重写hashCode()和equals()方法
		
		hm.put(s1, "6666");
		hm.put(s2, "9999");
		hm.put(s3, "1111");
		hm.put(s4, "3333");
		hm.put(s5, "8888");

		Set<Student> set = hm.keySet();
		for (Student key : set) {
			String value = hm.get(key);
			System.out.println(key.getName() + "---" + key.getAge() + "---" + value);
		}
		
	}

}

10. LinkedHashMap的概述和使用

  • LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。
  • 由哈希表保证键的唯一性
  • 由链表保证键盘的有序(存储和取出的顺序一致)
import java.util.LinkedHashMap;
import java.util.Set;

public class LinkedHashMapDemo {

	public static void main(String[] args) {
		
		LinkedHashMap<String, String> lkm = new LinkedHashMap<String, String>();

		lkm.put("2345", "hello");
		lkm.put("1234", "world");
		lkm.put("5678", "java");
		lkm.put("2345", "javaee");
		lkm.put("5678", "mybatis");
		
		Set<String> set = lkm.keySet();
		for (String key : set) {
			String value = lkm.get(key);
			System.out.println(key + "---" + value);
		}
		
	}

}

11. TreeMap集合的概述和特点

  • 基于红黑树的Map接口的实现。
import java.util.Set;
import java.util.TreeMap;

public class TreeMapDemo {

	public static void main(String[] args) {
	
		TreeMap<String, String> tm = new TreeMap<String, String>();
		
		tm.put("hello", "你好");
		tm.put("world", "世界");
		tm.put("Java", "爪哇国");
		tm.put("world", "新世界");
		tm.put("JavaEE", "EE爪哇国");
		
		Set<String> set = tm.keySet();
		for (String key : set) {
			String value = tm.get(key);
			System.out.println(key + "---" + value);
		}

	}

}

12. 统计字符串中每个字符出现的次数案例代码实现

import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapDemo {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串:");
		String line = sc.nextLine();
		
		TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
		
		char[] chs = line.toCharArray();
		
		for (char ch : chs) {
			Integer i = tm.get(ch);
			
			if (i == null) {
				tm.put(ch, 1);
			} else {
				i++;
				tm.put(ch, i);
			}
		}
		
		StringBuffer sb = new StringBuffer();
		
		Set<Character> set = tm.keySet();
		
		for (Character key : set) {
			Integer value = tm.get(key);
			sb.append(key).append("(").append(value).append(")");
		}
		
		String result = sb.toString();
		System.out.println(result);
		
	}
}

13. HashMap集合嵌套HashMap集合的案例

import java.util.HashMap;
import java.util.Set;

public class HashMapDemo2 {

	public static void main(String[] args) {
	
		// 大集合
		HashMap<String, HashMap<String, Integer>> czbkMap = new HashMap<String, HashMap<String, Integer>>();
		
		// 基础班集合对象
		HashMap<String, Integer> jcMap = new HashMap<String, Integer>();
		
		jcMap.put("徐康健", 27);
		jcMap.put("高晗", 27);
		
		czbkMap.put("基础班", jcMap);
		
		// 就业班集合对象
		HashMap<String, Integer> jyMap = new HashMap<String, Integer>();
		
		jyMap.put("杨腾宇", 26);
		jyMap.put("YTY", 66);
		
		czbkMap.put("就业班", jyMap);
		
		Set<String> czbkMapSet = czbkMap.keySet();
		for (String czbkMapKey : czbkMapSet) {
			
			System.out.println(czbkMapKey);
			
			HashMap<String, Integer> czbkMapValue = czbkMap.get(czbkMapKey);
			
			
			Set<String> czbkMapValueSet = czbkMapValue.keySet();
			for (String czbkMapValueKey : czbkMapValueSet) {
				Integer czbkMapValueValue = czbkMapValue.get(czbkMapValueKey);
				System.out.println("\t" + czbkMapValueKey + "---" + czbkMapValueValue);
			}
			
			
		}

	}

}

14. HashMap集合嵌套ArrayList集合的案例

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class ArrayListInHashMap {

	public static void main(String[] args) {
	
		HashMap<String , ArrayList<String>> hm = new HashMap<String , ArrayList<String>>();

		ArrayList<String> array1 = new ArrayList<String>();
		array1.add("吕布");
		array1.add("周瑜");
		hm.put("三国演义", array1);
		
		ArrayList<String> array2 = new ArrayList<String>();
		array2.add("令狐冲");
		array2.add("任我行");
		hm.put("笑傲江湖", array2);
		
		ArrayList<String> array3 = new ArrayList<String>();
		array3.add("大力金刚经");
		array3.add("一阳指");
		hm.put("天龙八部", array3);
		
		Set<String> set = hm.keySet();
		for (String key : set) {
			System.out.println(key);
			ArrayList<String> value = hm.get(key);
		
			for (String string : value) {
				System.out.println("\t" + string);
			}
			
		}
		
	}

}

15. ArrayList集合嵌套HashMap集合的案例

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

public class HashMapInArrayList {

	public static void main(String[] args) {
		
		ArrayList<Map<Integer, String>> arrayList = new ArrayList<Map<Integer, String>>();

		Map<Integer, String> map1 = new HashMap<Integer, String>();
		map1.put(66, "WAF");
		map1.put(24, "科比ni很帅");
		
		Map<Integer, String> map2 = new HashMap<Integer, String>();
		map2.put(68, "热狗");
		map2.put(29, "脆骨肠");
		
		Map<Integer, String> map3 = new HashMap<Integer, String>();
		map3.put(666666, "机器学习");
		map3.put(16, "烤肠机");
		
		arrayList.add(map1);
		arrayList.add(map2);
		arrayList.add(map3);
		
		for (Map<Integer, String> map : arrayList) {
			Set<Integer> set = map.keySet();
			for (Integer key : set) {
				System.out.println(key + "---" + map.get(key));
			}
		}
		
	}

}

16. 集合的多层嵌套

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

public class HashMapDemo {

	public static void main(String[] args) {
	
		// 创建大大卷集合
		HashMap<String, HashMap<String, ArrayList<Student>>> czbkMap = new HashMap<String, HashMap<String, ArrayList<Student>>>();
		
		// 北京校区
		HashMap<String, ArrayList<Student>> bjCzbkMap = new HashMap<String, ArrayList<Student>>();
		ArrayList<Student> array1 = new ArrayList<Student>();
		Student s1 = new Student("杨腾宇", 26);
		Student s2 = new Student("酷爱WAF", 28);
		array1.add(s1);
		array1.add(s2);
		
		ArrayList<Student> array2 = new ArrayList<Student>();
		Student s3 = new Student("陈浩元", 27);
		Student s4 = new Student("贾伟", 29);
		array2.add(s3);
		array2.add(s4);
		bjCzbkMap.put("基础班", array1);
		bjCzbkMap.put("就业班", array2);
		czbkMap.put("北京校区", bjCzbkMap);
		
		// 西安校区
		HashMap<String, ArrayList<Student>> xaCzbkMap = new HashMap<String, ArrayList<Student>>();
		ArrayList<Student> array3 = new ArrayList<Student>();
		Student s5 = new Student("范冰冰", 36);
		Student s6 = new Student("李晨", 35);
		array3.add(s6);
		array3.add(s5);
		
		ArrayList<Student> array4 = new ArrayList<Student>();
		Student s7 = new Student("黄晓明", 39);
		Student s8 = new Student("杨天宝", 30);
		array4.add(s8);
		array4.add(s7);
		xaCzbkMap.put("基础班", array4);
		xaCzbkMap.put("就业班", array3);
		czbkMap.put("西安校区", xaCzbkMap);
		
		// 广东校区
		HashMap<String, ArrayList<Student>> gdCzbkMap = new HashMap<String, ArrayList<Student>>();
		ArrayList<Student> array5 = new ArrayList<Student>();
		Student s9 = new Student("卢本伟", 30);
		Student s10 = new Student("刘谋", 33);
		array5.add(s10);
		array5.add(s9);
		
		ArrayList<Student> array6 = new ArrayList<Student>();
		Student s11 = new Student("好火药", 666);
		Student s12 = new Student("好奶子", 688);
		array6.add(s12);
		array6.add(s11);
		gdCzbkMap.put("就业班没得问题", array6);
		gdCzbkMap.put("基础班没得商量", array5);
		czbkMap.put("广东校区", gdCzbkMap);
		
		Set<String> czbkMapSet = czbkMap.keySet();
		for (String czbkMapKey : czbkMapSet) {
			System.out.println(czbkMapKey);
			HashMap<String, ArrayList<Student>> czbkMapValue = czbkMap.get(czbkMapKey);
			Set<String> czbkMapValueSet = czbkMapValue.keySet();
			for (String czbkMapValueKey : czbkMapValueSet) {
				System.out.println("\t" + czbkMapValueKey);
				ArrayList<Student> czbkMapValueValue = czbkMapValue.get(czbkMapValueKey);
				for (Student student : czbkMapValueValue) {
					System.out.println("\t\t" + student.getAge() + "---" + student.getName());
				}
			}
		}
		
	}

}

17. List,Set,Map等接口是否都继承自Map接口?

  • List,Set不是继承自Map接口,它们继承自Collection接口
  • Map接口本身就是一个顶层接口

18. Collections工具类的概述

  • 是针对集合进行操作的工具类,都是静态方法。

19. Collection和Collections的区别?

  • A. Collection 是单列集合的顶层接口,有两个子接口List和Set
  • B. Collections 是针对集合进行操作的工具类,可以对集合进行排序和二分查找等方法

20. Collections工具类的常见方法讲解

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


public class CollectionsDemo {
	public static void main(String[] args) {
		
		List<Integer> list = new ArrayList<Integer>();

		
		list.add(30);
		list.add(20);
		list.add(50);
		list.add(10);
		list.add(40);

		System.out.println("list:" + list);

		// public static <T> void sort(List<T> list)  排序  默认情况下是自然顺序。
		// Collections.sort(list);
		// System.out.println("list:" + list);
		// [10, 20, 30, 40, 50]

		// public static <T> int binarySearch(List<?> list,T key):  二分查找
		// System.out
		// .println("binarySearch:" + Collections.binarySearch(list, 30));
		// System.out.println("binarySearch:"
		// + Collections.binarySearch(list, 300));

		// public static <T> T max(Collection<?> coll): 最大值
		// System.out.println("max:"+Collections.max(list));

		// Collections.reverse(list);  反转
		// System.out.println("list:" + list);
		
		//public static void shuffle(List<?> list):  随机置换
		Collections.shuffle(list);
		System.out.println("list:" + list);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值