01 语言基础+高级:1-6 集合_day04【Map】
day04 【Map】
主要内容
- Map集合
教学目标
- 能够说出Map集合特点
- 使用Map集合添加方法保存数据
- 使用”键找值”的方式遍历Map集合
- 使用”键值对”的方式遍历Map集合
- 能够使用HashMap存储自定义键值对的数据
第一章 Map集合
1.1 概述
现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一 一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种k-v关系的对象,即java.util.Map
接口。
我们通过查看Map
接口描述,发现Map
接口下的集合与Collection
接口下的集合,它们存储数据的形式不同,如下图。
Collection
中的集合称为单列集合,Map
中的集合称为双列集合。- 需要注意的是,
Map
中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
01_Map集合概述
1.2 Map常用子类
通过查看Map接口描述,看到Map有多个子类,这里我们主要讲解常用的HashMap集合、LinkedHashMap集合。
- HashMap<k,v>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
- LinkedHashMap<k,v>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
tips:Map接口中的集合都有两个泛型变量<k,v>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量<k,v>的数据类型可以相同,也可以不同。
1.3 Map接口中的常用方法
Map接口中定义了很多方法,常用的如下:
public V put(K key, V value)
: 把指定的键与指定的值添加到Map集合中。public V remove(Object key)
: 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。public V get(Object key)
根据指定的键,在Map集合中获取对应的值。boolean containsKey(Object key)
判断集合中是否包含指定的键。public Set<K> keySet()
: 获取Map集合中所有的键,存储到Set集合中。public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对 对象的集合(Set集合)。
Map接口的方法演示
- public class Demo01Map {
- public static void main(String[] args) {
- show04();
- }
- /*
- boolean containsKey(Object key) 判断集合中是否包含指定的键。
- 包含返回true,不包含返回false
- */
- private static void show04() {
- //创建Map集合对象
- Map<String,Integer> map = new HashMap<>();
- map.put("赵丽颖",168);
- map.put("杨颖",165);
- map.put("林志玲",178);
- boolean b1 = map.containsKey("赵丽颖");
- System.out.println("b1:"+b1);//b1:true
- boolean b2 = map.containsKey("赵颖");
- System.out.println("b2:"+b2);//b2:false
- }
- /*
- public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
- 返回值:
- key存在,返回对应的value值
- key不存在,返回null
- */
- private static void show03() {
- //创建Map集合对象
- Map<String,Integer> map = new HashMap<>();
- map.put("赵丽颖",168);
- map.put("杨颖",165);
- map.put("林志玲",178);
- Integer v1 = map.get("杨颖");
- System.out.println("v1:"+v1);//v1:165
- Integer v2 = map.get("迪丽热巴");
- System.out.println("v2:"+v2);//v2:null
- }
- /*
- public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
- 返回值:V
- key存在,v返回被删除的值
- key不存在,v返回null
- */
- private static void show02() {
- //创建Map集合对象
- Map<String,Integer> map = new HashMap<>();
- map.put("赵丽颖",168);
- map.put("杨颖",165);
- map.put("林志玲",178);
- System.out.println(map);//{林志玲=178, 赵丽颖=168, 杨颖=165}
- Integer v1 = map.remove("林志玲");
- System.out.println("v1:"+v1);//v1:178
- System.out.println(map);//{赵丽颖=168, 杨颖=165}
- //int v2 = map.remove("林志颖");//自动拆箱 NullPointerException
- Integer v2 = map.remove("林志颖");
- System.out.println("v2:"+v2);//v2:null
- System.out.println(map);//{赵丽颖=168, 杨颖=165}
- }
- /*
- public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
- 返回值:v
- 存储键值对的时候,key不重复,返回值V是null
- 存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值
- */
- private static void show01() {
- //创建Map集合对象,多态
- Map<String,String> map = new HashMap<>();
- String v1 = map.put("李晨", "范冰冰1");
- System.out.println("v1:"+v1);//v1:null
- String v2 = map.put("李晨", "范冰冰2");
- System.out.println("v2:"+v2);//v2:范冰冰1
- System.out.println(map);//{李晨=范冰冰2}
- map.put("冷锋","龙小云");
- map.put("杨过","小龙女");
- map.put("尹志平","小龙女");
- System.out.println(map);//{杨过=小龙女, 尹志平=小龙女, 李晨=范冰冰2, 冷锋=龙小云}
- }
- }
public class Demo01Map
tips:
使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;
若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。
1.4 Map集合遍历键找值方式
键找值方式:即通过元素中的键,获取键所对应的值
分析步骤:
- 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示:
keyset()
- 遍历键的Set集合,得到每一个键。
- 根据键,获取键所对应的值。方法提示:
get(K key)
代码演示:
- /*
- Map集合的第一种遍历方式:通过键找值的方式
- Map集合中的方法:
- Set<K> keySet() 返回此映射中包含的键的 Set 视图。
- 实现步骤:
- 1.使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
- 2.遍历set集合,获取Map集合中的每一个key
- 3.通过Map集合中的方法get(key),通过key找到value
- */
- public class Demo02KeySet {
- public static void main(String[] args) {
- //创建Map集合对象
- Map<String,Integer> map = new HashMap<>();
- map.put("赵丽颖",168);
- map.put("杨颖",165);
- map.put("林志玲",178);
- //1.使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
- Set<String> set = map.keySet();
- //2.遍历set集合,获取Map集合中的每一个key
- //使用迭代器遍历Set集合
- Iterator<String> it = set.iterator();
- while (it.hasNext()){
- String key = it.next();
- //3.通过Map集合中的方法get(key),通过key找到value
- Integer value = map.get(key);
- System.out.println(key+"="+value);
- }
- System.out.println("-------------------");
- //使用增强for遍历Set集合
- for(String key : set){
- //3.通过Map集合中的方法get(key),通过key找到value
- Integer value = map.get(key);
- System.out.println(key+"="+value);
- }
- System.out.println("-------------------");
- //使用增强for遍历Set集合
- for(String key : map.keySet()){
- //3.通过Map集合中的方法get(key),通过key找到value
- Integer value = map.get(key);
- System.out.println(key+"="+value);
- }
- }
- }
public class Demo02KeySet
遍历图解:
1.5 Entry键值对对象
我们已经知道,Map
中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map
中是一一对应关系,这一对对象又称做Map
中的一个Entry(项)
。Entry
将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map
集合时,就可以从每一个键值对(Entry
)对象中获取对应的键与对应的值。
既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:
public K getKey()
:获取Entry对象中的键。public V getValue()
:获取Entry对象中的值。
06_Map集合遍历键值对方式
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- /*
- Map集合遍历的第二种方式:使用Entry对象遍历
- Map集合中的方法:
- Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 视图。
- 实现步骤:
- 1.使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
- 2.遍历Set集合,获取每一个Entry对象
- 3.使用Entry对象中的方法getKey()和getValue()获取键与值
- */
- public class Demo03EntrySet {
- public static void main(String[] args) {
- //创建Map集合对象
- Map<String,Integer> map = new HashMap<>();
- map.put("赵丽颖",168);
- map.put("杨颖",165);
- map.put("林志玲",178);
- //1.使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
- Set<Map.Entry<String, Integer>> set = map.entrySet();
- //2.遍历Set集合,获取每一个Entry对象
- //使用迭代器遍历Set集合
- Iterator<Map.Entry<String, Integer>> it = set.iterator();
- while(it.hasNext()){
- Map.Entry<String, Integer> entry = it.next();
- //3.使用Entry对象中的方法getKey()和getValue()获取键与值
- String key = entry.getKey();
- Integer value = entry.getValue();
- System.out.println(key+"="+value);
- }
- System.out.println("-----------------------");
- for(Map.Entry<String,Integer> entry:set){
- //3.使用Entry对象中的方法getKey()和getValue()获取键与值
- String key = entry.getKey();
- Integer value = entry.getValue();
- System.out.println(key+"="+value);
- }
- }
- }
public class Demo03EntrySet
在Map集合中也提供了获取所有Entry对象的方法:
public Set<Map.Entry<K,V>> entrySet()
: 获取到Map集合中所有的键值对对象的集合(Set集合)。
1.6 Map集合遍历键值对方式
键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
操作步骤与图解:
获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示:
entrySet()
。遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。
- 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示:
getkey() getValue()
public class MapDemo02 {
public static void main(String[] args) {
// 创建Map集合对象
HashMap<String, String> map = new HashMap<String,String>();
// 添加元素到集合
map.put("胡歌", "霍建华");
map.put("郭德纲", "于谦");
map.put("薛之谦", "大张伟");
// 获取 所有的 entry对象 entrySet
Set<Entry<String,String>> entrySet = map.entrySet();
// 遍历得到每一个entry对象
for (Entry<String, String> entry : entrySet) {
// 解析
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"的CP是:"+value);
}
}
}
tips:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。
07_HashMap存储自定义类型键值
1.7 HashMap存储自定义类型键值
练习:每位学生(姓名,年龄)都有自己的家庭住址。那么,既然有对应关系,则将学生对象和家庭住址存储到map集合中。学生作为键, 家庭住址作为值。
注意,学生姓名相同并且年龄相同视为同一名学生。
编写学生类:
- package com.itheima.demo02.Map;
- import java.util.Objects;
- public class Person {
- private String name;
- private int age;
- public Person() {
- }
- public Person(String name, int age) {
- this.name = name;
- this.age = age;
- }
- @Override
- public String toString() {
- return "Person{" +
- "name='" + name + '\'' +
- ", age=" + age +
- '}';
- }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Person person = (Person) o;
- return age == person.age &&
- Objects.equals(name, person.name);
- }
- @Override
- public int hashCode() {
- return Objects.hash(name, 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;
- }
- }
public class Person
编写测试类:
- package com.itheima.demo02.Map;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Set;
- /*
- HashMap存储自定义类型键值
- Map集合保证key是唯一的:
- 作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一
- */
- public class Demo01HashMapSavePerson {
- public static void main(String[] args) {
- show02();
- }
- /*
- HashMap存储自定义类型键值
- key:Person类型
- Person类就必须重写hashCode方法和equals方法,以保证key唯一
- value:String类型
- 可以重复
- */
- private static void show02() {
- //创建HashMap集合
- HashMap<Person,String> map = new HashMap<>();
- //往集合中添加元素
- map.put(new Person("女王",18),"英国");
- map.put(new Person("秦始皇",18),"秦国");
- map.put(new Person("普京",30),"俄罗斯");
- map.put(new Person("女王",18),"毛里求斯");
- //使用entrySet和增强for遍历Map集合
- Set<Map.Entry<Person, String>> set = map.entrySet();
- for (Map.Entry<Person, String> entry : set) {
- Person key = entry.getKey();
- String value = entry.getValue();
- System.out.println(key+"-->"+value);
- }
- }
- /*
- HashMap存储自定义类型键值
- key:String类型
- String类重写hashCode方法和equals方法,可以保证key唯一
- value:Person类型
- value可以重复(同名同年龄的人视为同一个)
- */
- private static void show01() {
- //创建HashMap集合
- HashMap<String,Person> map = new HashMap<>();
- //往集合中添加元素
- map.put("北京",new Person("张三",18));
- map.put("上海",new Person("李四",19));
- map.put("广州",new Person("王五",20));
- map.put("北京",new Person("赵六",18));
- //使用keySet加增强for遍历Map集合
- Set<String> set = map.keySet();
- for (String key : set) {
- Person value = map.get(key);
- System.out.println(key+"-->"+value);
- }
- }
- }
public class Demo01HashMapSavePerson
- 当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须覆盖重写对象的hashCode和equals方法(如果忘记,请回顾HashSet存放自定义对象)。
- 如果要保证map中存放的key和取出的顺序一致,可以使用
java.util.LinkedHashMap
集合来存放。
1.8 LinkedHashMap
我们知道HashMap保证成对元素唯一,并且查询速度很快,可是成对元素存放进去是没有顺序的,那么我们要保证有序,还要速度快怎么办呢?
在HashMap下面有一个子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构。
- package com.demo03.Map;
- import java.util.HashMap;
- import java.util.LinkedHashMap;
- /*
- java.util.LinkedHashMap<K,V> entends HashMap<K,V>
- Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
- 底层原理:
- 哈希表+链表(记录元素的顺序)
- */
- public class Demo01LinkedHashMap {
- public static void main(String[] args) {
- HashMap<String,String> map = new HashMap<>();
- map.put("a","a");
- map.put("c","c");
- map.put("b","b");
- map.put("a","d");
- System.out.println(map);// key不允许重复,无序 {a=d, b=b, c=c}
- LinkedHashMap<String,String> linked = new LinkedHashMap<>();
- linked.put("a","a");
- linked.put("c","c");
- linked.put("b","b");
- linked.put("a","d");
- System.out.println(linked);// key不允许重复,有序 {a=d, c=c, b=b}
- }
- }
public class Demo01LinkedHashMap
- /*
- java.util.Hashtable<K,V>集合 implements Map<K,V>接口
- Hashtable:底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢
- HashMap:底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
- HashMap集合(之前学的所有的集合):可以存储null值,null键
- Hashtable集合,不能存储null值,null键
- Hashtable和Vector集合一样,在jdk1.2版本之后被更先进的集合(HashMap,ArrayList)取代了
- Hashtable的子类Properties依然活跃在历史舞台
- Properties集合是一个唯一和IO流相结合的集合
- */
java.util.Hashtable<K,V>集合 implements Map<K,V>接口

