Java笔记08-Map详解

第一章 Map集合

1.1 概述

现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。

我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMUMtL1G-1572792710984)(img\Collection与Map.bmp)]

  • Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
  • Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
  • Collection中的集合称为单列集合,Map中的集合称为双列集合。
  • 需要注意的是,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 MapDemo {public static void main(String[] args) {//创建 map对象HashMap<String, String>  map = new HashMap<String, String>();//添加元素到集合map.put("黄晓明", "杨颖");map.put("文章", "马伊琍");map.put("邓超", "孙俪");System.out.println(map);//String remove(String key)System.out.println(map.remove("邓超"));System.out.println(map);// 想要查看 黄晓明的媳妇 是谁System.out.println(map.get("黄晓明"));System.out.println(map.get("邓超"));    }
}

tips:

使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;

若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。

1.4 Map集合遍历键找值方式

键找值方式:即通过元素中的键,获取键所对应的值

分析步骤:

  1. 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示:keyset()
  2. 遍历键的Set集合,得到每一个键。
  3. 根据键,获取键所对应的值。方法提示:get(K key)

代码演示:

public class MapDemo01 {public static void main(String[] args) {//创建Map集合对象 HashMap<String, String> map = new HashMap<String,String>();//添加元素到集合 map.put("胡歌", "霍建华");map.put("郭德纲", "于谦");map.put("薛之谦", "大张伟");//获取所有的键  获取键集Set<String> keys = map.keySet();// 遍历键集 得到 每一个键for (String key : keys) {//key  就是键//获取对应值String value = map.get(key);System.out.println(key+"的CP是:"+value);}  }
}

遍历图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoUCtzHh-1572792710985)(img\Map集合遍历方式一.bmp)]

1.5 Entry键值对对象

我们已经知道,Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map中是一一对应关系,这一对对象又称做Map中的一个Entry(项)Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。

既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:

  • public K getKey():获取Entry对象中的键。
  • public V getValue():获取Entry对象中的值。

在Map集合中也提供了获取所有Entry对象的方法:

  • public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。

1.6 Map集合遍历键值对方式

键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

操作步骤与图解:

  1. 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示:entrySet()

  2. 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。

  3. 通过键值对(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对象  entrySetSet<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);}}
}

遍历图解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jf2P4n8P-1572792710986)(img\Map集合遍历方式二.bmp)]

tips:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。

1.7 HashMap存储自定义类型键值

练习:每位学生(姓名,年龄)都有自己的家庭住址。那么,既然有对应关系,则将学生对象和家庭住址存储到map集合中。学生作为键, 家庭住址作为值。

注意,学生姓名相同并且年龄相同视为同一名学生。

编写学生类:

public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = 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;}@Overridepublic 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);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}

编写测试类:

public class HashMapTest {public static void main(String[] args) {//1,创建Hashmap集合对象。Map<Student,String>map = new HashMap<Student,String>();//2,添加元素。map.put(newStudent("lisi",28), "上海");map.put(newStudent("wangwu",22), "北京");map.put(newStudent("zhaoliu",24), "成都");map.put(newStudent("zhouqi",25), "广州");map.put(newStudent("wangwu",22), "南京");//3,取出元素。键找值方式Set<Student>keySet = map.keySet();for(Student key: keySet){Stringvalue = map.get(key);System.out.println(key.toString()+"....."+value);}}
}
  • 当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法(如果忘记,请回顾HashSet存放自定义对象)。
  • 如果要保证map中存放的key和取出的顺序一致,可以使用java.util.LinkedHashMap集合来存放。

1.8 LinkedHashMap

我们知道HashMap保证成对元素唯一,并且查询速度很快,可是成对元素存放进去是没有顺序的,那么我们要保证有序,还要速度快怎么办呢?

在HashMap下面有一个子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构。

public class LinkedHashMapDemo {public static void main(String[] args) {LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();map.put("邓超", "孙俪");map.put("李晨", "范冰冰");map.put("刘德华", "朱丽倩");Set<Entry<String, String>> entrySet = map.entrySet();for (Entry<String, String> entry : entrySet) {System.out.println(entry.getKey() + "  " + entry.getValue());}}
}

结果:

邓超  孙俪
李晨  范冰冰
刘德华  朱丽倩

1.9 Map集合练习

需求:

计算一个字符串中每个字符出现次数。

分析:

  1. 获取一个字符串对象
  2. 创建一个Map集合,键代表字符,值代表次数。
  3. 遍历字符串得到每个字符。
  4. 判断Map中是否有该键。
  5. 如果没有,第一次出现,存储次数为1;如果有,则说明已经出现过,获取到对应的值进行++,再次存储。
  6. 打印最终结果

代码:

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);}
}

第二章 补充知识点

2.1 JDK9对集合添加的优化

通常,我们在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它。 实例化集合,几个 add方法 调用,使得代码重复。

public class Demo01 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("abc");list.add("def");list.add("ghi");System.out.println(list);}
}

Java 9,添加了几种集合工厂方法,更方便创建少量元素的集合、map实例。新的List、Set、Map的静态工厂方法可以更方便地创建集合的不可变实例。

例子:

public class HelloJDK9 {  public static void main(String[] args) {  Set<String> str1=Set.of("a","b","c");  //str1.add("c");这里编译的时候不会错,但是执行的时候会报错,因为是不可变的集合  System.out.println(str1);  Map<String,Integer> str2=Map.of("a",1,"b",2);  System.out.println(str2);  List<String> str3=List.of("a","b");  System.out.println(str3);  }  
} 

需要注意以下两点:

1:of()方法只是Map,List,Set这三个接口的静态方法,其父类接口和子类实现并没有这类方法,比如 HashSet,ArrayList等待;

2:返回的集合是不可变的;

2.2 Debug追踪

使用IDEA的断点调试功能,查看程序的运行过程

  1. 在有效代码行,点击行号右边的空白区域,设置断点,程序执行到断点将停止,我们可以手动来运行程序

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KUlp60SA-1572792710987)(img/debug1.png)]

  2. 点击Debug运行模式 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKwZB8kA-1572792710987)(img\debug2.png)]

  3. 程序停止在断点上不再执行,而IDEA最下方打开了Debug调试窗口

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsQbieof-1572792710988)(img\debug3.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amLEDbpn-1572792710988)(img\debug4.png)]

  4. Debug调试窗口介绍

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zv0EmhVO-1572792710989)(img\debug5.png)]

  5. 快捷键F8,代码向下执行一行,第九行执行完毕,执行到第10行(第10行还未执行)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-et7KOpap-1572792710989)(img\debug6.png)]

  6. 切换到控制台面板,控制台显示 请录入一个字符串: 并且等待键盘录入

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xUojEPV3-1572792710990)(img\debug7.png)]

  7. 快捷键F8,程序继续向后执行,执行键盘录入操作,在控制台录入数据 ababcea

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKar6DoD-1572792710990)(img\debug8.png)]

    回车之后效果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1KPS7SIg-1572792710991)(img\debug9.png)]

    调试界面效果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9UUGzd59-1572792710991)(img\debug0.png)]

  8. 此时到达findChar方法,快捷键F7,进入方法findChar

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJ9rtx2V-1572792710992)(img\debug11.png)]

  9. 快捷键F8 接续执行,创建了map对象,变量区域显示

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0JjZlrF-1572792710994)(img\debug12.png)]

  10. 快捷键F8 接续执行,进入到循环中,循环变量i为 0,F8再继续执行,就获取到变量c赋值为字符‘a’ 字节值97

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2xeYdLkl-1572792710994)(img\debug13.png)]

  11. 快捷键F8 接续执行,进入到判断语句中,因为该字符 不在Map集合键集中,再按F8执行,进入该判断中

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ox2TyQud-1572792710995)(img\debug14.png)]

  12. 快捷键F8 接续执行,循环结束,进入下次循环,此时map中已经添加一对儿元素

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OF1xJAtk-1572792710995)(img\debug15.png)]

  13. 快捷键F8 接续执行,进入下次循环,再继续上面的操作,我们就可以看到代码每次是如何执行的了

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0j35yWkI-1572792710995)(img\debug16.png)]

  14. 如果不想继续debug,那么可以使用快捷键F9,程序正常执行到结束,程序结果在控制台显示

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VxXfzWg1-1572792710996)(img\debug17.png)]

第三章 模拟斗地主洗牌发牌

3.1 案例介绍

按照斗地主的规则,完成洗牌发牌的动作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQ1Kg1fi-1572792710997)(img\斗地主.png)]

具体规则:

  1. 组装54张扑克牌将
  2. 54张牌顺序打乱
  3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
  4. 查看三人各自手中的牌(按照牌的大小排序)、底牌

规则:手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

3.2 案例需求分析

  1. 准备牌:

完成数字与纸牌的映射关系:

使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

  1. 洗牌:

通过数字完成洗牌发牌

  1. 发牌:

将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。

存放的过程中要求数字大小与斗地主规则的大小对应。

将代表不同纸牌的数字分配给不同的玩家与底牌。

  1. 看牌:

通过Map集合找到对应字符展示。

通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IKfoptnx-1572792710997)(img\斗地主分析.png)]

3.3 实现代码步骤

public class Poker {public static void main(String[] args) {/** 1组装54张扑克牌*/// 1.1 创建Map集合存储HashMap<Integer, String> pokerMap = new HashMap<Integer, String>();// 1.2 创建 花色集合 与 数字集合ArrayList<String> colors = new ArrayList<String>();ArrayList<String> numbers = new ArrayList<String>();// 1.3 存储 花色 与数字Collections.addAll(colors, "♦", "♣", "♥", "♠");Collections.addAll(numbers, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");// 设置 存储编号变量int count = 1;pokerMap.put(count++, "大王");pokerMap.put(count++, "小王");// 1.4 创建牌 存储到map集合中for (String number : numbers) {for (String color : colors) {String card = color + number;pokerMap.put(count++, card);}}/** 2 将54张牌顺序打乱*/// 取出编号 集合Set<Integer> numberSet = pokerMap.keySet();// 因为要将编号打乱顺序 所以 应该先进行转换到 list集合中ArrayList<Integer> numberList = new ArrayList<Integer>();numberList.addAll(numberSet);// 打乱顺序Collections.shuffle(numberList);// 3 完成三个玩家交替摸牌,每人17张牌,最后三张留作底牌// 3.1 发牌的编号// 创建三个玩家编号集合 和一个 底牌编号集合ArrayList<Integer> noP1 = new ArrayList<Integer>();ArrayList<Integer> noP2 = new ArrayList<Integer>();ArrayList<Integer> noP3 = new ArrayList<Integer>();ArrayList<Integer> dipaiNo = new ArrayList<Integer>();// 3.2发牌的编号for (int i = 0; i < numberList.size(); i++) {// 获取该编号Integer no = numberList.get(i);// 发牌// 留出底牌if (i >= 51) {dipaiNo.add(no);} else {if (i % 3 == 0) {noP1.add(no);} else if (i % 3 == 1) {noP2.add(no);} else {noP3.add(no);}}}// 4 查看三人各自手中的牌(按照牌的大小排序)、底牌// 4.1 对手中编号进行排序Collections.sort(noP1);Collections.sort(noP2);Collections.sort(noP3);Collections.sort(dipaiNo);// 4.2 进行牌面的转换// 创建三个玩家牌面集合 以及底牌牌面集合ArrayList<String> player1 = new ArrayList<String>();ArrayList<String> player2 = new ArrayList<String>();ArrayList<String> player3 = new ArrayList<String>();ArrayList<String> dipai = new ArrayList<String>();// 4.3转换for (Integer i : noP1) {// 4.4 根据编号找到 牌面 pokerMapString card = pokerMap.get(i);// 添加到对应的 牌面集合中player1.add(card);}for (Integer i : noP2) {String card = pokerMap.get(i);player2.add(card);}for (Integer i : noP3) {String card = pokerMap.get(i);player3.add(card);}for (Integer i : dipaiNo) {String card = pokerMap.get(i);dipai.add(card);}//4.5 查看System.out.println("令狐冲:"+player1);System.out.println("石破天:"+player2);System.out.println("鸠摩智:"+player3);System.out.println("底牌:"+dipai);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js的helloworld 程序

用文本编辑器&#xff0c;如npp,键入例如以下代码&#xff0c;存储成hello.js console.log(hello) console.log(hello %s->%d,jeapedu, 1941847311) cmd进入dos。切入hello.js所在文件夹。运行node.js程序 node hello.js执行结果例如以下所看到的&#xff1a; C:\nodeS>n…

深度学习综述

摘要&#xff1a; 深度学习可以完成需要高度抽象特征的人工智能任务&#xff0c;如语音识别、图像识别和检索、自然语言理解等。深层模型是包含多个隐藏层的人工神经网络&#xff0c;多层非线性结构使其具备强大的特征表达能力和对复杂任务建模能力。训练深层模型是长期以来的难…

mac svn工具_Cornerstone 4 for mac(svn管理工具)

Cornerstone 4 for mac是全新版本的svn管理工具&#xff0c;使用cornerstone for mac 特别版建立的版本控制更利于使用&#xff0c;而且cornerstone 4 特别版全面支持Subversion的功能&#xff0c;这里准备了最新版本的cornerstone for mac 特别版&#xff0c;无需激活&#xf…

I帧、B帧和P帧的特点和编码的基本流程

I帧、B帧和P帧的特点: I帧:帧内编码帧I帧特点:1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;2.解码时仅用I帧的数据就可重构完整图像;3.I帧描述了图像背景和运动主体的详情;4.I帧不需要参考其他画面而生成;5.I帧是P帧和B帧的参考帧(其质量直接影响到同组…

Java笔记11-【异常、线程】

主要内容 异常、线程 第一章 异常 1.1 异常概念 异常&#xff0c;就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是&#xff1a; 异常 &#xff1a;指的是程序在执行过程中&#xff0c;出现的…

摘抄自知乎的redis相关

1.知乎日报的基础数据和统计信息是用 Redis 存储的&#xff0c;这使得请求的平均响应时间能在 10ms 以下。其他数据仍然需要存放在另外的地方&#xff0c;其实完全用 Redis 也是可行的&#xff0c;主要的考量是内存占用。就使用经验而言&#xff0c;Redis 的数据结构很丰富&…

Java微信开发_00_资源汇总贴

1.微信公众平台技术文档&#xff08;https://mp.weixin.qq.com/wiki?tresource/res_main&idmp1445241432&#xff09; 2.微信企业号开发接口文档&#xff08;http://qydev.weixin.qq.com/wiki/index.php?title%E4%B8%BB%E5%8A%A8%E8%B0%83%E7%94%A8&#xff09; 3.企业微…

webgl获取鼠标形状_三模无线搭配对称手型设计,游戏致胜利器,ROG烈刃2无线鼠标...

要想有效地提升游戏体验&#xff0c;我认为除了电脑主机本身的硬件配置要尽可能的硬核之外&#xff0c;玩游戏时所选配的鼠标、键盘等外设的作用也是不可忽视的&#xff0c;所以很多比较注重游戏体验的游戏爱好者都会选择一款自己用着比较顺手的游戏外设装备。我这次入手的华硕…

牛人学习h264运动估计的方法

转载自&#xff1a;http://bbs.chinavideo.org/forumdisplay.php?fid29 Chinavideo&#xff0c;一个非常棒的学习论坛 从答辩结束(2008-12-13)起就想写一篇文章给学习运动估计的朋友们&#xff0c;因为我知道有很多正在写论文的朋友们&#xff0c;特别是正在入门的朋友们&…

Java笔记11-软件开发流程设计原则

今天内容: 1.常用的设计原则2.常用的设计模式3.常用的查找算法4.常用的排序算法 1.常用的设计原则(记住) 1.1软件的开发流程 软件开发授权-投标 -> 100万 1. 编写需求分析文档 > 2. 概要设计文档(架构) > 3. 详细设计文档(类图) > 4. 编码(项目经理分具体任…

magnify.m —— 图像局部放大镜工具函数

magnify.m 函数下载地址&#xff1a;magnify - File Exchange - MATLAB Central&#xff1b; magnify.m 函数在执行时&#xff0c;是一种交互式处理。 简单演示如下&#xff1a; clear, clc% 加载图像到内存&#xff0c;如读取matlab自带的图像&#xff0c;并将其显示出来 I i…

【大数据系列】hadoop单节点安装官方文档翻译

Hadoop: Setting up a Single Node Cluster. HADOOP&#xff1a;建立单节点集群 PurposePrerequisites Supported PlatformsRequired SoftwareInstalling SoftwareDownloadPrepare to Start the Hadoop ClusterStandalone OperationPseudo-Distributed Operation Configuration…

qmlcanvas绘制3d图形_透视Matplotlib核心功能和工具包 - 绘制3D图形

关联知识MatplotlibPython线图在此&#xff0c;我们将学习如何创建3D线图。 它类似于2D等效折线图&#xff0c;并且2D折线图的许多属性都结转到3D。我们将在相同的轴上绘制凹凸曲线&#xff0c;并从不同角度查看它们&#xff0c;例如平行视图&#xff0c;顶视图以及围绕z轴的旋…

264 解码之 yuv

博客访问量日渐减少&#xff0c;于是我决定丢一点技术东东上去&#xff0c;吸引爬虫光顾一下。先谈谈 h.264 的编解码问题。个人建议做视频、音频的孩子们&#xff0c;一定要抓住 RFC 和 standard &#xff0c;然后多看开源编解码程序。近来抽空看了两个 decoder &#xff0c;一…

Java笔记12-函数式接口

主要内容 自定义函数式接口函数式编程常用函数式接口 第一章 函数式接口 概念 函数式接口在java中指的是:有且只有一个抽象方法的接口 函数式接口,即适用于函数式编程场景的接口.而java中共的函数式编程体现就是Lambda,所以函数式接口就是可以适用于lambda使用的接口.只有…

雷军晒3亿估值,意欲“收编”台湾硬件创业者?

1月13日&#xff0c;在台湾的CSMIC 2015移动互联网两岸年会上&#xff0c;雷军以猎豹移动董事长的身份做了《给年轻创业者的两大方向性建议》演讲。 演讲中雷军表示&#xff0c;“在未来5到10年&#xff0c;特别适合台湾年轻创业者做的两个方向&#xff0c;一个是移动互联网&am…

网页“console”输出图文信息

http://www.monmonkey.com/javascript/jiben2.html 参考以上链接中的转义字符使用。 http://www.cnblogs.com/Wayou/p/chrome_dev_tool_style_console.html https://segmentfault.com/a/1190000002511877 以上链接里有各种 console 输出 ASCII图文的实现方法。 ASCII图文动态效…

记事本安卓软件代码设计_用轻量级工具 Notepad3 替代 36 岁的微软记事本

一不小心&#xff0c;微软记事本发布 36 年了。虽然微软记事本自 1985 年 Windows 1.0 以来已包含在所有版本的 Microsoft Windows 中&#xff0c;但它太基础了&#xff0c;以至于几乎所有人都要替代它&#xff0c;比如轻量级的 Notepad3&#xff0c;支持代码高亮/折叠、括号匹…

H.264编码技术

H.264基本概况随着HDTV的兴起&#xff0c;H.264这个规范频频出现在我们眼前&#xff0c;HD-DVD和蓝光DVD均计划采用这一标准进行节目制作。而且自2005年下半年以来&#xff0c;无论是NVIDIA还是ATI都把支持H.264硬件解码加速作为自己最值得夸耀的视频技术。H.264到底是何方“神…

Java笔记13-兄弟连在线考试系统

今天内容&#xff1a; 1.兄弟连在线考试系统 1.1 软件开发的流程 需求分析文档 > 概要设计文档 > 详细设计文档 > 编码和测试1.2 编写目的 (1)复习JavaSE所学的所有内容。 (2)锻炼基本的编程能力。 1.3 功能分析 考试系统&#xff1a;(1)学员系统a.修改密码b.开始…