重庆专业网站建设/吉安seo招聘

重庆专业网站建设,吉安seo招聘,众车网是哪家公司网站,怎么样建设一个网站目录 一. LinkedList 基本介绍 二. LinkedList 中的法及其应用 1. 添加元素 (1) add() (2) addAll() (3) addFirst() (4) addLast() 2. 删除元素 (1) remove() (2) removeAll() (3) removeFirst() (4) removeLast() 3. 遍历元素 (1) for 循环遍历 (2) for - each …

目录

一. LinkedList 基本介绍

 二. LinkedList 中的法及其应用

1. 添加元素

(1) add()

(2) addAll()

(3) addFirst()

(4) addLast()

2. 删除元素

(1) remove()

(2) removeAll()

(3) removeFirst()

(4) removeLast()

3. 遍历元素

(1) for 循环遍历

(2) for - each 遍历

(3) 迭代器遍历

(4) 列表迭代器遍历

4. 判断

(1) cotains()

(2) containsAll()

(3) isEmpty()

三. 模拟实现 LinkedList

1. 使用单向链表模拟实现

2. 使用双向链表模拟实现


一. LinkedList 基本介绍

(1)LinkedList (链表) 继承于 List接口, 是Java集合框架的一部分.

(2) LinkedList 用于存放可重复, 有序的元素.

(3) LinkedList 底层使用双向链表来实现.

(4) LinkedList 的特点是 插入/删除 的速度快 (因为可以直接通过下标查找), 查找 元素的速度慢(因为需要先遍历链表找到对应元素).

 二. LinkedList 中的法及其应用

通过查看文档我们可以看到, LinkedList 类主要有以上几种方法. 我把其中比较重要的几个方法勾选了出来, 这些我们要重点熟悉掌握. 大家也可以自行翻阅文档进行学习. 

首先我们要在list里存放对象. 假设我们要存放Student类型的对象.

首先定义学生类:

public class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object obj) {if (this == obj) {  //1. 如果this和obj指向同一个对象, 则返回true;return true;}if (obj instanceof Student) {  //2. 如果this和obj指向不同对象, 而且obj是Student类型的if (this.age == ((Student) obj).getAge() && this.name == ((Student) obj).getName()) {return true;}return false;}return false;}
}

1. 添加元素

(1) add()

add() 方法, 有两个版本: 版本一有一个参数, 版本二有两个参数. 

[1] add(E e)  将指定元素添加到末尾

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);}
}

 

[2] add(int index, E element)  将指定元素插入指定位置.

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);Student s4 = new Student("Jack",45);linkedList.add(1,s4);System.out.println(linkedList);}
}

(2) addAll()

addAll() 方法的基本作用是将一个列表添加到另一个列表中去. 与add() 类似, addAll() 方法也有两个版本:

[1] addAll(Collection e) 表示将另一列表添加到当前列表之后.

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList); // 打印linkedListStudent s4 = new Student("Jack",45);Student s5 = new Student("Bob", 55);Student s6 = new Student("Molly",31);LinkedList<Student> linkedList1 = new LinkedList<>();linkedList1.add(s4);linkedList1.add(s5);linkedList1.add(s6);System.out.println(linkedList1); // 打印linkedList1linkedList.addAll(linkedList1);System.out.println(linkedList); // 打印合并之后的linkedList}
}

 [2] addAll(intindex, Collection e) 表示在指定位置插入另一列表.

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);Student s4 = new Student("Jack",45);Student s5 = new Student("Bob", 55);Student s6 = new Student("Molly",31);LinkedList<Student> linkedList1 = new LinkedList<>();linkedList1.add(s4);linkedList1.add(s5);linkedList1.add(s6);System.out.println(linkedList1);linkedList.addAll(1,linkedList1);System.out.println(linkedList);}
}

(3) addFirst()

头插. 即在链表的第一个节点之前插入

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);Student s4 = new Student("Jack",45);linkedList.addFirst(s4);System.out.println(linkedList);}
}

 

(4) addLast()

尾插. 即在链表的最后一个节点之后插入

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);Student s4 = new Student("Jack",45);linkedList.addLast(s4);System.out.println(linkedList);}
}

 

 

2. 删除元素

(1) remove()

remove() 方法, 参数可以传递下标, 也可以传递对象的引用. 作用都是把指定节点删除掉. 代码演示如下:

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);linkedList.remove(0); // 传递下标删除元素System.out.println(linkedList);linkedList.remove(s2); // 传递对象删除元素System.out.println(linkedList);}
}

(2) removeAll()

与add()和addAll()的关系类似, remove()方法是删除单个元素, removeAll()方法是从一个列表里删除另一个列表中的所有元素.