- package com.demo03.Map;
- import java.util.HashMap;
- import java.util.Scanner;
- /*
- 练习:
- 计算一个字符串中每个字符出现次数
- 分析:
- 1.使用Scanner获取用户输入的字符串
- 2.创建Map集合,key是字符串中的字符,value是字符的个数
- 3.遍历字符串,获取每一个字符
- 4.使用获取到的字符,去Map集合判断key是否存在
- key存在:
- 通过字符(key),获取value(字符个数)
- value++
- put(key,value)把新的value存储到Map集合中
- key不存在:
- put(key,1)
- 5.遍历Map集合,输出结果
- */
- public class Demo03MapTest {
- public static void main(String[] args) {
- //1.使用Scanner获取用户输入的字符串
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入一个字符串:");
- String str = sc.next();
- //2.创建Map集合,key是字符串中的字符,value是字符的个数
- HashMap<Character,Integer> map = new HashMap<>();
- //3.遍历字符串,获取每一个字符
- for(char c :str.toCharArray()){
- //4.使用获取到的字符,去Map集合判断key是否存在
- if(map.containsKey(c)){
- //key存在
- Integer value = map.get(c);
- value++;
- map.put(c,value);
- }else{
- //key不存在
- map.put(c,1);
- }
- }
- //5.遍历Map集合,输出结果
- for(Character key :map.keySet()){
- Integer value = map.get(key);
- System.out.println(key+"="+value);
- }
- }
- }
public class Demo03MapTest
1.9 Map集合练习
需求:
计算一个字符串中每个字符出现次数。
分析:
- 获取一个字符串对象
- 创建一个Map集合,键代表字符,值代表次数。
- 遍历字符串得到每个字符。
- 判断Map中是否有该键。
- 如果没有,第一次出现,存储次数为1;如果有,则说明已经出现过,获取到对应的值进行++,再次存储。
- 打印最终结果
代码:
public class MapTest {
public static void main(String[] args) {
//友情提示
System.out.println("请录入一个字符串:");
String line = new Scanner(System.in).nextLine();
// 定义 每个字符出现次数的方法
findChar(line);
}
private static void findChar(String line) {
//1:创建一个集合 存储 字符 以及其出现的次数
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
//2:遍历字符串
for (int i = 0; i < line.length(); i++) {
char c = line.charAt(i);
//判断 该字符 是否在键集中
if (!map.containsKey(c)) {//说明这个字符没有出现过
//那就是第一次
map.put(c, 1);
} else {
//先获取之前的次数
Integer count = map.get(c);
//count++;
//再次存入 更新
map.put(c, ++count);
}
}
System.out.println(map);
}
}
第二章 补充知识点
11_JDK9对集合添加的优化 静态of方法
- package cn.bjut.demo04.JDK9;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- /*
- JDK9的新特性:
- List接口,Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素
- static <E> List<E> of(E... elements)
- 使用前提:
- 当集合中存储的元素的个数已经确定了,不在改变时使用
- 注意:
- 1.of方法只适用于List接口,Set接口,Map接口,不适用于接接口的实现类
- 2.of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常
- 3.Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常
- */
- public class Demo01JDK9 {
- public static void main(String[] args) {
- List<String> list = List.of("a", "b", "a", "c", "d");
- System.out.println(list);//[a, b, a, c, d]
- //list.add("w");//UnsupportedOperationException:不支持操作异常
- //Set<String> set = Set.of("a", "b", "a", "c", "d");//IllegalArgumentException:非法参数异常,有重复的元素
- Set<String> set = Set.of("a", "b", "c", "d");
- System.out.println(set);
- //set.add("w");//UnsupportedOperationException:不支持操作异常
- //Map<String, Integer> map = Map.of("张三", 18, "李四", 19, "王五", 20,"张三",19);////IllegalArgumentException:非法参数异常,有重复的元素
- Map<String, Integer> map = Map.of("张三", 18, "李四", 19, "王五", 20);
- System.out.println(map);//{王五=20, 李四=19, 张三=18}
- //map.put("赵四",30);//UnsupportedOperationException:不支持操作异常
- }
- }
需要注意以下两点:
1:of()方法只是Map,List,Set这三个接口的静态方法,其父类接口和子类实现并没有这类方法,比如 HashSet,ArrayList等;
2:返回的集合是不可变的;
============================================
end
01 语言基础+高级:1-6 集合_day04【Map】的更多相关文章
- 01 语言基础+高级:1-6 集合_day03【List、Set、Collections工具类】
day03 [List.Set.数据结构.Collections] 主要内容 数据结构 List集合 Set集合 Collections 第一章 数据结构 2.1 数据结构有什么用 我们将常见的数据结 ...
- 01 语言基础+高级:1-6 集合_day02【Collection、泛型】
day02[Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 能够说出集合与数组的区别 说出Collection集合的常用功能 能够使用迭代器对集合 ...
- 01 语言基础+高级:1-10 JDK8新特性_day12【函数式接口】
day12[函数式接口] 主要内容自定义函数式接口函数式编程常用函数式接口 教学目标能够使用@FunctionalInterface注解能够自定义无参无返回函数式接口能够自定义有参有返回函数式接口能够 ...
- 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】
day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能 ...
- 01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】
day01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 java.lang.O ...
- 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】
day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...
- 01 语言基础+高级:1-3 常用API第一部分_day07【Scanner类、Random类、ArrayList类】
day07[Scanner类.Random类.ArrayList类] Scanner类Random类ArrayList类 教学目标 能够明确API的使用步骤能够使用Scanner类获得键盘录入数据能够 ...
- 01 语言基础+高级:1-2 面向对象和封装_day06【类与对象、封装、构造方法】
day06[类与对象.封装.构造方法] 面向对象类与对象三大特征——封装构造方法 能够理解面向对象的思想能够明确类与对象关系能够掌握类的定义格式能够掌握创建对象格式,并访问类中的成员能够完成手机类的练 ...
- 01 语言基础+高级:1-7 异常与多线程_day07 【线程池、Lambda表达式】
day07[线程池.Lambda表达式] 主要内容 等待与唤醒案例 线程池 Lambda表达式 教学目标 -[ ] 能够理解线程通信概念-[ ] 能够理解等待唤醒机制-[ ] 能够描述Java中线程池 ...
随机推荐
- 女神说不能每张照片P的一样,所以朋友圈开三天可见,用Python一步解决
大家好,我是小三十三,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻... 一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片: ! 是谁!是谁把我女朋友的照 ...
- mybatis xml <if>判断字符串相等
mybatis 映射文件中,if标签判断字符串相等,两种方式: 因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候, <if test=" ...
- 四十三、在SAP中初始化勾选值
一.上代码 二.运行时,勾选框会被自动勾选中 三.表单如下
- Web.config中executionTimeout的单位
executionTimeout:表示允许执行请求的最大时间限制,单位为秒
- 联系我们地图坐标展示js
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=6d88 ...
- 实验吧-杂项-MD5之守株待兔(时间戳&python时间戳函数time.time())
其实也有点蒙圈,因为从没做过和时间戳有关的题. 打开网站,将系统密钥解密得到一串值,而自己的密钥解密是空的,既然说是要和系统匹配,就把解密得到的值以get方式送出去. 但是发现还是在自己的密钥也发生了 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 指针
每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址. #include <iostream> using namesp ...
- mysql行级锁和表级锁的区别
表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低:行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高:
- 2020牛客寒假算法基础集训营4 G音乐鉴赏
题目描述 作为“音乐鉴赏”课的任课老师,你的课程作为刷学分好课一直受到广泛欢迎.但这一学期,学校制定了新的标准,你的课的优秀率(分数超过90分的人数)被限制在10%以下! 为了应对这个调整,你要求所有 ...
- element穿梭框el-transfer增加拖拽排序和shift多选checkbox功能
<template> <div class="demo"> <el-transfer v-model="value" filter ...