当前位置: 首页 > news >正文

数据结构--Map和Set

目录

  • 一.二叉搜索树
    • 1.1 概念
    • 1.2 二叉搜索树的简单实现
  • 二.Map
    • 2.1 概念
    • 2.2 Map常用方法
    • 2.3 Map使用注意点
    • 2.4 TreeMap和HashMap的区别
    • 2.5 HashMap底层知识点
  • 三.Set
    • 3.1 概念
    • 3.2 Set常用方法
    • 3.3 Set使用注意点
    • 3.4 TreeSet与HashSet的区别
  • 四.哈希表
    • 4.1 概念
    • 4.2 哈希冲突与避免
    • 4.3 冲突解决
      • 4.3.1 闭散列
      • 4.3.2 开散列(哈希桶)
      • 4.3.3 哈希桶的简单实现

一.二叉搜索树

1.1 概念

二叉搜索树,又称二叉排序树,其是一棵空树或者具有以下性质的二叉树:

  1. 如果树的左子树不为空,则左子树上的所有结点的值都小于根节点的值
  2. 如果树的右子树不为空,则右子树上的所有结点的值都大于根节点的值
  3. 树的左右子树都分别为一棵二叉搜索树

1.2 二叉搜索树的简单实现

public class BinarySearchTree {static class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val = val;}}public TreeNode root;public boolean search(int val) { //查找值为val的结点TreeNode cur = root;while (cur != null) {if (cur.val < val) { //当前结点的值小于valcur = cur.right; //在其右子树查找} else if (cur.val > val) { //当前结点的值大于valcur = cur.left; //在其左子树寻找} else { //当前结点的值等于val,查找成功return true;}}return false;}public void insert(int val) { // 插入值为val的结点// 1.按照二叉搜索树的性质,查找到要插入的结点// 2.插入新结点if (root == null) {root = new TreeNode(val);return;}TreeNode parent = null;TreeNode cur = root;while (cur != null) {if (cur.val < val) {parent = cur;cur = cur.right;} else if (cur.val > val) {parent = cur;cur = cur.left;} else {return;}}TreeNode newNode = new TreeNode(val);if (parent.val > val) {parent.left = newNode;} else {parent.right = newNode;}}public void remove(int val) { //删除值为val的结点TreeNode parent = null;TreeNode cur = root;while (cur != null) {if (cur.val < val) {parent = cur;cur = cur.right;} else if (cur.val > val) {parent = cur;cur = cur.left;} else {// parent:待删除节点的父结点// cur:待删除结点removeNode(parent, cur);}}}private void removeNode(TreeNode parent, TreeNode cur) {if (cur.left == null) { //cur.left为空的情况if (cur == root) { //cur是rootroot = cur.right;} else if (cur == parent.left) { //cur不是root,cur是parent的左子结点parent.left = cur.right;} else { //cur不是root,cur是parent的右子结点parent.right = cur.right;}} else if (cur.right == null) { //cur.right为空的情况(与cur.left为空的情况相同)if (cur == root) {root = cur.left;} else if (cur == parent.left) {parent.left = cur.left;} else {parent.right = cur.left;}} else { //cur.left与cur.right都不为空的情况//使用替换法删除,在cur结点的右子树中寻找值最小的结点来替换cur的值TreeNode t = cur.right; //值最小的结点TreeNode tp = cur; //值最小结点的父结点while (t.left != null) {tp = t;t = t.left;}cur.val = t.val;if (tp.left == t) { //删除结点ttp.left = t.right;} else {tp.right = t.right;}}}
}

二.Map

2.1 概念

Map和Set是一种专门用来进行搜索的数据结构,一般把搜索的数据称为关键字(Key),与关键字对应的称为值(Value)。Map是一个接口类,使用了Key-Value模型,类中存储的是<Key,Value>键值对,并且Key是唯一的,不能重复。Map内部使用了Map.Entry<K,V>的内部类来存放<Key,Value>键值对的映射关系

2.2 Map常用方法

