广州番禺Python, Java小班周末班培训
薯条老师的线下Python小班办得很好,学员的平均就业薪资有11K。线下小班培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
11.3.1 键值对映射结构
本节要学习的Map容器是一种键值对的映射结构。在日常生活中,我们经常会接触到这种键值对的映射结构,例如一本书籍的目录结构,在目录结构中,通过查找特定章节的页码,就可以快速翻到章节对应的页面。
目录结构中的章节名就是键,而章节的页码就是键值。如果没有这样的映射结构,那么我们必须从书籍的第一页开始,一页一页地查找,这种查找方式无疑是很慢的。
Map容器中的一个键,最多只能映射到一个值,而且同Set容器一样,不能包含重复的键,一旦添加重复的键,那么后面插入的键值会覆盖之前的键值。举个简单的例子,以下是一个包含两个键值对的Map容器:
{"第一节": 1, "第二节": 3}
现在往容器中插入一个重复的键"第二节",键值为5,那么容器中的元素变为:
{"第一节": 1, "第二节": 5
11.3.2 Map接口的常用方法
Java中的Map容器是一个接口,我们学习Map容器主要是学习Map接口的常用操作方法,以及它的实现类型。下表所示为Map接口的常用操作方法:
方法名 | 描述 |
int size() | 返回容器中的键值对数目。 |
boolean isEmpty() | 判断容器是否为空,如果为空则返回true,否则返回false |
boolean containsKey(Object key) | 判断是否包含指定的键,如果包含就返回true,否则返回false |
boolean containsValue(Object value) | 判断是否包含指定的键值,如果包含就返回true,否则返回false |
V get(Object key) | 获取key所对应的键值,如果key不存在,则返回null。 |
V put(K key, V value) | 将由key,value构成的键值对插入到容器中,如果key已存在,则替换先前的键值,并返回先前key所对应的键值,如果key不存在,则返回null |
V remove(Object key) | 删除容器中的key,并返回其对应的键值。如果key不存在,则返回null |
void clear() | 移除容器中的全部元素。 |
Set<K> keySet() | 返回容器中的所有键,返回值是一个Set类型 |
Collection<V> values() | 返回容器中的所有键值,返回值是一个Collection类型 |
11.3.3 Hashtable类型
Hashtable类继承于Dictonary类,实现了Map接口。下表所示为Hashtable类的常用构造方法:
构造方法 | 描述 |
Hashtable() | 构造一个空的Hashtable容器,容器容量默认为11,扩容因子默认为0.75。 |
Hashtable(int initialCapacity) | 构造一个初始容量为initialCapacity大小,扩容因子默认为0.75的Map容器,initialCapacity小于等于0时会抛出异常。 |
Hashtable(int initialCapacity, float loadFactor) | 构造一个初始容量为initialCapacity大小,扩容因子为loadFactor的Hashtable容器,initialCapacity小于等于0或loadFactor小于等于0时会抛出异常。 |
表中的构造方法提到了一个扩容因子,这里的扩容因子是指容器中的元素数大于容量*扩容因子的值时,会动态扩容,容量扩容至原来的两倍。
读者需注意,在构造Hashtable容器时,键与键值不能使用基本数据类型, 因为这些基本类型不支持hashCode方法和equals方法。如需使用整型值,浮点值,布尔值等作为键名或键值,则应该使用它们对应的包装类。在Java中int类型的包装类是Integer,浮点类型的包装类是Float, 布尔类型的包装类型是Boolean, char类型的包装类是Character。
代码实例-使用Hashtable来快速查找
import java.util.Map; import java.util.Hashtable; public class HelloJava{ public static void main(String[] args) { // Interger是Java内置的整型类 Map<String, Integer> book = new Hashtable<String, Integer>(); book.put("第一章", 1); book.put("第二章", 3); book.put("第三章", 5); String chapter = "第三章"; Integer pageNumber = book.get(chapter); if (pageNumber != null) { System.out.printf("%s在第%d页%n", chapter, pageNumber); } }
11.3.4 HashMap类型
HashMap是Map接口的一个实现类,可通过以下方法来构造HashMap:
构造方法 | 描述 |
HashMap() | 构造一个空的HashMap容器,容器容量默认为16,扩容因子默认为0.75。 |
HashMap(int initialCapacity) | 构造一个初始容量为initialCapacity大小,扩容因子默认为0.75的HashMap容器,initialCapacity小于等于0时会抛出异常。 |
HashMap(int initialCapacity, float loadFactor) | 构造一个初始容量为initialCapacity大小,扩容因子为loadFactor的HashMap容器,initialCapacity小于等于0或loadFactor小于等于0时会抛出异常。 |
HashMap(Map<K, V> t) | 使用已构造的映射结构t来构造HashMap |
以上构造方法中的扩容因子同Hashtable,不再赘述。
HashMap与Hashtable有很多相同点:键名与键值不能为基本类型,都是基于哈希表的映射结构,也都实现了Map接口。既然如此,那为什么还要多余的设计HashMap这个类?二者最大的不同点在于对并发处理的设计。Hashtable出现的时间早于HashMap, 作者在实现Hashtable时为保证并发读写操作的线程安全性,在许多方法中都加了锁, 而HashMap的作者在实现时并没有做同步处理。如果是单线程环境,HashMap的性能明显优于Hashtable,如果是多线程环境,则可以考虑使用Hashtable。关于多线程,线程安全以及锁,会在第十三章中详细讲解。
代码实例-使用HashMap来快速查找
import java.util.Map;
import java.util.HashMap;
public class HelloJava{
public static void main(String[] args) {
// Interger是Java内置的整型类
Map<String, Integer> book = new HashMap<String, Integer>();
book.put("第一章", 1);
book.put("第二章", 3);
book.put("第三章", 5);
String chapter = "第三章";
Integer pageNumber = book.get(chapter);
if (pageNumber != null) {
System.out.printf("%s在第%d页%n", chapter, pageNumber);
}
}
}
11.2.4 最具实力的小班培训
来这里参加Python和Java小班培训的学员大部分都找到了很好的工作,平均月薪有11K,学得好的同学,拿到的会更高。由于是小班教学,所以薯条老师有精力把每位学员都教好。打算参加线下小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取学习资料: