java数据结构复习01
1.数组
package javaDataStruct.array01;
public class MyArray {
private int[] arr;
// 表示有效数据的长度
private int elementsSize;
public MyArray() {
// TODO Auto-generated constructor stub
arr = new int[50];
}
public MyArray(int maxSize) {
arr = new int[maxSize];
}
/**
* 添加数据
*/
public void insert(int value) {
arr[elementsSize] = value;
elementsSize++;
}
/**
* 打印数据
*/
public void printArray() {
System.out.print("[ ");
for (int i = 0; i < elementsSize; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("]");
}
/**
* 查找数据
*/
public int indexSearch(int value) {
int i;
for (i = 0; i < elementsSize; i++) {
if (value == arr[i]) {
break;
}
}
if (i == elementsSize) {
return -1;
} else {
return i;
}
}
/**
* 二分法查找数据 前提:数组有序
*/
public int binarySearch(int value) {
int middle;
int low = 0;
int high = elementsSize;
while (true) {
middle = (low + high) / 2;
if (arr[middle] == value)
return middle;
else if (low > high) {
return -1;
} else {
if (arr[middle] < value)
low = middle + 1;
else
high = middle - 1;
}
}
}
/**
* 查找数据,根据索引查找
*/
public int get(int index) {
if (index < 0 || index >= elementsSize) {
throw new ArrayIndexOutOfBoundsException();
} else {
return arr[index];
}
}
/**
* 删除数据
*/
public void delete(int index) {
if (index < 0 || index >= elementsSize) {
throw new ArrayIndexOutOfBoundsException();
} else {
for (int i = index; i < elementsSize; i++) {
arr[i] = arr[i + 1];
}
elementsSize--;
}
}
/**
* 更新数据
*/
public void update(int index, int value) {
if (index < 0 || index >= elementsSize) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index] = value;
}
}
}
package javaDataStruct.array01;
public class TestMyArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyArray array = new MyArray();
array.insert(13);
array.insert(17);
array.insert(34);
array.insert(55);
array.insert(90);
array.printArray();
System.out.println(array.indexSearch(34));
System.out.println(array.indexSearch(90));
System.out.println(array.indexSearch(190));
System.out.println(array.get(2));
// System.out.println(array.get(3));
array.delete(1);
array.printArray();
array.update(1, 33);
array.printArray();
System.out.println(array.binarySearch(55));
System.out.println(array.binarySearch(33));
System.out.println(array.binarySearch(13));
}
}

2.简单排序

2.1冒泡排序
https://www.cnblogs.com/jingmoxukong/p/4302718.html
假设要对一个大小为 N 的无序序列进行升序排序(即从小到大)。
(1) 每趟排序过程中需要通过比较找到第 i 个小的元素。
所以,我们需要一个外部循环,从数组首端(下标 0) 开始,一直扫描到倒数第二个元素(即下标 N - 2) ,剩下最后一个元素,必然为最大。
(2) 假设是第 i 趟排序,可知,前 i-1 个元素已经有序。现在要找第 i 个元素,只需从数组末端开始,扫描到第 i 个元素,将它们两两比较即可。
所以,需要一个内部循环,从数组末端开始(下标 N - 1),扫描到 (下标 i + 1)。
package javaDataStruct.sort02;
public class BubbleSort {
public static void sort(int[] array) {
int temp = 0;
// 需要遍历的次数
for (int i = 0; i < array.length - 1; i++) {
for (int j = array.length - 1; j > i; j--) { // 注意 array.length - 1
// 比较相邻的元素,如果前面的数大于后面的数,则交换
if (array[j] < array[j - 1]) {
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
}
}
2.2选择排序
https://www.cnblogs.com/jingmoxukong/p/4303289.html
(1)从待排序序列中,找到关键字最小的元素;
(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
package javaDataStruct.sort02;
public class SelectionSort {
public static void sort(int[] array) {
// 需要遍历获得最小值的次数
// 要注意一点,当要排序 N 个数,已经经过 N-1 次遍历后,已经是有序数列
int k = 0; // 保存最小数据的索引
int temp = 0;
for (int i = 0; i < array.length-1; i++) {
k = i;
for (int j = i+1; j < array.length; j++) {
if (array[j] < array[k])
k = j; // 更新最小数据的索引
}
// 将最小数据交换
temp = array[k];
array[k] = array[i];
array[i] = temp;
}
}
}
2.3插入排序
https://www.cnblogs.com/jingmoxukong/p/4303270.html
package javaDataStruct.sort02;
public class InsertSort {
public static void sort(int[] arr) {
int temp = 0;
int i, j;
// 第1个数肯定是有序的,从第2个数开始遍历,依次插入有序序列
for (i = 1; i < arr.length; i++) {
temp = arr[i]; // 取出第i个数,和前i-1个数比较后,插入合适位置
// 因为前i-1个数都是从小到大的有序序列,所以只要当前比较的数(list[j])比temp大,就把这个数后移一位
for (j = i - 1; j >= 0 && temp < arr[j]; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
}
}
package javaDataStruct.sort02;
import javaDataStruct.util.Tool;
public class TestSort {
public static void main(String[] args) {
int[] array = { 1, 2, 6, 8, 16, 3, 5 };
// BubbleSort.sort(array);
// SelectionSort.sort(array);
InsertSort.sort(array);
Tool.printArray(array);
}
}

2.4希尔排序
https://www.cnblogs.com/jingmoxukong/p/4303279.html
希尔(Shell)排序又称为缩小增量排序,它是一种插入排序。它是直接插入排序算法的一种威力加强版。
该方法因DL.Shell于1959年提出而得名。
希尔排序的基本思想是:
把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。
随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。
我们来通过演示图,更深入的理解一下这个过程。

在上面这幅图中:
初始时,有一个大小为 10 的无序序列。
在第一趟排序中,我们不妨设 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。
接下来,按照直接插入排序的方法对每个组进行排序。
在第二趟排序中,我们把上次的 gap 缩小一半,即 gap2 = gap1 / 2 = 2 (取整数)。这样每相隔距离为 2 的元素组成一组,可以分为 2 组。
按照直接插入排序的方法对每个组进行排序。
在第三趟排序中,再次把 gap 缩小一半,即gap3 = gap2 / 2 = 1。 这样相隔距离为 1 的元素组成一组,即只有一组。
按照直接插入排序的方法对每个组进行排序。此时,排序已经结束。
需要注意一下的是,图中有两个相等数值的元素 5 和 5 。我们可以清楚的看到,在排序过程中,两个元素位置交换了。
所以,希尔排序是不稳定的算法
public static void shellSort(int[] array) {
int gap = array.length;
while (gap > 0) {
int temp;
int j;
for (int i = 1; i < array.length; i++) {
temp = array[i];
for (j = i - gap; j >= 0 && temp < array[j]; j = j - gap) {
array[j + gap] = array[j];
}
array[j + gap] = temp;
}
gap = gap / 2;
}
}
2.5快速排序
https://www.cnblogs.com/jingmoxukong/p/4302891.html

public static int division(int[] list, int left, int right) {
// 以最左边的数(left)为基准
int base = list[left];
while (left < right) {
// 从序列右端开始,向左遍历,直到找到小于base的数
while (left < right && list[right] >= base)
right--;
// 找到了比base小的元素,将这个元素放到最左边的位置
list[left] = list[right];
// 从序列左端开始,向右遍历,直到找到大于base的数
while (left < right && list[left] <= base)
left++;
// 找到了比base大的元素,将这个元素放到最右边的位置
list[right] = list[left];
}
// 最后将base放到left位置。此时,left位置的左侧数值应该都比left小;
// 而left位置的右侧数值应该都比left大。
list[left] = base;
return left;
}
public static void quickSort(int[] list, int left, int right) {
// 左下标一定小于右下标,否则就越界了
if (left < right) {
// 对数组进行分割,取出下次分割的基准标号
int base = division(list, left, right);
// 对“基准标号“左侧的一组数值进行递归的切割,以至于将这些数值完整的排序
quickSort(list, left, base - 1);
// 对“基准标号“右侧的一组数值进行递归的切割,以至于将这些数值完整的排序
quickSort(list, base + 1, right);
}
}
2.6归并排序
归并排序是一种概念上最简单的排序算法,与快速排序一样,归并排序也是基于分治法的。归并排序将待排序的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程也就是两路归并。
package datastruct.t02sort;
import datastruct.Tookit;
public class MergeSort {
public static void mergeSort(int[] a, int left, int right) {
if (left >= right)
return;
int mid = (left + right) / 2;
mergeSort(a, left, mid);
mergeSort(a, mid + 1, right);
mergeArray(a, left, mid, right);//合并
}
// 两个排好序的子序列合并为一个子序列
public static void mergeArray(int[] a, int left, int mid, int right) {
int[] temp = new int[a.length];//辅助数组
int p1 = left, p2 = mid + 1, k = left;//p1、p2是检测指针,k是存放指针
while (p1 <= mid && p2 <= right) {
if (a[p1] < a[p2])
temp[k++] = a[p1++];
else
temp[k++] = a[p2++];
}
while (p1 <= mid) {//如果第一个序列未检测完,直接将后面所有元素加到合并的序列中
temp[k++] = a[p1++];
}
while (p2 <= right) {//同上
temp[k++] = a[p2++];
}
for (int i = left; i <= right; i++) {
a[i] = temp[i];
}
}
public static void main(String[] args) {
int[] a = { 1, 5, 3, 7, 4, 8, 10 };
System.out.println("原数组为:");
Tookit.print(a);
mergeSort(a, 0, a.length - 1);
System.out.println("排序之后的数组为");
Tookit.print(a);
}
}

2.7堆排序





heapify操作顺序




从构建好的堆进行排序
1.交换根结点和最后一个结点


2.取出最后一个结点

3.再次从根结点进行heapify


4.交换根结点和最后一个结点

5.取出最后一个结点

重复上述步骤。。。
package datastruct.t02sort;
import util.*;
public class HeapSort {
// 构建堆
public static void buildHeap(int[] tree, int n) {
int lastNode = n - 1;
int parent = (lastNode - 1) / 2;
int i;
for (i = parent; i >= 0; i--) {
heapify(tree, n, i);
}
}
/**
*
* @param tree
* @param n:结点数目
* @param i:当前的结点
*/
public static void heapify(int[] tree, int n, int i) {
if (i >= n)
return;
int c1 = 2 * i + 1;
int c2 = 2 * i + 2;
int max = i;
if (c1 < n && tree[c1] > tree[max]) {
max = c1;
}
if (c2 < n && tree[c2] > tree[max]) {
max = c2;
}
if (max != i) {
swap(tree, max, i);
heapify(tree, n, max);
}
}
// 交换元素
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 堆排序
public static void heapSort(int[] tree, int n) {
buildHeap(tree, n);
for (int i = n - 1; i >= 0; i--) {
swap(tree, i, 0);
heapify(tree, i, 0);
}
}
public static void main(String[] args) {
/*int[] tree = { 4, 10, 3, 5, 1, 2 };
int n = 6;
heapify(tree, n, 0);
Tool.printArray(tree);*/
/*int[] tree = { 2, 5, 3, 1, 10, 4 };
int n = 6;
buildHeap(tree, n);*/
int[] tree = { 23, 4, 5, 2, 1, 8, 24, 55 };
heapSort(tree, tree.length);
Tool.printArray(tree);
}
}
3.栈
package javaDataStruct.ch03_stack_and_queue;
import com.sun.javafx.geom.AreaOp.AddOp;
public class MyStack {
private int[] arr;
private int top;
public MyStack() {
// TODO Auto-generated constructor stub
arr = new int[10];
top = -1;
}
/**
* 带参数的构造方法
*/
public MyStack(int maxSize) {
arr = new int[maxSize];
top = -1;
}
/**
* 添加数据
*/
public void push(int value) {
arr[++top] = value;
}
/**
* 移除数据
*/
public int pop() {
return arr[top--];
}
/**
* 查看数据
*/
public int peek() {
return arr[top];
}
/**
* 是否为空
*/
public boolean isEmpty() {
return top == -1;
}
/**
* 判断是否满了
*/
public boolean isFull() {
return top == arr.length - 1;
}
}
package javaDataStruct.ch03_stack_and_queue;
public class TestMyStack {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(10);
myStack.push(12);
myStack.push(16);
System.out.println(myStack.isEmpty());
System.out.println(myStack.isFull());
System.out.println(myStack.peek());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
System.out.println(myStack.isEmpty());
}
}

4.队列
package javaDataStruct.ch03_stack_and_queue;
public class MyQueue {
private int[] arr;
private int elementsSize;
private int front;
private int tail;
public MyQueue() {
// TODO Auto-generated constructor stub
arr = new int[10];
elementsSize = 0;
front = 0;
tail = -1;
}
public MyQueue(int maxSize) {
// TODO Auto-generated constructor stub
arr = new int[maxSize];
elementsSize = 0;
front = 0;
tail = -1;
}
/**
* 从队尾插入数据
*/
public void insert(int value) {
arr[++tail] = value;
elementsSize++;
}
/**
* 从对头删除数据
*/
public int remove() {
elementsSize--;
return arr[front++];
}
/**
* 从对头查看数据
*/
public int peek() {
return arr[front];
}
/**
* 判断是否为空
*/
public boolean isEmpty() {
return elementsSize == 0;
}
/**
* 判断是否满了
*/
public boolean isFull() {
return elementsSize == arr.length;
}
}
package javaDataStruct.ch03_stack_and_queue;
public class TestMyQueue {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyQueue mq = new MyQueue();
mq.insert(1);
mq.insert(2);
mq.insert(3);
mq.insert(4);
System.out.println(mq.isEmpty());
System.out.println(mq.isFull());
System.out.println(mq.peek());
while (!mq.isEmpty()) {
System.out.print(mq.remove() + " ");
}
System.out.println();
}
}

5.链表
5.1普通单向链表
1.在头部插入一个节点

2.在头部删除一个节点

package cn.jxufe.ch04_link; /*
* 链结点,相当于是车厢
*/
public class Node {
public int data;
public Node next; public Node(int value) {
this.data = value;
} /**
* 显示方法
*/
public void display() {
System.out.print(data + " ");
}
}
package cn.jxufe.ch04_link; /**
* 链表相当于火车
*/
public class LinkList {
private Node first; public LinkList() {
first = null;
} /**
* 插入一个节点,在头部进行插入
*/
public void insertNode(int value) {
Node node = new Node(value);
if (first == null) {
first = node;
} else {
node.next = first;
first = node;
}
} /**
* 在头部进行删除
*/
public Node deleteFirst() {
Node temp = first;
first = temp.next;
return temp;
} /**
* 显示方法
*/
public void display() {
Node current = first;
while (current != null) {
current.display();
current = current.next;
}
System.out.println();
} /**
* 查找方法
*/
public Node find(int value) {
Node current = first;
while (current.data != value) {
if (current.next == null) {
return null;
}
current = current.next;
}
return current;
} /**
* 删除方法
*/ public Node delete(int value) {
Node current = first;
Node previous = first;
while (current.data != value) {
if (current.next == null) {
return null;
}
previous = current;
current = current.next;
}
if(current==first){
first = first.next;
}else {
previous.next = current.next;
}
return current; }
}
package cn.jxufe.ch04_link;
public class TestLinkList {
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.insertNode(34);
linkList.insertNode(23);
linkList.insertNode(12);
linkList.insertNode(0);
linkList.insertNode(-1);
linkList.display();
linkList.deleteFirst();
linkList.display();
Node node = linkList.find(23);
node.display();
System.out.println();
Node node1 = linkList.delete(0);
node1.display();
System.out.println();
linkList.display();
linkList.display();
}
}

5.2双端链表
1.在尾部插入一个节点

package cn.jxufe.ch05_first_last_link; import cn.jxufe.ch04_link.Node; /**
* 双端链表
*/
public class FirstLastLink {
private Node first;
private Node last; public FirstLastLink() {
first = null;
last = null;
} /**
* 插入一个节点,在头部进行插入
*/
public void insertNode(int value) {
Node node = new Node(value);
if (isEmpty()) {
last = node;
}
node.next = first;
first = node;
} /**
* 插入一个节点,从尾部插入
*/
public void insertLast(int value) {
Node node = new Node(value);
if (isEmpty()) {
first = node;
} else {
last.next = node;
}
last = node;
} /**
* 在头部进行删除
*/
public Node deleteFirst() {
Node temp = first;
if(first.next == null){
last = null;
}
first = temp.next;
return temp;
} /**
* 显示方法
*/
public void display() {
Node current = first;
while (current != null) {
current.display();
current = current.next;
}
System.out.println();
} /**
* 查找方法
*/
public Node find(int value) {
Node current = first;
while (current.data != value) {
if (current.next == null) {
return null;
}
current = current.next;
}
return current;
} /**
* 删除方法
*/ public Node delete(int value) {
Node current = first;
Node previous = first;
while (current.data != value) {
if (current.next == null) {
return null;
}
previous = current;
current = current.next;
}
if (current == first) {
first = first.next;
} else {
previous.next = current.next;
}
return current; } /**
* 判读是否为空
*/
public boolean isEmpty() {
return first == null;
}
}
package cn.jxufe.ch05_first_last_link;
public class TestFirstLastLink {
public static void main(String[] args) {
FirstLastLink fl = new FirstLastLink();
fl.insertNode(34);
fl.insertNode(22);
fl.insertNode(4);
fl.insertNode(56);
fl.display();
fl.deleteFirst();
fl.deleteFirst();
fl.display();
fl.insertLast(28);
fl.insertLast(90);
fl.display();
}
}

5.3双向链表
1.在头部插入一个节点

2.在尾部插入一个节点

3.从头部进行删除

package cn.jxufe.ch05_first_last_link; /**
* 双向链表
* 每个列表除了保存对下一个节点的引用,同时还保存对前一个节点的引用。
*/
public class DoubleLink {
private Node first;
private Node last; public DoubleLink() {
first = null;
last = null;
} /**
* 插入一个节点,在头部进行插入
* 首先对列表进行判断,如果为空,则设置尾结点为新添加的节点;如果不为空,则设置头节点的前一个节点为新添加的节点。
*/
public void insertFirst(int value) {
Node node = new Node(value);
if (isEmpty()) {
last = node;
} else {
first.prev = node;
}
node.next = first;
first = node;
} /**
* 插入一个节点,从尾部插入
* 如果为空,则直接设置头节点为新添加的节点;否则设置尾结点的后一个节点为新添加的节点,同时设置新添加的
* 节点的前一个节点为尾结点。
*/
public void insertLast(int value) {
Node node = new Node(value);
if (isEmpty()) {
first = node;
} else {
last.next = node;
node.prev = last; }
last = node;
} /**
* 在头部进行删除
*/
public Node deleteFirst() {
Node temp = first;
if (first.next == null) {
last = null;
} else {
first.next.prev = null;
}
first = temp.next;
return temp;
} /**
* 从尾部进行删除
* 如果头节点后没有其他节点,则设置尾节点为null;否则设置尾节点的前一个节点的next为null。设置为节点为其前一个节点。
*/
public Node deleteLast() {
Node temp = last;
if (first.next == null) {
last = null;
} else {
last.prev.next = null;
}
last = last.prev;
return last;
} /**
* 显示方法
*/
public void display() {
Node current = first;
while (current != null) {
current.display();
current = current.next;
}
System.out.println();
} /**
* 查找方法
*/
public Node find(int value) {
Node current = first;
while (current.data != value) {
if (current.next == null) {
return null;
}
current = current.next;
}
return current;
} /**
* 删除方法
*/ public Node delete(int value) {
Node current = first;
while (current.data != value) {
if (current.next == null) {
return null;
}
current = current.next;
}
if (current == first) {
first = first.next;
} else {
current.prev.next = current.next;
}
return current; } /**
* 判读是否为空
*/
public boolean isEmpty() {
return first == null;
}
}
package cn.jxufe.ch05_first_last_link;
public class TestDoubleLink {
public static void main(String[] args) {
DoubleLink dl = new DoubleLink();
dl.insertLast(45);
dl.insertLast(23);
dl.insertLast(-1);
dl.insertLast(56);
dl.display();
dl.insertFirst(21);
dl.insertFirst(1);
dl.insertFirst(27);
dl.display();
dl.deleteFirst();
dl.display();
dl.deleteLast();
dl.display();
dl.delete(21);
dl.display();
}
}

java数据结构复习01的更多相关文章
- java数据结构复习02
1.递归问题 1.1汉诺塔问题(递归) 问题描述三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上.移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘.移动 ...
- 20180826(01)-Java数据结构
Java 数据结构 Java工具包提供了强大的数据结构.在Java中的数据结构主要包括以下几种接口和类: 枚举 (Enumeration) 位集合(BitSet) 向量 (Vector) 栈 (Sta ...
- Java 集合系列 01 总体框架
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java数据结构和算法 - 二叉树
前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...
- Java数据结构和算法 - 哈希表
Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...
- Java数据结构和算法(一)散列表
Java数据结构和算法(一)散列表 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 散列表(Hash table) 也叫哈希表 ...
- Java数据结构和算法(二)顺序存储的树结构
Java数据结构和算法(二)顺序存储的树结构 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 二叉树也可以用数组存储,可以和完 ...
- Java数据结构和算法(五)--希尔排序和快速排序
在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分 ...
- Java数据结构和算法(三)--三大排序--冒泡、选择、插入排序
三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的 ...
随机推荐
- shell 并发进程的例子
linux shell 实现后台多进程运行的,开始和终止 原创 2014年11月21日 12:04:51 9953 linux shell 实现后台开始,和停止多进程 知识点: xxxxcmd.sh ...
- Emacs Python 自动补全之 eglot
eglot 个人水平有限,自己的测试难免有不足甚至错误的地方.欢迎各位emacser 能前来留言交流. 首先eglot 是一个lsp-mode的集成环境.作者说这不仅仅是一个lsp工具.但是我从其说明 ...
- 第四章 SpringCloud之Eureka-Client实现服务(Jpa,H2)
1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- PyQt GUI--信号与槽
目录 目录 前言 系统软件 GUI的主循环 信号与槽 信号的应用 使用控件类的内建信号 自定义信号 带参数的信号 槽的应用 创建槽 信号和槽的连接 最后 前言 PyQt中的信号和槽,就是一个触发和执行 ...
- Wireshark 学习笔记 Lebal:Research
学习Wireshark主要是为了契合我最近做的线性激光雷达项目,主要用于抓取数据包 首先是三本书比较值得一看,第一本是清华大学出版社的,侧重教学,第二三两本是人民邮电出版社的,其中第二本是许多课程的指 ...
- Dojo入门:dojo中的事件处理
JS为DOM添加事件 在原生的环境下,为DOM添加事件处理函数有多种方法: <input type="button" name="btn" value ...
- 安装kafka 记录
sudo ./zoo /zoo /bin/zkServer.sh start sudo ./kafkacluster/kafka1/bin/kafka-server-start.sh ./kafkac ...
- #Java学习之路——基础阶段二(第十二篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- c/c++ 链表实现
//链表的基本用法代码实现/************************************************************************/ /* Created: ...
- Buffer对象与JSON对象相互转换
> buffer=new Buffer('换汤不换药');<Buffer e6 88 91 e7 88 b1 e4 bd a0 ef bc 8c e7 89 a9 e7 90 86> ...