方法解释
V get(Object key)返回key对应的value
V getOrDefault(Object key,V defaultValue)返回key对应的value,key不存在,则返回defaultValue(默认值)
V put(K key,V value)设置key对应的value
V remove(Object key)删除key对应的映射关系
Set<K> keySet()返回所有key的不重复集合
Collection<V> values()返回所有value的可重复集合
Set<Map.Entry<K,V>> entrySet()返回所有的key-value映射关系
boolean containsKey(Object key)判断是否包含key
boolean containsValue(Object value)判断是否包含value

2.3 Map使用注意点

  1. Map是一个接口,不能直接实例化对象,如果要实例化对象,只能实例化其实现类TreeMap或者HashMap
  2. Map中存放键值对的key唯一的,value是可以重复
  3. 在TreeMap中插入键值对时,key不能为空,否则会抛出NullPointerException(空指针)异常,value可以为空;HashMap的key和value都可以为空
  4. Map中的key可以全部分离出来,存储到Set中进行访问
  5. Map中的value也可以全部分离出来,存储到Collection的任意一个子集合中
  6. Map中键值对的key不能直接修改,value可以修改,如果要修改key,只能将key删除掉再重新插入

2.4 TreeMap和HashMap的区别

MapTreeMapHashMap
底层结构红黑树哈希桶
插入/删除/查找时间复杂度O(log2N)O(1)
是否有序关于key有序无序
线程安全不安全不安全
插入/删除/查找区别需要进行元素比较通过哈希函数计算哈希地址
比较与覆写key必须能够比较,否则会抛异常自定义类型需要覆写equals和hashCode方法
应用场景需要key有序场景下不关心key是否有序,有更高的时间性能需求

2.5 HashMap底层知识点

  • HashMap的最大容量为230
  • 当指定HashMap初始容量capacity时,生成的HashMap的容量为最接近capacity的二次幂的值(例如指定容量为20,实际容量为32;指定容量为1000,实际容量为1024)
  • 未指定HashMap初始容量时,生成的HashMap默认容量16
  • HashMap扩容时为2倍扩容
  • HashMap的put方法使用的是尾插法
  • 如果HashMap中存储数组长度>=64,且各个桶中的单链表的长度>=8,HashMap就会树化(单链表转变成红黑树)

三.Set

3.1 概念

Set也是一个接口类,与Map不同,Set使用的是纯Key模型,类中只存储Key

3.2 Set常用方法

方法解释
boolean add(E e)添加元素,但是重复元素不会添加
void clear()清空集合
boolean contains(Object o)判断o是否在集合中
Iterator<E> iterator()返回迭代器
boolean remove(Object o)删除集合中的o
int size()返回set中元素的个数
boolean isEmpty()检测set是否为空,空返回true,否则返回false
Object toArray()将set中的元素转换为数组返回
boolean containsAll(Collection<?> c)集合c中的元素是否在set中全部存在
boolean addAll(Collection<? extends E> c)将集合c中的元素添加到set中,可达到去重的效果

3.3 Set使用注意点

  1. Set是继承自Collection的一个接口类
  2. Set中只存储了key,并且要求key唯一
  3. 实现Set接口的常用类有TreeSetHashSet,还有LinkedHashSet(在HashSet的基础上维护了一个双向链表来记录元素的插入次序)
  4. TreeSet底层使用Map实现,使用key与Object默认对象作为键值对插入到Map中
  5. 与Map类似,Set中的key也不能直接修改,如果修改key,要删除并重新插入
  6. TreeSet不能插入null的key,HashSet可以

3.4 TreeSet与HashSet的区别

SetTreeSetHashSet
底层结构红黑树哈希桶
插入/删除/查找时间复杂度O(log2N)O(1)
是否有序关于key有序不一定有序
线程安全不安全不安全
插入/删除/查找区别按照红黑树的特性来进行插入删除计算key哈希地址再进行插入和删除
比较与覆写key必须能够比较,否则会抛出异常自定义类型需要覆写equals和hashCode方法
应用场景需要key有序场景下不关心key是否有序,有更高的时间性能需求

四.哈希表

4.1 概念

哈希表,又称散列表,是一种数据结构,其通过哈希函数(散列函数)在元素的存储位置与关键码之间建立一一映射的关系,从而实现快速的插入、搜索和删除操作

例如数据集合{1,5,9},哈希函数设置为hash(key)=key%capacity;capacity为存储元素底层空间总大小
在这里插入图片描述