因为我们在Student里重写了equals()方法, 所以只要两个对象的name和age属性一样, 那么就认为这两个对象是相同的.

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);LinkedList<Student> linkedList1 = new LinkedList<>();linkedList1.add(s1);linkedList1.add(s2);System.out.println(linkedList1);linkedList.removeAll(linkedList1);System.out.println(linkedList);}
}

(3) removeFirst()

删除并返回链表第一个元素.

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);linkedList.removeFirst(); System.out.println(linkedList);}
}

 

注意, 上面代码中的 removeFirst() 有返回值, 但是我们没有接收. 

(4) removeLast()

删除并返回链表最后一个元素.

import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList);linkedList.removeLast();System.out.println(linkedList);}
}

 

3. 遍历元素

(1) for 循环遍历
import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);for (int i = 0; i < linkedList.size(); i++) {System.out.println(linkedList.get(i));}}
}

(2) for - each 遍历
import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);for (Student stu: linkedList) {System.out.println(stu);}}
}

(3) 迭代器遍历
import java.util.Iterator;
import java.util.LinkedList;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);Iterator<Student> iterator = linkedList.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

(4) 列表迭代器遍历
  • 正序遍历:
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);ListIterator<Student> iterator = linkedList.listIterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

  • 逆序遍历: 
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);ListIterator<Student> iterator = linkedList.listIterator(linkedList.size()); // 相当于把迭代器插入到 size() 位置的前面. 从这里开始遍历while (iterator.hasPrevious()) {System.out.println(iterator.previous());}}
}

[注]: 这里我们需要注意一点:  给 listIterator() 传参数 就表示将迭代器插入到index位置的前面

 所以这里给listIterator() 传了一个arrayList.size(), 就相当于把迭代器插入到了 size() 位置的前面

4. 判断

(1) cotains()
public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList.contains(new Student("吴彦祖", 26)));System.out.println(linkedList.contains(new Student("周润发", 50)));}
}

(2) containsAll()
public class demo1 {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);LinkedList<Student> linkedList1= new LinkedList<>();linkedList1.add(s1);linkedList1.add(s2);System.out.println(linkedList.containsAll(linkedList1));}
}

(3) isEmpty()

判断当前顺序列表是否为空.

public class demo {public static void main(String[] args) {Student s1 = new Student("刘德华",22);Student s2 = new Student("梁朝伟",24);Student s3 = new Student("吴彦祖",26);LinkedList<Student> linkedList = new LinkedList<>();linkedList.add(s1);linkedList.add(s2);linkedList.add(s3);System.out.println(linkedList.isEmpty());linkedList.clear();System.out.println(linkedList.isEmpty());}
}

三. 模拟实现 LinkedList

我们前面说, LinkedList 是基于双向链表实现的. 那么单向链表可不可以实现LinkedList呢? --> 同样是可以的. 我们分别用 单向链表双向链表 实现一次LInkedList~

为了实现起来简单, 我们自己实现LinkedList只能存放 int 类型的元素.

1. 使用单向链表模拟实现

  • 模拟链表代码:
public class MyLinkedList {class ListNode {public int val;  //值域public ListNode next; //指针域 (初值为null)public ListNode(int val) {this.val = val;}}ListNode head; //头指针public int size() {ListNode p = head;int count = 0;while (p != null) {count ++;p = p.next;}return count;}public void addLast(int val) {  //模拟实现addLast (尾插)ListNode newNode = new ListNode(val);if (head == null) {head = newNode;} else{ListNode p = head;while (p.next != null) {  //找尾结点p = p.next;}p.next = newNode;}}public boolean addFirst(int val) {  //模拟实现addFirst (头插)if (head == null) {return false;}ListNode newNode = new ListNode(val);newNode.next = head;head = newNode;return true;}public boolean addIndex(int index, int val) {  //模拟实现addIndex (在指定位置插入)if (index < 0 || index > size()) {System.out.println("输入的下标有误, 请检查");return false;}if (head == null) {return false;}ListNode newNode = new ListNode(val);// 找到index位置的前一个ListNode TargetPreviousNode = head;int stepCount = index-1;while (stepCount !=0) {TargetPreviousNode = TargetPreviousNode.next;stepCount--;}ListNode TargetNode = TargetPreviousNode.next;//添加节点TargetPreviousNode.next = newNode;newNode.next = TargetNode;return true;}public boolean removeLast() { //模拟实现removeLast (尾删)// 判空if (head == null) {return false;}// 找到尾结点的前一个节点ListNode p = head;while (p.next.next != null) {p = p.next;}p.next = null; // 删除尾结点return true;}public boolean removeFirst() {  //模拟实现removeLast (头删)//判空if (head == null) {return false;}//ListNode p = head.next; //p指向头结点的下一个结点.head.next = null;head = p;return true;}public boolean removeIndex(int index) {  //模拟实现removeIndex (删除指定位置的元素)if (head == null) {return false;}ListNode TargetPreviousNode = head;int stepCount = index-1;while (stepCount != 0) { //找到目标节点的前一个节点TargetPreviousNode = TargetPreviousNode.next;}ListNode TargetNode = TargetPreviousNode.next;// 删除目标节点TargetPreviousNode.next = TargetNode.next;TargetNode.next = null; // 给要删除节点的next域置空.return true;}public boolean removeKey(int data) {  //模拟实现removeKey (删除指定定值的元素)if (head == null) {return false;}int flag = 0;ListNode TargetPreviousNode = head;while (TargetPreviousNode.next != null) {if (TargetPreviousNode.next.val == data) {  //定位要删除节点的前一个节点ListNode TargetNode  = TargetPreviousNode.next;TargetPreviousNode.next = TargetNode.next;TargetNode.next = null;flag = 1;}TargetPreviousNode = TargetPreviousNode.next;if (TargetPreviousNode != null) {continue;} else {break;}}if (flag == 1) {  //删除成功return true;}return false;  //没有 val == data 的结点}public boolean contains(int val) {  //模拟实现contains (是否包含某一元素)ListNode p = head;while (p != null) {if (p.val == val) {return true;}p = p.next;}return false;}public boolean isEmpty() {  //判断当前链表是否为空if(head == null) {return true;}return false;}public void clear() {  //清空链表head = null;}@Overridepublic String toString() {String str = "";ListNode p = head;while(p != null) {if (p == head){str += "[";str += head.val;str += ",";p = p.next;continue;}if (p.next == null) {str += p.val;str += "]";p = p.next;continue;}str += p.val;str += ",";p = p.next;}return str;}
}
  •  测试函数代码:
public class test {public static void main(String[] args) {MyLinkedList myLinkedList = new MyLinkedList();myLinkedList.addLast(1);myLinkedList.addLast(2);myLinkedList.addLast(3);myLinkedList.addLast(4);myLinkedList.addLast(5);myLinkedList.addLast(3);myLinkedList.addLast(3);System.out.println(myLinkedList);myLinkedList.addFirst(99);System.out.println(myLinkedList);myLinkedList.addIndex(2,88);System.out.println(myLinkedList);myLinkedList.removeLast();System.out.println(myLinkedList);myLinkedList.removeFirst();System.out.println(myLinkedList);myLinkedList.removeIndex(1);System.out.println(myLinkedList);myLinkedList.removeKey(3);System.out.println(myLinkedList);System.out.println(myLinkedList.contains(5));System.out.println(myLinkedList.isEmpty());myLinkedList.clear();System.out.println(myLinkedList.isEmpty());}
}

 

通过运行结果我们可以看到, 我们用单链表模拟实现的LInkedList是没有任何问题的. 

 

2. 使用双向链表模拟实现

  • 模拟链表代码:

public class MyTwoWayLinkedList {class ListNode {public int val;public ListNode next;  //next域, 存放后一个节点的地址public ListNode prev;  //prev域, 存放前一个节点的地址public ListNode(int val) {this.val = val;}}ListNode head; //头指针ListNode rear; //尾指针public void addLast(int val) {  //尾插ListNode newNode = new ListNode(val);if (head == null && rear == null) {head = rear = newNode;}rear.next = newNode;newNode.prev = rear;rear = newNode;}public void addFirst(int val) {  //头插ListNode newNode = new ListNode(val);if (head == null && rear == null) {head = rear = newNode;return;}newNode.next = head;head.prev = newNode;head = newNode;}public void addIndex(int index, int val) {  //插入到指定位置ListNode newNode  = new ListNode(val);if (head == null && rear == null && index == 0) {head = rear = newNode;return;}ListNode TargetNode = head;int stepCount = index;while (stepCount != 0) {TargetNode = TargetNode.next;stepCount--;}newNode.next = TargetNode;newNode.prev = TargetNode.prev;TargetNode.prev.next = newNode;TargetNode.prev = newNode;}public void removeLast() {  //尾删ListNode p = rear.prev;rear.prev.next = null;rear.prev = null;rear = p;}public void removeFirst() {  //头删ListNode p = head.next;head.next.prev = null;head.next = null;head = p;}public void removeIndex(int index) {  //删除指定位置的元素ListNode TargetNode = head;int stepCount = index;while(stepCount != 0) {TargetNode = TargetNode.next;stepCount--;}TargetNode.next.prev = TargetNode.prev;TargetNode.prev.next = TargetNode.next;TargetNode.next = null;TargetNode.prev = null;}public boolean removeKey(int data) {  //删除指定值的元素ListNode TargetNode = head;int flag = 0;while (TargetNode != null) {if (TargetNode.val == data) {if (TargetNode == head) {removeFirst();flag = 1;TargetNode = TargetNode.next;continue;}if (TargetNode == rear) {removeLast();flag = 1;TargetNode = TargetNode.next;continue;}ListNode TargetNextNode =TargetNode.next;TargetNode.next.prev = TargetNode.prev;TargetNode.prev.next = TargetNode.next;TargetNode = TargetNextNode;flag = 1;}TargetNode = TargetNode.next;}if (flag == 1) {  //删除成功return true;}else {System.out.println("不存在该值");return false;}}public boolean contains(int val) {ListNode p = head;while (p != null) {if (p.val == val) {return true;}p = p.next;}return false;};public boolean isEmpty() {if (head == null && rear == null) {return true;}return false;};public void clear() {head = rear = null;};@Overridepublic String toString() {String str = "";ListNode p = head;while(p != null) {if (p == head){str += "[";str += head.val;str += ",";p = p.next;continue;}if (p == rear) {str += rear.val;str += "]";p = p.next;continue;}str += p.val;str += ",";p = p.next;}return str;}
}
  • 测试函数代码:
public class test {public static void main(String[] args) {MyTwoWayLinkedList myTwoWayLinkedList = new MyTwoWayLinkedList();myTwoWayLinkedList.addLast(1);myTwoWayLinkedList.addLast(2);myTwoWayLinkedList.addLast(3);myTwoWayLinkedList.addLast(4);myTwoWayLinkedList.addLast(5);myTwoWayLinkedList.addLast(3);myTwoWayLinkedList.addLast(3);System.out.println(myTwoWayLinkedList);myTwoWayLinkedList.addFirst(99);System.out.println(myTwoWayLinkedList);myTwoWayLinkedList.addIndex(1,88);System.out.println(myTwoWayLinkedList);myTwoWayLinkedList.removeLast();System.out.println(myTwoWayLinkedList);myTwoWayLinkedList.removeFirst();System.out.println(myTwoWayLinkedList);myTwoWayLinkedList.removeIndex(1);System.out.println(myTwoWayLinkedList);myTwoWayLinkedList.removeKey(3);System.out.println(myTwoWayLinkedList);System.out.println(myTwoWayLinkedList.contains(88));System.out.println(myTwoWayLinkedList.isEmpty());myTwoWayLinkedList.clear();System.out.println(myTwoWayLinkedList.isEmpty());}
}

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

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

相关文章

复习打卡大数据篇——Hadoop MapReduce

目录 1. MapReduce基本介绍 2. MapReduce原理 1. MapReduce基本介绍 什么是MapReduce MapReduce是一个分布式运算程序的编程框架&#xff0c;核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在Hadoop集群上。 MapRed…

Java基础知识(四) -- 面向对象(下)

1.类变量和类方法 1.1 类变量背景 有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩? 思路分析: 核心在于如何让变量count被所有对象共享 public class Child {private String name;// 定义静态变量(所有Child对象共享)public static int count 0;p…

SpringBoot中使用TraceId进行日志追踪

**查询日志的痛点&#xff1a;**项目中每当我们查询日志的时候都是看前端请求什么接口&#xff0c;根据一些关键字进入服务器查询日志中是否有这个关键字&#xff0c;然而这个关键字在日志里面并不是唯一的&#xff0c;所以要生成一个唯一的标识&#xff0c;每一次请求都是唯一…

C++类与对象上

1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题 例如洗衣服&#xff1a; C是基于面向对象的&#xff0c;关注的是对象&#xff0c;讲一件事拆分成不同的对象&#xff0c;靠对…

向量组学习

向量组的秩及其线性组合 线性相关性 先看a1,a2 如果这两个向量不对应成比例的话,那必然内部不可能存在多余的向量,也就是无关. 主元所在的列都是独立向量 ,最大无关组就是b1,b2,b4,但这个是初等行变换后的,题目要的是A的,与之对应的就是a1,a2,a4 方程组解的结构

使用VS Code开发ThinkPHP项目

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 ThinkPHP 8开发环境安装-CSDN博客 安装ThinkPHP项目的IDE 常用的集成开发环境&#xff08;IDE&#xff09;包括P…

软件耦合类型及相关说明

文字叙述太麻烦了&#xff0c;此内容个人觉得上图可能大家更容易接受。 ——话不多说&#xff0c;直接上图。

TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化

相关阅读 TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.2014.3001.5482 时序单元的状态 未映射的时序单元(Unmapped Sequential Cell) 在Design Compiler读取了一个RTL设计后&#xff0c;Design Compiler内置的HDL Compiler工…

8086汇编(16位汇编)学习笔记06.串操作、流程转移指令

8086汇编(16位汇编)学习笔记06.串操作、流程转移指令-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 串操作 源操作数使用si&#xff0c;默认段为DS&#xff0c;可段超越 目的操作数使用di&#xff0c;默认段为ES&#xff0c;不可段超越 串方向 串方向由D…

TCP off-path exploits(又一个弄巧成拙的例子)

承接前面几篇文章的观点&#xff0c;本文用一个安全攻击的例子说明为了解决一个伤害很低的低概率问题&#xff0c;会引入多么大的麻烦&#xff0c;这次是可怕的被攻击 (⊙o⊙)。 TCP 端口号只有 16bit&#xff0c;序列号只有 32bit&#xff0c;这意味着在强大攻击算力面前&…

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

本篇文章将介绍一个新的改进机制——SMFA&#xff08;自调制特征聚合模块&#xff09;&#xff0c;并阐述如何将其应用于YOLOv11中&#xff0c;显著提升模型性能。随着深度学习在计算机视觉中的不断进展&#xff0c;目标检测任务也在快速发展。YOLO系列模型&#xff08;You Onl…

大表:适用于结构化数据的分布式存储系统

大家觉得有意义和帮助记得及时关注和点赞!!! 译者序摘要1 引言2 数据模型 2.1 行&#xff08;Row&#xff09;2.2 Column Families&#xff08;列族&#xff09; 2.2.1 设计2.2.2 column key 的格式&#xff1a;family:qualifier2.2.3 访问控制和磁盘/内存记账&#xff08;acco…

【AIGC-ChatGPT副业提示词指令 - 动图】魔法咖啡馆:一个融合创意与治愈的互动体验设计

引言 在当今快节奏的生活中&#xff0c;咖啡早已不仅仅是提神醒脑的饮品&#xff0c;更成为了一种情感寄托和生活态度的表达。本文将介绍一个独特的"魔法咖啡馆"互动体验设计&#xff0c;通过将咖啡与情感、魔法元素相结合&#xff0c;创造出一个充满想象力和治愈感…

xterm遇到的问题及解决方案

xterm遇到的问题及解决方案 /r插入终端导致的之后插入的数据覆盖了改行头部的数据 问题说明 如图所示&#xff0c;当在一行输入的候&#xff0c;输入的l插入到了改行的头部。 查看ws返回数据 可见ws返回的信息存在\r字符&#xff0c;在xterm.js中\r是回车字符的意思&…

Chrome被360导航篡改了怎么改回来?

一、Chrome被360导航篡改了怎么改回来&#xff1f; 查看是否被360主页锁定&#xff0c;地址栏输入chrome://version&#xff0c;看命令行end后面&#xff08;蓝色部分&#xff09;&#xff0c;是否有https://hao.360.com/?srclm&lsn31c42a959f 修改步骤 第一步&#xff1a…

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

描述&#xff1a;在blender中合并的模型导出为glb&#xff0c;在threejs中导入仍显示多个mesh&#xff0c;并不是统一的整体&#xff0c;导致需要整体高亮或者使用DragControls等不能统一控制。 原因&#xff1a;模型有多个材质&#xff0c;在blender中合并的时候&#xff0c;…

C语言----输入输出

目录 输入输出 1.按格式输入输出 2. 按格式输入 3. 按字符输入输出 输入&#xff1a; 输出&#xff1a; 垃圾字符回收 1. 通过空格回收 2. %*c 3.getchar&#xff08;&#xff09; 强制类型转换 输入输出 分为按格式输入输出和按字符输入输出 1.按格式输入输出 通…

计算机网络 (10)网络层

前言 计算机网络中的网络层&#xff08;Network Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…

WebRTC服务质量(11)- Pacer机制(03) IntervalBudget

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

一维、线性卡尔曼滤波的例程(MATLAB)

这段 MATLAB 代码实现了一维线性卡尔曼滤波器的基本功能&#xff0c;用于估计在存在噪声的情况下目标状态的真实值 文章目录 一维线性卡尔曼滤波代码运行代码介绍1. **初始化部分**2. **数据生成**3. **卡尔曼滤波器实现**4. **结果可视化**5. **统计输出** 源代码 总结 一维线…