Java语言学习day39--8月14日
今日内容介绍
1、Map接口
2、模拟斗地主洗牌发牌
###01Map集合概述
A:Map集合概述:
我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同
a:Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
b:Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
Collection中的集合称为单列集合,Map中的集合称为双列集合。
需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
Map
|--HashMap
|--LinkedHashMap
###02Map接口中的常用方法
A:Map接口中的常用方法
/*
* Map接口中的常用方法
* 使用Map接口的实现类 HashMap
*/
public class MapDemo {
public static void main(String[] args) {
function_2();
}
/*
* 移除集合中的键值对,返回被移除之前的值
* V remove(K)
*/
public static void function_2(){
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
System.out.println(map);
String value = map.remove(33);
System.out.println(value);
System.out.println(map);
}
/*
* 通过键对象,获取值对象
* V get(K)
* 如果集合中没有这个键,返回null
*/
public static void function_1(){
//创建集合对象,作为键的对象整数,值的对象存储字符串
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
System.out.println(map);
String value = map.get(4);
System.out.println(value);
}
/*
* 将键值对存储到集合中
* V put(K,V) K 作为键的对象, V作为值的对象
* 存储的是重复的键,将原有的值,覆盖
* 返回值一般情况下返回null,
* 存储重复键的时候,返回被覆盖之前的值
*/
public static void function(){
//创建集合对象,HashMap,存储对象,键是字符串,值是整数
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
System.out.println(map);
}
}
###03Map集合遍历方式keySet方法
A:Map集合遍历方式keySet方法
1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键
2.遍历键的Set集合,得到每一个键
3.根据键利用get(key)去Map找所对应的值
/*
* Map集合的遍历
* 利用键获取值
* Map接口中定义方法keySet
* 所有的键,存储到Set集合
*/
public class MapDemo1 {
public static void main(String[] args) {
/*
* 1. 调用map集合的方法keySet,所有的键存储到Set集合中
* 2. 遍历Set集合,获取出Set集合中的所有元素 (Map中的键)
* 3. 调用map集合方法get,通过键获取到值
*/
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("a", 11);
map.put("b", 12);
map.put("c", 13);
map.put("d", 14);
//1. 调用map集合的方法keySet,所有的键存储到Set集合中
Set<String> set = map.keySet();
//2. 遍历Set集合,获取出Set集合中的所有元素 (Map中的键)
Iterator<String> it = set.iterator();
while(it.hasNext()){
//it.next返回是Set集合元素,也就是Map中的键
//3. 调用map集合方法get,通过键获取到值
String key = it.next();
Integer value = map.get(key);
System.out.println(key+"...."+value);
}
System.out.println("=======================");
for(String key : map.keySet()){
Integer value = map.get(key);
System.out.println(key+"...."+value);
}
}
}
###04Map集合Entry对象
A:Map集合Entry对象
interface Map{
interface Entry{//Entry是Map的一个内部接口
//由Map的子类的内部类实现
}
}
class HashMap{
static class Entry<K,V> implements Map.Entry<K,V> {//Entry对象指的就是该类的对象
final K key;
V value;
}
}
在Map类设计时,提供了一个嵌套接口:Entry。
Entry将键值对的对应关系封装成了对象。
即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
a:Entry是Map接口中提供的一个静态内部嵌套接口。
b:相关方法
getKey()方法:获取Entry对象中的键
getValue()方法:获取Entry对象中的值
entrySet()方法:用于返回Map集合中所有的键值对(Entry)对象,以Set集合形式返回。
###05Map集合遍历方式entrySet方法
A:Map集合遍历方式entrySet方法
*
* Map集合获取方式
* entrySet方法,键值对映射关系(结婚证)获取
* 实现步骤:
* 1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
* Set<Entry <K,V> >
* 2. 迭代Set集合
* 3. 获取出的Set集合的元素,是映射关系对象
* 4. 通过映射关系对象方法 getKet, getValue获取键值对
*
* 创建内部类对象 外部类.内部类 = new
*/
public class MapDemo2 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, "abc");
map.put(2, "bcd");
map.put(3, "cde");
//1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
Set<Map.Entry <Integer,String> > set = map.entrySet();
//2. 迭代Set集合
Iterator<Map.Entry <Integer,String> > it = set.iterator();
while(it.hasNext()){
// 3. 获取出的Set集合的元素,是映射关系对象
// it.next 获取的是什么对象,也是Map.Entry对象
Map.Entry<Integer, String> entry = it.next();
//4. 通过映射关系对象方法 getKet, getValue获取键值对
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"...."+value);
}
}
}
###06Map集合遍历方式增强for循环
A:Map集合遍历方式增强for循环
A:Map集合遍历方式entrySet方法
*
* Map集合获取方式
* entrySet方法,键值对映射关系(结婚证)获取
* 实现步骤:
* 1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
* Set<Entry <K,V> >
* 2. 迭代Set集合
* 3. 获取出的Set集合的元素,是映射关系对象
* 4. 通过映射关系对象方法 getKet, getValue获取键值对
*
* 创建内部类对象 外部类.内部类 = new
*/
public class MapDemo2 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, "abc");
map.put(2, "bcd");
map.put(3, "cde");
//1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
Set<Map.Entry <Integer,String> > set = map.entrySet();
//2. 迭代Set集合
Iterator<Map.Entry <Integer,String> > it = set.iterator();
while(it.hasNext()){
// 3. 获取出的Set集合的元素,是映射关系对象
// it.next 获取的是什么对象,也是Map.Entry对象
Map.Entry<Integer, String> entry = it.next();
//4. 通过映射关系对象方法 getKet, getValue获取键值对
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"...."+value);
}
System.out.println("=========================");
for(Map.Entry<Integer, String> entry : map.entrySet()){
System.out.println(entry.getKey()+"..."+entry.getValue());
}
}
}
注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。
###07HashMap集合存储和遍历
A:HashMap集合存储和遍历
/*
* 使用HashMap集合,存储自定义的对象
* 自定义对象,作为键,出现,作为值出现
*/
public class HashMapDemo {
public static void main(String[] args) {
function_1();
}
/*
* HashMap 存储自定义对象Person,作为键出现
* 键的对象,是Person类型,值是字符串
* 保证键的唯一性,存储到键的对象,重写hashCode equals
*/
public static void function_1(){
HashMap<Person, String> map = new HashMap<Person, String>();
map.put(new Person("a",20), "里约热内卢");
map.put(new Person("b",18), "索马里");
map.put(new Person("b",18), "索马里");
map.put(new Person("c",19), "百慕大");
for(Person key : map.keySet()){
String value = map.get(key);
System.out.println(key+"..."+value);
}
System.out.println("===================");
for(Map.Entry<Person, String> entry : map.entrySet()){
System.out.println(entry.getKey()+"..."+entry.getValue());
}
}
/*
* HashMap 存储自定义的对象Person,作为值出现
* 键的对象,是字符串,可以保证唯一性
*/
public static void function(){
HashMap<String, Person> map = new HashMap<String, Person>();
map.put("beijing", new Person("a",20));
map.put("tianjin", new Person("b",18));
map.put("shanghai", new Person("c",19));
for(String key : map.keySet()){
Person value = map.get(key);
System.out.println(key+"..."+value);
}
System.out.println("=================");
for(Map.Entry<String, Person> entry : map.entrySet()){
String key = entry.getKey();
Person value = entry.getValue();
System.out.println(key+"..."+value);
}
}
}
###08LinkedHashMap的特点
*A:LinkedHashMap的特点
/*
* LinkedHashMap继承HashMap
* 保证迭代的顺序
*/
public class LinkedHashMapDemo {
public static void main(String[] args) {
LinkedHashMap<String, String> link = new LinkedHashMap<String, String>();
link.put("1", "a");
link.put("13", "a");
link.put("15", "a");
link.put("17", "a");
System.out.println(link);
}
}
###09Hashtable的特点
*A:Hashtable的特点
/*
* Map接口实现类 Hashtable
* 底层数据结果哈希表,特点和HashMap是一样的
* Hashtable 线程安全集合,运行速度慢
* HashMap 线程不安全的集合,运行速度快
*
* Hashtable命运和Vector是一样的,从JDK1.2开始,被更先进的HashMap取代
*
* HashMap 允许存储null值,null键
* Hashtable 不允许存储null值,null键
*
* Hashtable他的孩子,子类 Properties 依然活跃在开发舞台
*/
public class HashtableDemo {
public static void main(String[] args) {
Map<String,String> map = new Hashtable<String,String>();
map.put(null, null);
System.out.println(map);
}
}
###10静态导入
*A:静态导入:如果本类中有和静态导入的同名方法会优先使用本类的
如果还想使用静态导入的,依然需要类名来调用
/*
* JDK1.5新特性,静态导入
* 减少开发的代码量
* 标准的写法,导入包的时候才能使用
*
* import static java.lang.System.out;最末尾,必须是一个静态成员
*/
import static java.lang.System.out;
import static java.util.Arrays.sort;
public class StaticImportDemo {
public static void main(String[] args) {
out.println("hello");
int[] arr = {1,4,2};
sort(arr);
}
}
###11方法的可变参数
*A:方法的可变参数
/*
* JDK1.5新的特性,方法的可变参数
* 前提: 方法参数数据类型确定,参数的个数任意
* 可变参数语法: 数据类型...变量名
* 可变参数,本质就是一个数组
*/
public class VarArgumentsDemo {
public static void main(String[] args) {
//调用一个带有可变参数的方法,传递参数,可以任意
// getSum();
int sum = getSum(5,34,3,56,7,8,0);
System.out.println(sum);
}
/*
* 定义方法,计算10个整数和
* 方法的可变参数实现
*/
public static int getSum(int...a){
int sum = 0 ;
for(int i : a){
sum = sum + i;
}
return sum;
}
/*
* 定义方法,计算3个整数和
*/
/*public static int getSum(int a,int b ,int c){
return a+b+c;
}*/
/*
* 定义方法,计算2个整数和
*/
/*public static int getSum(int a,int b){
return a+b;
}*/
}
Java语言学习day39--8月14日的更多相关文章
- Python学习日志9月14日
今天早晨又没有专心致志的学习,我感觉我可能是累了,需要减轻学习的程度来调整一下咯.这几天装电脑弄的昏天暗地的,身体有点吃不消了.时间真是神奇的魔法,这半个月来,每隔几天都有想要改变策略的想法.今天早晨 ...
- python学习 day09 (3月14日)----函数
一.函数的进阶 1.1 动态参数 1.2* ** 1.3*args , **kwargs 1.4 函数的注释 1.5名称空间 1.6函数的嵌套全局变量 : 贴边写的局部变量 : 不是贴边写的. ''' ...
- Java语言学习day01--6月28日
Java语言学习day01一:Java概述 1.Java语言发展史 任职于太阳微系统的 詹姆斯·高斯林 等人于1990年代初开发Java语言的雏形,最初被命名为 Oak ,目标设置在 家用电器等小型系 ...
- Java语言学习day02--6月29日
Java语言学习day02###01常用的DOS命令 * A: 常用的DOS命令 * a: 打开Dos控制台 * win+r--cmd--回车 * b: 常用dos命令 * cd.. : 退回到上一级 ...
- 湖人VS爵士!!科比4月14日最后一战,本赛季最高得分!狂得60分!!完美大逆转!!!
莫愁前路无知己,天下谁人不识君.科比,愿你如迈克尔·乔丹,仍然活跃在篮球界.退役不是结束,而是另一段人生的开始. 北京时间2016年4月14日,湖人101-96击败爵士,科比-布莱恩特告别战,20年职 ...
- 12月14日《奥威Power-BI销售计划填报》腾讯课堂开课啦
2016年的最后一个月也过半了,新的一年就要到来,你是否做好了启程的准备?新的一年,有计划,有目标,有方向,才不至于迷茫.规划你的2017,新的一年,遇见更好的自己! 所以 ...
- 5月14日 绿城育华NOIP巨石杯试卷解析
[题外话] 感谢UBUNTU为保存程序做出贡献:https://paste.ubuntu.com : 感谢洛谷OJ的私人题库保存题面:https://www.luogu.org : 现在我的题解的所有 ...
- Python学习日志9月17日 一周总结
周一,9月11日 这天写的是过去一周的周总结,我从中找出当天的内容. 这天早晨给电脑折腾装机,早晨基本上没有学习,休息了一个早晨. 下午写的上周总结,完事做mooc爬虫课的作业,<Think P ...
- 关于16年2月14日以后上传AppStore出现:Missing iOS Distribution signing identity for...的问题
2016年2月14日以后打包上传AppStore会发现出现如下的问题: 导致问题的原因是:下边这个证书过期了 以下是苹果官方给出的回应: Thanks for bringing this to the ...
- 2016年12月14日 星期三 --出埃及记 Exodus 21:9
2016年12月14日 星期三 --出埃及记 Exodus 21:9 If he selects her for his son, he must grant her the rights of a ...
随机推荐
- 6月15日 python学习总结 Django模板语言相关内容
Django模板语言相关内容 Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...
- 解决使用DBeaver连接MySQL时报错-The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone.
解决使用DBeaver连接MySQL时报错,其实提示很明显. The server time zone value '�й���ʱ��' is unrecognized or represents ...
- 10ISE14.7和modelsim10.5关联编译库
今天准备在ISE14.7中调用PLL的IP核,搞一下时钟的分频和倍频.可在我做好pll的IP核后,我直接用ise生成了一个仿真文件,只需要修改下例化模块名和加一个时钟就行勒. 问题:但怎么在ISE14 ...
- synchronized 与 lock锁的异同
相同点: 二者都可以解决线程安全问题: 不同点: 1..Synchronized 是Java内置的关键字:Lock是一个Java类: 2.Synchronized 无法判断锁的状态:Lock可以判断是 ...
- 小白都能看懂的 Spring 源码揭秘之Spring MVC
目录 前言 Spring MVC 请求流程 Spring MVC 两大阶段 初始化 HttpServletBean#init() FrameworkServlet#initServletBean Fr ...
- 22.2.14session和反反爬处理
22.2.14 session和反反爬处理 1.session: requests库包含session,都是用来对一个url发送请求,区别在于session是一连串的请求,在session请求过程中c ...
- 简单 Linux 文件系统?
在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡.磁盘驱动器.打印机.输入输出设备.普通文件或是目录都被看作是一个文件.也就是说在 Linux 系统中有一个重要的概念**:一切都是 ...
- requests库获取图片响应流进行转发
遇到了一个问题,使用requests进行转发 requests响应流的时候,出现各种问题,问题的描述没有记录,不过Debug以下终于解决了问题.......下面简单的描述解决方案 response = ...
- 学习heartbeat-03t实现web服务的高可用案例及维护要点
8.Heartbeat实现web服务的高可用案例 8.1部署准备 通过web服务高可用案例来熟悉heatbeat软件的使用,用上面的两台服务器机器名分别为heartbeat-1-130和heartbe ...
- 快速注册service服务
一.通过SpringContextHolder的getBean来注册service服务 导入的包:import com.bessky.platform.context.SpringContextHol ...