4.2 哈希冲突与避免

哈希冲突:对于两个不同的关键字,如果通过哈希函数计算出了相同的哈希地址,这种现象称为哈希冲突

由于哈希表底层数组容量往往小于实际存储的关键字数量,这就导致冲突的发生是必然的,但是我们可以通过一些方法尽量降低冲突率。冲突避免的方法有:

  1. 哈希函数设计:引起哈希冲突的原理可能是哈希函数的设计不够合理,常用哈希函数有直接定制法,除留余数法,平方取中法,折叠法,随机数法,数学分析法等
  2. 负载因子调节:负载因子α=填入表中的元素个数/哈希表的长度,α越大表明填入表中的元素越多,产生冲突的可能性就越大,反之则α越小,则填入表中元素越少,产生冲突的可能性越小。想要降低冲突率,就要降低负载因子,由于哈希表中元素个数是不可变的,我们可以通过调整哈希表中数组的大小来实现哈希冲突避免

4.3 冲突解决

解决哈希冲突的两种常见方法分别为闭散列开散列

4.3.1 闭散列

闭散列,也称开放定址法,当发生哈希冲突时,如果哈希表没有被装满,说明在哈希表中还有空位置,这时可以把key存放到冲突位置中的下一个空位置去,下个空位置的具体寻找方法如下:
9. 线性探测:从发生冲突的位置开始,依次向后探测,直到寻找到下一个空位置为止
10. 二次探测:线性探测会导致产生冲突的数据堆积在一起,二次探测为了避免这个问题,调整寻找下一个空位置的方法为(hash(key)+i^2^)%capacity (其中i=1,2,3,…)

4.3.2 开散列(哈希桶)

开散列,又称链地址法,对关键码集合用哈希函数计算哈希地址,具有相同地址的关键码归属于同一个子集合,每一个子集合称为一个,各个桶中的元素通过一条单链表(长度突破大于一定阈值后,转变为红黑树)连接起来,每条链表的头结点存储在哈希表中。在Java中,就使用了哈希桶这种方式来解决冲突

4.3.3 哈希桶的简单实现

public class HashBucket<K, V> {static class Node<K, V> {K key;V val;Node<K, V> next;public Node(K key, V val) {this.key = key;this.val = val;}}public Node<K, V>[] array = (Node<K, V>[]) new Node[10];public int usedSize;public static final double LOAD_FACTOR = 0.75; //负载因子public void put(K key, V val) {Node<K, V> node = new Node<>(key, val);int hash = key.hashCode();int index = hash % array.length;Node<K, V> cur = array[index];while (cur != null) {if (cur.key.equals(key)) {cur.val = val;return;}cur = cur.next;}node.next = array[index];array[index] = node;usedSize++;if (doLoadFactor() > LOAD_FACTOR) {reSize();}}public void reSize() {Node<K, V>[] newArray = new Node[array.length * 2];for (int i = 0; i < array.length; i++) {Node cur = array[i];while (cur != null) {int hash = cur.key.hashCode();int index = hash % newArray.length;Node curNext = cur.next;cur.next = newArray[index];newArray[index] = cur;cur = curNext;}}array = newArray;}public double doLoadFactor() {return usedSize * 1.0 / array.length;}public V get(K key) {int hash = key.hashCode();int index = hash % array.length;Node<K, V> cur = array[index];while (cur != null) {if (cur.key.equals(key)) {return cur.val;}cur = cur.next;}return null;}
}

相关文章:

数据结构--Map和Set

目录 一.二叉搜索树1.1 概念1.2 二叉搜索树的简单实现 二.Map2.1 概念2.2 Map常用方法2.3 Map使用注意点2.4 TreeMap和HashMap的区别2.5 HashMap底层知识点 三.Set3.1 概念3.2 Set常用方法3.3 Set使用注意点3.4 TreeSet与HashSet的区别 四.哈希表4.1 概念4.2 哈希冲突与避免4.3…...

计算机操作系统——进程控制(Linux)

进程控制 进程创建fork&#xff08;&#xff09;函数fork() 的基本功能fork() 的基本语法fork() 的工作原理fork() 的典型使用示例fork() 的常见问题fork() 和 exec() 结合使用总结 进程终止与$进程终止的本质进程终止的情况正常退出&#xff08;Exit&#xff09;由于信号终止非…...

【前端】ES6基础

1.开发工具 vscode地址 :https://code.visualstudio.com/download, 下载对应系统的版本windows一般都是64位的 安装可以自选目录&#xff0c;也可以使用默认目录 插件&#xff1a; 输入 Chinese&#xff0c;中文插件 安装&#xff1a; open in browser&#xff0c;直接右键文件…...

【排序算法 python实现】

排序算法 python实现 / 默写 # 汉诺塔 import copy import randomdef hanuo(n, a, b, c):if n 1:print(f{a} --> {c})returnhanuo(n - 1, a, c, b)print(f{a} --> {c})hanuo(n - 1, b, a, c)hanuo(3, A, B, C)# 冒泡排序 def bubble_sort(arr):n len(arr)for i in ran…...

Java图书管理系统(简易保姆级)

前面学习了这么多知识&#xff0c;为了巩固之前的知识&#xff0c;我们就要写一个图书管理系统来帮助大家复习&#xff0c;让大家的知识融会贯通~~~ 话不多说&#xff0c;直接开始今天的内容~ 首先呢&#xff0c;我们要有一个大体的思路&#xff1a; 实现效果思路有两种情况&a…...

嵌入式硬件设计:从概念到实现的全流程

嵌入式硬件设计是现代电子技术中一个至关重要的领域&#xff0c;涉及从硬件架构设计到硬件调试的各个方面。它为我们日常生活中的各类智能设备、家电、工业控制系统等提供了强大的支持。本文将介绍嵌入式硬件设计的基本流程、关键技术、常用工具以及常见的挑战和解决方案&#…...

第 4 章 Java 并发包中原子操作类原理剖析

原子变量操作类 AtomicLong 是原子性递增或者递减类&#xff0c;其内部使用 Unsafe 来实现&#xff0c;AtomicLong类也是在 rt.jar 包下面的&#xff0c;AtomicLong 类就是通过 BootStarp 类加载器进行加载的。这里的原子操作类都使用 CAS 非阻塞算法 private static final lon…...

从 0 到 1 掌握部署第一个 Web 应用到 Kubernetes 中

文章目录 前言构建一个 hello world web 应用项目结构项目核心文件启动项目 检查项目是否构建成功 容器化我们的应用编写 Dockerfile构建 docker 镜像推送 docker 镜像仓库 使用 labs.play-with-k8s.com 构建 Kubernetes 集群并部署应用构建 Kubernetes 集群环境编写部署文件 总…...

政安晨【零基础玩转各类开源AI项目】探索Cursor-AI Coder的应用实例

目录 Cusor的主要特点 Cusor实操 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; Cursor 是 Visual Studio Code 的一个分支。这使我们能够…...

CentOS 7 安装部署 KVM

1.关闭虚拟机 打开相关选项 打开虚拟机centos7 连接xshell 测试网络&#xff0c;现在就是没问题的&#xff0c;因为我们要使用网络源 安装 GNOME 桌面环境 安装KVM 模块 安装KVM 调试工具 构建虚拟机的命令行工具 qemu 组件,创建磁盘、启动虚拟机等 输入这条命令&#xff0c;…...

ArcGIS 10.2软件安装包下载及安装教程!

今日资源&#xff1a;ArcGIS 适用系统&#xff1a;WINDOWS 软件介绍&#xff1a;ArcGIS是一款专业的电子地图信息编辑和开发软件&#xff0c;提供一种快速并且使用简单的方式浏览地理信息&#xff0c;无论是2D还是3D的信息。软件内置多种编辑工具&#xff0c;可以轻松的完成地…...

一个专为云原生环境设计的高性能分布式文件系统

大家好&#xff0c;今天给大家分享一款开源创新的分布式 POSIX 文件系统JuiceFS&#xff0c;旨在解决海量云存储与各类应用平台&#xff08;如大数据、机器学习、人工智能等&#xff09;之间高效对接的问题。 项目介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统&am…...

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…...

3174、清除数字

