01.第一章:Map集合_概述:
A).Collection(单列集合)
1).迭代器
2).增强for
|--List:
3).get(..)
|--Set:
无
B).Map(双列集合):
02.第一章:Map集合_Map的常用子类:
注意:Map内部也使用了“数据结构”,任何的数据结构都是应用在“键”上。
Map(接口):
|--HashMap(子类):“键”是哈希表结构;
|--LinkedHashMap(子类):“键”是链表 + 哈希表结构;
03.第一章:Map集合_Map接口中定义的常用方法:
添加、修改:
1).public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
此方法在正常添加情况下,返回null。
当添加重复的“键”时,会使用“新值”替换集合内的“旧值”,并将旧值返回。
删除:
2).public V remove(Object key) : 把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
查询:
3).public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
遍历方式:
4).public Set<K> keySet() : 获取Map集合中所有的键, 存储到Set集合中。
5).public Set<Map. Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
04.第一章:Map集合Map集合遍历键找值:
4).public Set<K> keySet() : 获取Map集合中所有的键, 存储到Set集合中。
示例代码:
public class Demo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("绿巨人","王宝强");
map.put("老王","宋喆");
map.put("美女","马蓉");
map.put("影帝","黄渤");
//1.遍历的方式一:键找值
//1-1:获取map中所有的“键"
Set<String> keys = map.keySet();
//1-2:遍历Set
for(String key : keys){
System.out.println("键:" + key + " 值:" + map.get(key));
}
}
}
05.第一章:Map集合Map集合遍历键值对对象_Entry对象说明:
1).Map接口中有一个“内部接口”:Entry,里面定义了两个方法:
1).getKey():
2).getValue();
2).HashMap中有一个“内部类”Node实现了Map.Entry接口。
3).当我们向HashMap中添加一个“键值对”时,HashMap会将这个“键值对”直接封装到一个Node对象中。
4).我们可以通过HashMap的entrySet()方法,将所有的Node对象封装到一个Set中,并返回。我们取过来可以进行遍历。
06.第一章:Map集合Map集合遍历键值对对象:
public class Demo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("绿巨人","王宝强");
map.put("老王","宋喆");
map.put("美女","马蓉");
map.put("影帝","黄渤");
//遍历方式二:获取"键值对”对象
Set<Map.Entry<String,String>> entrySet = map.entrySet();
for (Map.Entry<String, String> e : entrySet) {
String key = e.getKey();
String value = e.getValue();
System.out.println("键:" + key + " 值:" + value);
}
}
}
07.第一章:Map集合_Map子类_HashMap的基本使用和使用自定义对象做键:
1).注意:自定义对象做键,需要重写:hashCode()和equals()方法;
2).示例代码:
1).自定义Student类:
public class Student {
String name;
int age;
....
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
2).测试类:
public class Demo {
public static void main(String[] args) {
Map<Student, String> map = new HashMap<>();
map.put(new Student("张三", 18), "it001");
map.put(new Student("李四", 19), "it002");
map.put(new Student("李四", 19), "it003");
System.out.println(map);
}
}
08.第一章:Map集合_Map子类_LinkedHashMap的基本使用:
1).LinkedHashMap是一个:有序的Map;
2).示例代码:
public class Demo {
public static void main(String[] args) {
Map<String, String> map = new LinkedHashMap<>();
map.put("绿巨人","王宝强");
map.put("老王","宋喆");
map.put("美女","马蓉");
map.put("影帝","黄渤");
System.out.println(map);
}
}
09.第一章:Map集合Map集合练习计算每个字符出现的次数:
public class Demo {
public static void main(String[] args) {
//题目:统计一个英文字符串中a、b、c、d四个字符各出现多少次?
String str = "fjklsjjakvcajkalcfjdklacfjkacfdbfbbbbfsaa";
//1.准备一个集合Map<Character,Integer>
Map<Character,Integer> map = new HashMap<>();
//2.遍历字符串
for(int i = 0;i < str.length() ; i++) {
char c = str.charAt(i);
if(c == 'a' || c == 'b' || c == 'c' || c == 'd'){
//从map中取出key = a的value
Integer value = map.get(c);
if (value == null) {
value = 1;
}else{
value++;
}
//将value值再存储到map中
map.put(c,value);
}
}
//遍历
Set<Character> keys = map.keySet();
for (Character key : keys) {
System.out.println(key + " = " + map.get(key) + " 个");
}
}
}
10.第二章:补充知识点_JDK9对集合添加的优化:
1).当我们向集合中添加多个元素时,总是要多次的调用add()方法,这样很麻烦;
解决:
1.Collections工具类的addAll()方法;(学过)
2.JDK9在Map接口、List接口、Set接口中添加了一个"静态方法"--of()方法
2).示例代码: public class Demo {
public static void main(String[] args) {
//1.自己向List中添元素
List<Integer> intList = new ArrayList<>();
intList.add(10);
intList.add(20);
intList.add(30);
intList.add(40);
//2.使用Collections的addAll方法
List<Integer> intList2 = new ArrayList<>();
Collections.addAll(intList2,10,20,30,40);
//3.使用List接口的of()方法
List<Integer> intList3 = List.<Integer>of(10,20,30,40,50);
System.out.println(intList3);
// intList3.add(60);//错误,不能添加
// intList3.remove(0);//错误,不能删除
// intList3.set(0, 1000);//错误,不能修改
System.out.println(intList3.getClass().getName());
//4.测试Set接口的of()
Set<Integer> intSet = Set.<Integer>of(10, 20, 30, 40, 50, 60);
System.out.println(intSet);
//5.测试Map接口的of()
Map<String,Integer> strMap = Map.<String,Integer>of("a",1,"b",2,"c",3);
System.out.println(strMap);
}
}
11.第二章:补充知识点_Debug追踪调试:
步骤:
1).在"代码"界面,选择要暂停的行左侧,鼠标单击,出现一个红点:
2).在代码界面-->右键-->选择:Debug "xxx.java"
3).运行后,编辑器会自动在断点处暂停:
4). 常用快捷键:
1).F7 : 单步运行,遇到方法调用会进入到方法体;
2).F8 : 单步运行,遇到方法调用不会进入方法体,直接将方法执行完毕;
3).F9 : 结束单步运行,继续执行后续的代码。除非再次遇到断点会暂停,否则如果后续没有断点,就将程序执行完毕。
12.第三章:综合案例模拟斗地主洗牌发牌案例介绍:
13.第三章:综合案例模拟斗地主洗牌发牌案例分析:
14.第三章:综合案例模拟斗地主洗牌发牌代码实现: