Java:集合(List、Map、Set)
文章目录
- 1. Collection集合
- 1-1. 迭代器遍历方式
- 1-2. 通过for循环进行遍历
- 1-3. forEach遍历
- 2. List集合
- 2-1. ArrayList底层实现原理
- 2-2. LinkedList底层实现原理
- 3. Set集合
- 3-1. HashSet 底层实现
- 3-2. LinkedHashSet 底层实现
- 3-3. TreeSet
- 4. Collection集合->总结
- 5. Map集合
- 5-1. 通过键找值-进行遍历
- 5-2. 键值对进行遍历
- 5-3. 通过Lambda表达式进行遍历
- 5-4. HashMap 底层实现
- 5-5. LinkedHashMap 底层原理
- 5-6. TreeMap 底层原理
1. Collection集合
本身为一个接口。
包括List、Set集合两种。其中List集合添加的元素有序、可重复、有索引,下面有两个实现类,分别为ArrayList、LinkedList。而Set集合添加的元素是无序的、不重复的、无索引的。它的实现类有HashSet、LinkedHashSet、TreeSet,需要注意的是LinkedHashSet中的元素是有序的,TreeSet中的元素是按照大小默认升序进行排序的。
1-1. 迭代器遍历方式
package jh_study;import java.util.*;public class JHStudy {public static void main(String[] args) {Collection<String> c = new ArrayList<>();for (int i = 0; i < 4; i++) {c.add(String.valueOf(i+1));}Iterator<String> iterator = c.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}
}
通过集合对象".iterator()"获取其迭代器对象,然后通过“迭代器对象.hasNext()”方法来判断是否已经到末尾;没有到末尾的话,可以通过“迭代器对象.next()”获取对应的元素值,不过获取到元素值之后,其对应的索引(或者指针节点)会指向下一个位置。
1-2. 通过for循环进行遍历
package jh_study;import java.util.*;public class JHStudy {public static void main(String[] args) {Collection<String> c = new ArrayList<>();for (int i = 0; i < 4; i++) {c.add(String.valueOf(i+1));}for (String s : c) {System.out.println(s);}}
}
这种方式遍历集合,本质上就是迭代器遍历集合的简化写法。
1-3. forEach遍历
package jh_study;import java.util.*;
import java.util.function.Consumer;public class JHStudy {public static void main(String[] args) {Collection<String> c = new ArrayList<>();for (int i = 0; i < 4; i++) {c.add(String.valueOf(i+1));}// 匿名内部类写法c.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});// 简化c.forEach((e)->{System.out.println(e);});// 再简化c.forEach((e)-> System.out.println(e));// 再简化c.forEach(System.out::println);}
}
Collection是一个接口,因此实现了该接口对应的类都具备其下的方法。
2. List集合
遍历元素方式除了上述三种之外,还可以通过下标索引进行遍历,当然需要使用到for循环
package jh_study;import java.util.*;public class JHStudy {public static void main(String[] args) {List<Integer> l = new ArrayList<>();l.add(12);l.add(0);for (int i = 0; i < l.size(); i++) {System.out.println(l.get(i));}}
}
2-1. ArrayList底层实现原理
底层实现是基于数组实现的,查看源代码可以发现。
根据索引查询速度快(查询数据通过地址值和索引进行定位,查询任意数据耗时相同),删除效率低(可能需要把后面很多的数据进行前移),添加效率低(可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组扩容。)
ArrayList底层实现原理:
1.利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组;
2.添加第一个元素时,底层会创建一个新的长度为10的数组;
3.存满时,会扩容1.5倍;
如果一次添加多个元素,1.5倍还放不下,则新创建的数组的长度以实际为准;
2-2. LinkedList底层实现原理
底层实现是双向链表。
LinkedList的应用场景:实现栈(后进先出)、队列(先进先出)。
3. Set集合
正如上述所说,常见的set集合类型有HashSet、LinkedHashSet、TreeSet。其中,HashSet特点为无序、不重复、无索引;LinkedHashSet特点为有序、不重复、无索引;TreeSet特点为升序、不重复、无索引。
package jh_study;import java.util.*;public class JHStudy {public static void main(String[] args) {Set<Integer> set = new HashSet<>();Set<Integer> set1 = new LinkedHashSet<>();Set<Integer> set2 = new TreeSet<>();System.out.println("HashSet集合");set.add(333);set.add(2222);set.add(1111);set.add(2333);System.out.println(set);System.out.println("LinkedHashSet集合");set1.add(333);set1.add(2222);set1.add(1111);set1.add(2333);System.out.println(set1);System.out.println("TreeSet集合");set2.add(333);set2.add(2222);set2.add(1111);set2.add(2333);System.out.println(set2);}
}
3-1. HashSet 底层实现
关于hash值,就是一个int类型的数值,Java中每一个对象都有一个hash值;Java中所有的对象,都可以通过调用Object类提供的hashCode方法,返回该对象自己的hash值。
hash值的特点:同一个对象多次调用hashCode方法返回的hash值是相同的;不同对象,它们的hash值一般不相同,但是也有可能相同(hash碰撞)。
HashSet底层原理:是基于hash表实现的,hash表是一种增删改查数据性能都较好的数据结构。在jdk8之前,hash表的实现是基于数组+链表实现的;jdk8之后,hash表的实现是基于数组+链表+红黑树实现的。
jdk8之前的哈希表底层实现为:创建一个默认长度为16的数组,默认加载因子为0.75(也就是当长度为12时,会进行扩容操作,原数组中的元素会添加到新数组当中去);使用元素的哈希值对数组长度求余计算出应存入的位置;判断当前位置是否为null,如果为null直接存入,如果不为null,表示该位置有元素,则调用equals方法进行比较,相等,则不存,不相等,则存入数组,也就是在数组对应的位置上创建链表,元素存入到链表中进行存储。在jdk8之后,当链表长度超过8,并且数组长度大于或等于64时,自动将链表转换为红黑树。
jdk8之前的Hash表结构。
jdk8之后的Hash表结构。
如果在HashSet中有两个内容相同但是它们hash值不同,此时如果我们想去重的话,需要重写其hashCode和equals方法。
package jh_study;import java.util.HashSet;
import java.util.Objects;
import java.util.Set;class User{private String name;private Integer age;public User(String name, Integer age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return Objects.equals(name, user.name) && Objects.equals(age, user.age);}@Overridepublic int hashCode() {return Objects.hash(name, age);}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}public class JHStudy2 {public static void main(String[] args) {Set<User> users = new HashSet<>();users.add(new User("张三",20));users.add(new User("张三",20));System.out.println(users);}
}
3-2. LinkedHashSet 底层实现
LinkedHashSet为HashSet的子类,底层实现依旧是基于哈希表(数组、链表、红黑树)实现的。但是,它的每个元素都额外的多了一个双链表的机制记录它前后元素的位置。
3-3. TreeSet
底层实现基于红黑树实现的升序排序(默认情况下),特点是不重复、无索引、可排序(默认升序排序)。如果在TreeSet中存储的数类型为自定义类型(比如Student),此时如果打印输出结果会报错,因此TreeSet类型并不知道通过Student那个属性进行计较,此时可以在Student类下,让其实现Comparable接口,并重写方法compareTo;当然,也可以直接在定义TreeSet类型的变量时,给上参数new Comparator比较器对象,让其实现方法compare。
package jh_study;import java.util.*;public class JHStudy3 {public static void main(String[] args) {Set<Integer> set = new TreeSet<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});// 简化写法/*Set<Integer> set = new TreeSet<>((a,b)->{return b - a;});*/set.add(3);set.add(1);set.add(2);System.out.println(set);}
}
如果上述两种都设置了,类对象实现了Comparable接口,定义TreeSet变量时指定了比较器,那么采用就近原则上那个(也就是比较器)来进行排序的。
4. Collection集合->总结
- 如果希望记住元素的添加顺序,需要存储重复的元素,又要频繁的根据索引查询数据,可以采用ArrayList集合类型(底层实现基于数组,特点是有序、可重复、有索引);
- 如果希望记住元素的添加顺序,且增删首尾数据的情况较多,可以采用LinkedList集合类型(底层实现基于双链表,特点是有序、可重复、有索引);
- 如果不在意元素顺序,也没有重复元素需要存储,只希望增删查改都快,可以采用HashSet集合类型;(底层实现基于哈希表,特点是无序、不重复、无索引)
- 如果希望记住元素的添加顺序,也没有重复元素需要存储,且希望增删改查都快,可以采用LinkedHashSet集合类型(底层实现基于哈希表和双链表,特点为有序、不重复、无索引);
- 如果要对元素进行排序,也没有重复元素需要存储,且希望增删改查都快,可以采用TreeSet集合类型(底层实现基于红黑树,特点为升序、不重复、无索引);
5. Map集合
键值对集合,键不能重复,值可以重复。
常见的比如HashMap(无序、不重复、无索引)、TreeMap(有序、不重复、无索引)、LinkedHashMap(按照大小默认升序排序,不重复,无索引)。
package jh_study;import java.util.*;public class JHStudy4 {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put(null,null);map.put("张三","男");map.put("李四","女");map.put("嘻嘻1","MyDream");System.out.println(map);// {null=null, 李四=女, 张三=男, 嘻嘻1=MyDream}System.out.println(map.get("张三"));//男 ,获取键对应的值System.out.println(map.get("赵六"));// null ,不存在的键System.out.println(map.containsKey("李四"));// 判断是否存在某个键 true// map.clear();// 清空map中的数据Set<String> set = map.keySet();System.out.println(set);// 获取所有的键 [null, 李四, 张三, 嘻嘻1]System.out.println(map.isEmpty());// 判断map是否为空 falseSystem.out.println(map.values());// 获取map中所有的值 [null, 女, 男, MyDream]System.out.println(map.size());// 获取map的长度 4System.out.println(map.remove("张三"));// 删除某个键,并返回这个键对应的值 男}
}
5-1. 通过键找值-进行遍历
通过Map对象的 keySet() 方法获取对应的键集合,然后通过遍历键集合来获取对应的值。
package jh_study;import java.util.*;public class JHStudy4 {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put(null,null);map.put("张三","男");map.put("李四","女");map.put("嘻嘻1","MyDream");map.put("赵六","man");Set<String> keys = map.keySet();for (String key : keys) {System.out.println(key+"->"+map.get(key));}}
}
5-2. 键值对进行遍历
通过Map对象的 entrySet() 方法获取键值对集合,然后对这个集合进行遍历即可。
package jh_study;import java.util.*;public class JHStudy4 {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put(null,null);map.put("张三","男");map.put("李四","女");map.put("嘻嘻1","MyDream");map.put("赵六","man");Set<Map.Entry<String, String>> set = map.entrySet();for (Map.Entry<String, String> entry : set) {System.out.println(entry.getKey()+"=>"+entry.getValue());}}
}
5-3. 通过Lambda表达式进行遍历
package jh_study;import java.util.*;
import java.util.function.BiConsumer;public class JHStudy4 {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put(null,null);map.put("张三","男");map.put("李四","女");map.put("嘻嘻1","MyDream");map.put("赵六","man");map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String s, String s2) {System.out.println(s+" "+s2);}});// 简化map.forEach((k,v)-> System.out.println(k+" "+v));}
}
5-4. HashMap 底层实现
HashMap和HashSet的底层实现原理都是一样的,都是基于哈希表实现的。在JDK8之前,其哈希表基于数组+链表;JDK8之后,其哈希表基于数组+链表+红黑树实现。
5-5. LinkedHashMap 底层原理
LinkedHashMap 和 LinkedHashSet的底层原理是一样的。
5-6. TreeMap 底层原理
TreeMap和TreeSet的底层实现原理都是一样的。
如果要对数据进行排序,也有两种方式,和TreeSet一样,参考代码如下:
方法1:让需要排序的对象数据实现Comparable即可,并重写方法compareTo。
package jh_study;import java.util.*;public class JHStudy4 {public static void main(String[] args) {Map<User4, Integer> map = new TreeMap<>();map.put(new User4("张三",23),0);map.put(new User4("李四",12),1);map.put(new User4("王五",10),2);map.put(new User4("赵六",25),3);System.out.println(map);}
}class User4 implements Comparable<User4>{String name;Integer age;public User4(String name, Integer age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "User4{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int compareTo(User4 o) {return o.age - this.age;}
}
方法2:通过比较器,参考代码如下:
package jh_study;import java.util.*;public class JHStudy4 {public static void main(String[] args) {Map<User4, Integer> map = new TreeMap<>(new Comparator<User4>() {@Overridepublic int compare(User4 o1, User4 o2) {return o1.age-o2.age;}});map.put(new User4("张三",23),0);map.put(new User4("李四",12),1);map.put(new User4("王五",10),2);map.put(new User4("赵六",25),3);System.out.println(map);}
}
相关文章:
Java:集合(List、Map、Set)
文章目录 1. Collection集合1-1. 迭代器遍历方式1-2. 通过for循环进行遍历1-3. forEach遍历 2. List集合2-1. ArrayList底层实现原理2-2. LinkedList底层实现原理 3. Set集合3-1. HashSet 底层实现3-2. LinkedHashSet 底层实现3-3. TreeSet 4. Collection集合->总结5. Map集…...
使用秘钥登录服务器
在我们测试或生产环境中,为了服务器安全性,有时可能需要以 SSH 密钥的方式登录服务器,接下来,将演示如何通过 SSH 私钥的方式来远程服务器。 一、远程服务器生成密钥对 1、首先在目标远程服务器下生成 SSH 密钥对 ssh-keygen然…...
BFS算法题
目录 1.BFS 2.树里的宽搜 题目一——429. N 叉树的层序遍历 - 力扣(LeetCode) 题目二——103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode) 题目三——662. 二叉树最大宽度 - 力扣(LeetCode) 题目四——…...
网络应用技术 实验八:防火墙实现访问控制(华为ensp)
目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、设计全网 IP 地址 2、设计防火墙安全策略 3、在 eNSP 中部署园区网 4、配置用户主机地址 5、配置网络设备 配置交换机SW-1~SW-5 配置路由交换机RS-1~RS-5 配置路由器R-1~R-3 6、配置仿…...
嵌入式现状、机遇、挑战与展望
在当今数字化浪潮中,嵌入式系统宛如一颗璀璨的明珠,熠熠生辉,深刻地渗透到了我们生活的方方面面,成为推动现代科技进步不可或缺的关键力量。从智能家居的便捷控制,到工业生产的精准运作,再到汽车的智能驾驶…...
天通卫星卡通知短信模板
文章目录 引言I 阿里云新增短信模板短信模板通知短信变量规范计费规则: 短信长度不超过70个字,按照1条短信计费;II 表设计III 实现方案引言 背景:天通卡适用于应急救灾、登山探险、海上通信、野外作业等需要稳定可靠通信的场景。 需求:天通卡充值成功通知 平台基于阿里云给…...
Unity WebGL 编译和打包说明(官方文档翻译校正)
目录 Unity WebGL 编译和打包说明WebGL 简介WebGL 浏览器兼容性 (WebGL Browser Compatibility)平台支持 (Platform Support)多线程支持限制多线程支持的因素安装 Unity Hub 并添加所需模块WebGL 开发WebGL Player 设置Resolution and PresentationResolutionWebGL TemplateSpl…...
题解 - 取数排列
题目描述 取1到N共N个连续的数字(1≤N≤9),组成每位数不重复的所有可能的N位数,按从小到大的顺序进行编号。当输入一个编号M时,就能打印出与该编号对应的那个N位数。例如,当N=3时,可…...
JAVA实战:借助阿里云实现短信发送功能
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
高阶函数:JavaScript 编程中的魔法棒
在JavaScript的世界里,高阶函数是一种强大的工具,它允许我们将函数作为参数传递或将函数作为返回值。这种特性使得JavaScript代码更加灵活和强大。本文将深入探讨高阶函数的定义、用法以及在实际项目中的最佳实践,帮助大家更好地理解和应用这…...
Android 12.0 Launcher3从首页开始安装app功能实现
1.前言 在12.0的系统rom定制化开发中,在进行Launcher3的某些功能开发实现过程中,在某些项目中,安装的app比较多,要求在launcher3的首页开始安装 app应用,接下来就需要分析下app安装图标排序的流程,然后在实现相关的功能 2. Launcher3从首页开始安装app功能实现的核心…...
软考高级架构 - 10.5 软件架构演化评估方法
10.4 软件架构演化原则总结 本节提出了18条架构演化的核心原则,并为每条原则设计了简单而有效的度量方法,用于从系统整体层面提供实用信息,帮助评估和指导架构演化。 演化成本控制:成本小于重新开发成本,经济高效。进…...
半导体制造全流程
半导体制造是一个极其复杂且精密的过程,主要涉及将硅片加工成功能强大的芯片。以下是半导体制造的全流程概述: 1. 硅材料制备 硅提纯: 使用冶金级硅,进一步提纯为高纯度硅(电子级硅),纯度可达 …...
国科大网络协议安全期末
完整资料仓库地址:https://gitee.com/etsuyou/UCAS-Network-Protocol-Security 部分题目: 六 论述题10*220 试讨论IPv6解决了IPv4的哪些“痛点”,以及IPv6存在的安全问题试比较IPsec与SSL的安全性 五 简答题5*315 简述MAC欺骗和ARP欺骗的…...
ES动态索引——日志es索引数据按月份存储
一、定义ES索引 NoArgsConstructor AllArgsConstructor Data Accessors(chain true) Document(indexName "charge_pile_log" Constants.ES_TIME_DYNAMIC_INDEX) //(索引名称动态,前面固定,后面月份) public class ChargePileLogESDomain {…...
NLP论文速读(ICML 2024)|面相对齐大语言模型的迁移和合并奖励模型方法
论文速读|Transforming and Combining Rewards for Aligning Large Language Models 论文信息: 简介: 本文探讨了如何使大型语言模型(LLMs)与人类偏好对齐。传统的对齐方法是先从偏好数据中学习一个奖励模型,然后使用这…...
蓝桥杯我来了
最近蓝桥杯报名快要截止了,我们学校开始收费了,我们学校没有校赛,一旦报名缴费就是省赛,虽然一早就在官网上报名了,但是一直在纠结,和家人沟通,和朋友交流,其实只是想寻求外界的支持…...
Vue3+TypeScript+AntVX6实现Web组态(从技术层面与实现层面进行分析)内含实际案例教学
摘要 用Vue3+TypeScript+AntVX6实现Web组态(从技术层面与实现层面进行分析),包含画布创建、节点设计、拖拽实现(实际案例)、节点连线、交互功能,后续文章持续更新。 注:本文章可以根据目录进行导航 文档支持 AntVX6使用文档 https://x6.antv.antgroup.com/tutorial…...
【LeetCode】每日一题 2024_12_13 K 次乘运算后的最终数组 I(暴力)
前言 每天和你一起刷 LeetCode 每日一题~ 小聊两句 1、今天是 12.13 南京大屠杀国家公祭日。铭记历史,勿忘国耻。 2、今天早上去看了 TGA 年度游戏颁奖,小机器人拿下了年度最佳游戏,所有人都震惊了,大伙纷纷问到,谁…...
Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比
软件名称物流系统仿真工业布局仿真动画效果数据分析优化虚拟现实/混合现实二次开发虚拟电控和PLC调试 软件行业内特殊功能Emulate3D1.物流设备模块完备,功能灵活设置,涵盖各种设备形态和运作方式 2.唯一将摩擦力、重力、阻力等物理属性融入到物流运动中&…...
深度学习day4|用pytorch实现猴痘病识别
🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 🍺要求: 训练过程中保存效果最好的模型参数。 加载最佳模型参数识别本地的一张图片。 调整网络结构使测试集accuracy到达88%&#x…...
批量导出工作簿中高清图片-Excel易用宝
我同事在工作簿中做了三个图表,现在需要将工作簿中的图标导出保存为高清图片,通过右键另存为保存的图片并非高清图片,其实要把Excel工作簿中的图表或图片对象导出为高清图片也很简单。 单击Excel易用宝 Plus,导出高清图片。 在导出…...
外观模式的理解和实践
外观模式(Facade Pattern)是一种常用的软件设计模式,它提供了一个统一的接口,用来访问子系统中的一群接口。该模式定义了一个高层的接口,使得子系统更容易使用。简单来说,外观模式就是通过引入一个外观角色…...
linux离线安装部署redis
版本信息 linux版本:CentOS-7-x86_64 redis版本:redis-6.2.6 VMware:VMware-workstation-full-16.1.1 xshell: Xshell-7.0 安装 1.查看当前虚拟机ip命令:ifconfig -a 2.xhell连接虚拟机 ,在xshell页面点击文件-…...
网管平台(基础篇):路由器的介绍与管理
路由器简介 路由器(Router)是一种计算机网络设备,它的主要作用是将数据通过打包,并按照一定的路径选择算法,将网络传送至目的地。路由器能够连接两个或更多个网络,并根据信道的情况自动选择和设定路由&…...
数据结构——跳表
目录 1.什么是跳表-skiplist 2.skiplist的效率如何保证? 3.skiplist的实现 4.skiplist跟平衡搜索树和哈希表的对比 1.什么是跳表-skiplist skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的…...
活动预告 |【Part2】Microsoft Azure 在线技术公开课:基础知识
课程介绍 参加“Azure 在线技术公开课:基础知识”活动,培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动,扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 课…...
PyCharm如何导入库( 包 )
目录 1.在主界面中导库 2.用设置->项目安装库 2.1.使用右上方按钮 2.2.使用右下方Python解释器 3.使用左下角终端导库 1.在主界面中导库 在主界面输入导库后等待一会儿,会在那一行出现一个红色灯。 图1 红色灯 我们点击红色灯,会出现 图2 错误选…...
【DevOps基础篇】SCM(Source Code Management)
目录 代码管理工具Git特点:SVN特点:Git与SVN的对比:Git 的开发工作流程(flow)的设计Git Flow主要特点:工作流程:GitHub Flow主要特点:工作流程:两种Flow的对比:推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战代码管理工具 Gi…...
DDS—RTPS一致性测试案例分析
1 往期回顾 通过《DDS数据分发服务—提升汽车领域数据传输效率》和《DDS—DCPS测试策略介绍及实际案例分析》这两篇文章的介绍,相信广大读者对Data Distribution Service(DDS)协议和Data Centric Publish Subscribe(DCPS)测试有了基本了解:DDS协议致力于…...
wordpress 视频站/抖音引流推广一个30元
导语 Redis是我们很常用的一款nosql数据库产品,我们通常会用Redis来配合关系型数据库一起使用,弥补关系型数据库的不足。 其中,Redis的发布订阅功能也是它的一大亮点。虽然它不是一款专门做发布订阅的产品,但其自带的发布订阅功…...
怎么看网站有没有做404/广东seo网站设计
物联网-wemos D1 Mini (esp8266)实验九 --- blynk APP远程控制格力空调开机并显示温湿度概述实验材料硬件硬件连接图引脚连接对照表Arduino端软件编写测试Wemos D1 Mini温湿度采集程序DHT库的安装将DHT采集代码整合到实验八中Bylnk端软件编写最终显示效果…...
关于政府网站集约化建设的报告/抖音seo代理
第一章、左旋转字符串 作者:July,yansha。时间:二零一一年四月十四日。说明:(狂想曲,有三层意思:1、思绪纷飞,行文杂乱无章,想到什么,记下什么。2、简单问题深…...
网站办公室文化建设/百度网盘手机app下载安装
首先Asp程序发送到客户端的Cookie是进行UrlEncode后的,因此在Asp.net读取时应该采用UrlDecode进行还原,另外Asp.Net生成的Cookie比方用于Form认证的Cookie根据配置,有可能是经过加密的,因此在Asp中读取时要根据相应算法进行解密....
wordpress图片外链设置/网络营销成功案例ppt
前前后后,大概两个月的时间,lunar这个项目终于达到了一个很高的完整度。 Lunar是一个Python语言的网络框架,类似于Django,Flask,Tornado等当下流行的web framework。最初有这个想法是在大二下学期,当时接触…...
梦幻创意晋城网站建设/互联网运营自学课程
function countCharacters(str, num) {var str str || ,num num || 0,res ,length 0;if (!str || !num) {return str;}// 循环字符串,判断长度 最少也会返回一个字for (var i in str) {res str[i];// 测试长度length /[\u4e00-\u9fa5]/.test(str[i]) ? 2 :…...