3174、[简单] 清除数字 1、题目描述 给你一个字符串 s 。你的任务是重复以下操作删除 所有 数字字符&#xff1a; 删除 第一个数字字符 以及它左边 最近 的 非数字 字符。 请你返回删除所有数字字符以后剩下的字符串。 2、解题思路 遍历字符串&#xff1a; 我们需要逐个遍…...

C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)

目录 题目&#xff1a; 无重复字符的最长子串 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 3. 代码实现 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口 题目&#xff1a; 无重复字符的最长子串 1. 题目解析 题目截图&#xff1a; 此题所说的…...

ADS学习笔记 6. 射频发射机设计

基于ADS2023 update2 更多ADS学习笔记&#xff1a;ADS学习笔记 1. 功率放大器设计ADS学习笔记 2. 低噪声放大器设计ADS学习笔记 3. 功分器设计ADS学习笔记 4. 微带分支定向耦合器设计ADS学习笔记 5. 微带天线设计 -1、射频发射机性能指标 在射频电路和系统中&#xff0c;发送…...

上海乐鑫科技一级代理商飞睿科技,ESP32-C61高性价比WiFi6芯片高性能、大容量

在当今快速发展的物联网市场中&#xff0c;无线连接技术的不断进步对智能设备的性能和能效提出了更高要求。为了满足这一需求&#xff0c;乐鑫科技推出了ESP32-C61——一款高性价比的Wi-Fi 6芯片&#xff0c;旨在为用户设备提供更出色的物联网性能&#xff0c;并满足智能设备连…...

QT QRadioButton控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

51单片机从入门到精通:理论与实践指南(一)

单片机在智能控制领域的应用已非常普遍&#xff0c;发展也很迅猛&#xff0c;学习和使用单片机的人员越来越多。虽然新型微控制器在不断推出&#xff0c;但51单片机价格低廉、易学易用、性能成熟&#xff0c;在家电和工业控制中有一定的应用&#xff0c;而且学好了51单片机&…...

零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu

1.为啥使用Linux做嵌入式开发 能广泛支持硬件 内核比较高效稳定 原码开放、软件丰富 能够完善网络通信与文件管理机制 优秀的开发工具 2.什么是Ubuntu 是一个以桌面应用为主的Linux的操作系统&#xff0c; 内核是Linux操作系统&#xff0c; 具有Ubuntu特色的可视…...

C#中面试的常见问题007

1.在EF中实现一个实体对应多个表 1. 表拆分&#xff08;Table Splitting&#xff09; 表拆分是指将一个实体映射到两个或多个表中的行。这通常发生在实体的属性分布在不同的表中&#xff0c;但这些表通过外键关联到同一个主表。在EF Core中&#xff0c;可以通过Fluent API来配…...

人工智能——大语言模型

5. 大语言模型 5.1. 语言模型历史 20世纪90年代以前的语言模型都是基于语法分析这种方法&#xff0c;效果一直不佳。到了20世纪90年代&#xff0c;采用统计学方法分析语言&#xff0c;取得了重大进展。但是在庞大而复杂的语言信息上&#xff0c;基于传统统计的因为计算量巨大…...

nodejs第三方库sharp对图片的操作生成新图片、压缩、添加文字水印及图片水印等

Sharp是一个基于libvips的高性能Node.js图像处理库&#xff0c;它提供了广泛的功能&#xff0c;包括调整大小、裁剪、旋转、格式转换等。Sharp可以处理多种图像格式&#xff0c;并且能够高效地转换图像格式。 相关说明及用法看&#xff1a;https://sharp.nodejs.cn/ 安装&#…...

力扣第 67 题 “二进制求和”

题目描述 给你两个二进制字符串 a 和 b&#xff0c;以二进制字符串的形式返回它们的和。 示例 1: 输入: a "11", b "1" 输出: "100"示例 2: 输入: a "1010", b "1011" 输出: "10101"提示: 每个字符串仅由…...

Spring Boot优雅读取配置信息 @EnableConfigurationProperties

很多时候我们需要将一些常用的配置信息比如oss等相关配置信息放到配置文件中。常用的有以下几种&#xff0c;相信大家比较熟悉&#xff1a; 1、Value(“${property}”) 读取比较简单的配置信息&#xff1a; 2、ConfigurationProperties(prefix “property”)读取配置信息并与 …...

鸿蒙多线程开发——Sendable对象的序列化与冻结操作

1、Sendable对象的序列化与反序列化 Sendable对象的简单介绍参考文章&#xff1a;鸿蒙多线程开发——线程间数据通信对象03(sendable) 与JSON对象的序列化和反序列化类似&#xff0c;Sendable对象的序列化和反序列化是通过ArkTs提供的ASON工具来完成。 与JSON类似&#xff0…...

nodepad配置c/c++ cmd快速打开创建项目文件

前提:下载MinGw,并且配置环境变量 点击阅读次篇文章配置MinGw 无论是哪个编译器&#xff0c;执行c文件都是经历以下步骤: 编译文件生成exe文件执行该exe文件 我们先手动完成这两部 手动编译文件使用指令 gcc {你的c文件} -o {生成文件名}生成exe文件 第二步运行exe直接点击该文…...

【C++】读取数量不定的输入数据

读取数量不定的输入数据 似乎是一个很实用的东西&#xff1f; 问题&#xff1a; 我们如何对用户输入的一组数&#xff08;事先不知道具体有多少个数&#xff09;求和&#xff1f; 这需要不断读取数据直至没有新的输入为止。&#xff08;所以我们的代码就是这样设计的&#x…...

ESC字符背后的故事(27 <> 033 | x1B ?)

ANSI不可见字符转义&#xff0c;正确的理解让记忆和书写变得丝滑惬意。 (笔记模板由python脚本于2024年11月26日 15:05:33创建&#xff0c;本篇笔记适合python 基础扎实的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xf…...

基于NXP LS1043 OpenWRT智能交通边缘网关设计

0 引言 城市公共交通是与人们生产生活息息相关的重 要基础设施&#xff0c;是关系国计民生的社会公益事业。“城 市公共交通发展的十三五规划”明确指出&#xff1a;建设与移 动互联网深度融合的智能公交系统&#xff1b;推进“互联网 城市公交”发展&#xff1b;推进多元…...

网站 备案 初审/google seo是什么

http://blog.csdn.net/jtop0/article/details/5417594 静态库 动态库 QT使用静态库 Qmake添加了库文件&#xff0c;删除先前生成的Makefile&#xff0c;然后让Qmake自动生成添加了库文件的Makefile。...

安装wordpress出现数据表不可以/品牌推广公司

第一次接触nginx的时候&#xff0c;那时候公司还是用的一些不知名的小技术&#xff0c;后来公司发展问题&#xff0c;重新招了人&#xff0c;然后接触到nginx&#xff0c;公司 使用nginx用来做代理服务器&#xff0c;所有请求 都先经过nginx服务器&#xff0c;然后交由nginx服务…...

网页设计与网站建设指标点/镇江网站seo

我们很容易被漂亮的代码吸引&#xff0c;也不知不觉的在自己的代码库中加入这些。却没有冷静的想过它们的优劣。这不&#xff0c;我就收集了一系列形如 “是否为……&#xff1f;” 的判断的boolean函数。 isNull: function(a){return a null; }, isUndefined: function(a){re…...

网站上的幻灯片如何做/韩国比分预测

Typora使用教程: 标题名字(#号的个数代表标题的级数) 一级标题使用1个# 二级标题使用2个# ###最对支持六级标题,也就是六个#号 #文字 ##删除线 ###波浪号前后各两个 ##斜体 ###文字 一个*号是斜体 ##加粗 ###文字 两个*号是加粗 ##斜体+加粗 ###文字 三个*是斜…...

做设计都有什么网站/快速排名教程

使用终端登录Linux后使用vim编辑文本&#xff0c;这时在默认设置下载插入模式使用小键盘会插入一些非数字的字符。 更改的方法: 1.在文件&#xff08;file&#xff09;-- > 默认设置属性&#xff08;Default setting properties&#xff09;–> 终端&#xff08;Termin…...

山西+网站建设/招商外包公司

原文链接一个成功的响应式网站该怎么策划建站宝盒 2017-05-18 15:40:28 浏览55 评论0html5 网站建设 用户体验摘要&#xff1a; 一个成功的响应式网站需要具备公信力、营销力、传播力&#xff0c;要达到这样的要求网站策划就显得非常关键&#xff0c;网站策划是企业网站建设的重…...