欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java數(shù)據(jù)結(jié)構(gòu)之ArrayList與順序表詳解

 更新時(shí)間:2025年05月01日 10:55:54   作者:學(xué)無止盡5  
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之ArrayList與順序表,在Java中,ArrayList是一個(gè)可動(dòng)態(tài)調(diào)整大小的數(shù)組實(shí)現(xiàn),它屬于java.util包,ArrayList提供了一種方便的、基于索引的方式來存儲(chǔ)和訪問對(duì)象,需要的朋友可以參考下

前言

在 Java編程的廣袤世界里,數(shù)據(jù)結(jié)構(gòu)猶如精巧的建筑藍(lán)圖,決定著程序在數(shù)據(jù)處理與存儲(chǔ)時(shí)的效率、靈活性以及可擴(kuò)展性。其中,ArrayList和順序表作為線性數(shù)據(jù)結(jié)構(gòu)的典型代表,猶如兩顆璀璨的明星,在眾多數(shù)據(jù)處理場(chǎng)景中熠熠生輝。

順序表,以其簡(jiǎn)潔而直觀的連續(xù)內(nèi)存存儲(chǔ)方式,為數(shù)據(jù)的快速隨機(jī)訪問提供了可能。它猶如一位嚴(yán)謹(jǐn)?shù)墓芗?,將?shù)據(jù)元素有條不紊地排列在連續(xù)的內(nèi)存空間中,使得我們能夠通過精確的索引迅速定位到所需的數(shù)據(jù),就像在一本精心編排索引的書籍中快速找到特定章節(jié)一樣高效。這種特性在一些對(duì)數(shù)據(jù)訪問速度有嚴(yán)格要求且數(shù)據(jù)量相對(duì)固定或可預(yù)知的場(chǎng)景中,展現(xiàn)出了無與倫比的優(yōu)勢(shì)。 而 ArrayList,則是 Java 集合框架中備受矚目的一員。它基于數(shù)組實(shí)現(xiàn),卻又巧妙地融入了動(dòng)態(tài)擴(kuò)容機(jī)制,如同一位富有彈性的藝術(shù)家,能夠根據(jù)創(chuàng)作需求靈活調(diào)整畫布的大小。這種動(dòng)態(tài)性使得 ArrayList在應(yīng)對(duì)數(shù)據(jù)量不確定、頻繁增刪元素的復(fù)雜情況時(shí)游刃有余。它為開發(fā)者提供了豐富便捷的方法庫,極大地簡(jiǎn)化了數(shù)據(jù)操作的流程,仿佛一把瑞士軍刀,在各種數(shù)據(jù)處理任務(wù)中都能發(fā)揮出色的作用。 在實(shí)際的編程旅程中,深入理解 ArrayList 和順序表的特性、性能表現(xiàn)以及適用場(chǎng)景,就如同掌握了兩門精湛的技藝。無論是構(gòu)建高效的數(shù)據(jù)庫管理系統(tǒng)、開發(fā)復(fù)雜的算法,還是打造用戶友好的圖形界面應(yīng)用,都離不開對(duì)這兩種數(shù)據(jù)結(jié)構(gòu)的精準(zhǔn)運(yùn)用。本博客將深入剖析 Java ArrayList 和順序表,從原理到實(shí)現(xiàn),從性能對(duì)比到應(yīng)用場(chǎng)景分析,為你揭開它們神秘的面紗,引領(lǐng)你在 Java編程的數(shù)據(jù)結(jié)構(gòu)之路上穩(wěn)步前行,幫助你在面對(duì)各種數(shù)據(jù)處理挑戰(zhàn)時(shí)做出明智而高效的抉擇。

一、線性表

線性表(linear list)是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、隊(duì)列…

線性表在邏輯上是線性結(jié)構(gòu),也就說是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上存儲(chǔ)時(shí),通常以數(shù)組和鏈?zhǔn)浇Y(jié)構(gòu)的形式存儲(chǔ)。

在 Java 編程領(lǐng)域,線性表是一種極為基礎(chǔ)且關(guān)鍵的數(shù)據(jù)結(jié)構(gòu),它猶如大廈的基石,支撐起眾多復(fù)雜算法與程序功能的實(shí)現(xiàn)。線性表,從直觀上理解,是由一系列具有相同類型的數(shù)據(jù)元素按照特定的順序依次排列而成的集合,其元素之間存在著一對(duì)一的線性關(guān)系。

1.1線性表的基本特性

(一)有限性

線性表中的元素?cái)?shù)量是有限的。無論是空表(不包含任何元素),還是包含大量元素的表,其元素個(gè)數(shù)總能確定。例如,一個(gè)班級(jí)的學(xué)生名單,無論班級(jí)規(guī)模大小,學(xué)生人數(shù)總歸是可以明確統(tǒng)計(jì)的。

(二)有序性

元素在表中的排列具有確定的順序。每個(gè)元素都有其特定的位置,除了第一個(gè)元素?zé)o前驅(qū),最后一個(gè)元素?zé)o后繼外,其他元素都有且僅有一個(gè)直接前驅(qū)和一個(gè)直接后繼。就像電影院里的座位號(hào),每個(gè)座位都有其固定的前后順序。

(三)同一性

表中的所有元素都屬于同一數(shù)據(jù)類型。這一特性使得對(duì)線性表的操作能夠具有一致性和規(guī)范性。例如,一個(gè)存儲(chǔ)整數(shù)的線性表,其中所有元素都為整型,這樣在進(jìn)行數(shù)學(xué)運(yùn)算或數(shù)據(jù)比較等操作時(shí)就可以按照統(tǒng)一的整型規(guī)則進(jìn)行。

1.2線性表在Java中的常見實(shí)現(xiàn)方式

存儲(chǔ)結(jié)構(gòu)

順序表利用數(shù)組來存儲(chǔ)線性表中的元素。在 Java 中,可以聲明一個(gè)數(shù)組來容納這些元素,例如 Object[] data(或指定具體類型如 int[] data 等)。數(shù)組在內(nèi)存中是連續(xù)分配空間的,這使得順序表在隨機(jī)訪問元素時(shí)具有極高的效率。通過元素的索引,可以直接計(jì)算出其在內(nèi)存中的存儲(chǔ)地址,從而快速獲取到該元素,時(shí)間復(fù)雜度為 O(1)。

操作實(shí)現(xiàn)

插入操作:當(dāng)向順序表中插入一個(gè)元素時(shí),如果插入位置不是在表尾,需要將插入位置之后的所有元素依次向后移動(dòng)一位,為新元素騰出空間,然后再將新元素放入指定位置。這種移動(dòng)操作在元素?cái)?shù)量較多時(shí)可能會(huì)耗費(fèi)較多時(shí)間,平均時(shí)間復(fù)雜度為O(n) ,其中 為線性表的長度。例如,在一個(gè)長度為 100 的順序表中,如果要在第 50 個(gè)位置插入一個(gè)元素,就需要將第 50 個(gè)到第 100 個(gè)元素向后移動(dòng)一位。

刪除操作:類似地,刪除操作如果不是刪除表尾元素,需要將刪除位置之后的元素依次向前移動(dòng)一位,以填補(bǔ)刪除元素后留下的空位。其平均時(shí)間復(fù)雜度也為O(n) 。比如刪除一個(gè)長度為 80 的順序表中的第 30 個(gè)元素,就需要將第 31 個(gè)到第 80 個(gè)元素向前移動(dòng)一位。

查詢操作:由于可以直接通過索引訪問數(shù)組元素,所以查詢指定位置元素的時(shí)間復(fù)雜度為O(1) 。而查詢某個(gè)特定值的元素時(shí),可能需要遍歷整個(gè)順序表,在最壞情況下時(shí)間復(fù)雜度為O(n) 。例如,在一個(gè)存儲(chǔ)學(xué)生成績(jī)的順序表中,如果要查找成績(jī)?yōu)?90 分的學(xué)生,可能需要逐個(gè)比較所有學(xué)生的成績(jī)。

二、順序表

順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲(chǔ)。在數(shù)組上完成 數(shù)據(jù)的增刪查改。

2.1定義一個(gè)類來表示順序表

class ArrayList<E> {
    // 存儲(chǔ)數(shù)據(jù)的數(shù)組
    private E[] data;
    // 記錄當(dāng)前順序表中元素的個(gè)數(shù)
    private int size;
    // 構(gòu)造函數(shù),初始化數(shù)組容量
    public ArrayList(int capacity) {
        data = (E[]) new Object[capacity];
        size = 0;
    }
}

這里的 data 數(shù)組就是用來存放順序表元素的核心容器,而 size 則用于追蹤實(shí)際存儲(chǔ)的元素?cái)?shù)量。

2.2接口的實(shí)現(xiàn)

public class SeqList {
private int[] array;
private int size;
// 默認(rèn)構(gòu)造方法
SeqList(){ }
// 將順序表的底層容量設(shè)置為initcapacity
SeqList(int initcapacity){ }
// 新增元素,默認(rèn)在數(shù)組最后新增
public void add(int data) { }
// 在 pos 位置新增元素
public void add(int pos, int data) { }
// 判定是否包含某個(gè)元素
public boolean contains(int toFind) { return true; }
// 查找某個(gè)元素對(duì)應(yīng)的位置
public int indexOf(int toFind) { return -1; }
// 獲取 pos 位置的元素
public int get(int pos) { return -1; }
// 給 pos 位置的元素設(shè)為 value
public void set(int pos, int value) { }
//刪除第一次出現(xiàn)的關(guān)鍵字key
public void remove(int toRemove) { }
// 獲取順序表長度
public int size() { return 0; }
// 清空順序表
public void clear() { }
// 打印順序表,注意:該方法并不是順序表中的方法,為了方便看測(cè)試結(jié)果給出的
public void display() { }
}

插入操作

當(dāng)向順序表中插入一個(gè)元素時(shí),情況會(huì)相對(duì)復(fù)雜一些。如果是在順序表的末尾插入元素,操作較為簡(jiǎn)單,只需將元素放入 data[size] 的位置,并將 size 加 1 即可。但如果是在中間位置插入,例如在索引 k 處插入元素 e,則需要將索引 k 及之后的元素依次向后移動(dòng)一位,為新元素騰出空間,然后再將新元素放入索引 k 處。

public void add(int index, E e) {
    if (index < 0 || index > size) {
        throw new IllegalArgumentException("Add failed. Illegal index.");
    }
    if (size == data.length) {
        resize(2 * data.length);
    }
    for (int i = size - 1; i >= index; i--) {
        data[i + 1] = data[i];
    }
    data[index] = e;
    size++;
}

刪除操作

刪除順序表中的元素同樣需要考慮多種情況。如果刪除的是末尾元素,直接將 size 減 1 即可。若刪除索引為 k 的元素,則需要將索引 k 之后的元素依次向前移動(dòng)一位,覆蓋掉要?jiǎng)h除的元素。

public E remove(int index) {
    if (index < 0 || index >= size) {
        throw new IllegalArgumentException("Remove failed. Illegal index.");
    }
    E ret = data[index];
    for (int i = index + 1; i < size; i++) {
        data[i - 1] = data[i];
    }
    size--;
    data[size] = null;
    if (size == data.length / 4 && data.length / 2!= 0) {
        resize(data.length / 2);
    }
    return ret;
}

三、ArrayList的簡(jiǎn)介

ArrayList是 Java 集合框架中的一個(gè)重要類,它位于java.util包中。它實(shí)現(xiàn)了List接口,這意味著它是一個(gè)有序的集合,允許存儲(chǔ)重復(fù)的元素。它的底層數(shù)據(jù)結(jié)構(gòu)是一個(gè)動(dòng)態(tài)大小的數(shù)組,這使得它可以根據(jù)需要自動(dòng)調(diào)整大小。

與普通數(shù)組相比,ArrayList更加靈活。普通數(shù)組在創(chuàng)建時(shí)就確定了大小,之后很難改變其容量,而ArrayList可以方便地添加或刪除元素,并且會(huì)自動(dòng)處理數(shù)組容量的擴(kuò)展和收縮。

說明:

1. ArrayList是以泛型?式實(shí)現(xiàn)的,使?時(shí)必須要先實(shí)例化

2. ArrayList實(shí)現(xiàn)了RandomAccess接?,表明ArrayList?持隨機(jī)訪問

3. ArrayList實(shí)現(xiàn)了Cloneable接?,表明ArrayList是可以clone的

4. ArrayList實(shí)現(xiàn)了Serializable接?,表明ArrayList是?持序列化的

5. 和Vector不同,ArrayList不是線程安全的,在單線程下可以使?,在多線程中可以選擇Vector或者 CopyOnWriteArrayList

6. ArrayList底層是?段連續(xù)的空間,并且可以動(dòng)態(tài)擴(kuò)容,是?個(gè)動(dòng)態(tài)類型的順序表

創(chuàng)建ArrayList對(duì)象

要使用ArrayList,首先需要導(dǎo)入java.util.ArrayList類。

import java.util.ArrayList;
public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
    }
}

創(chuàng)建了一個(gè)可以存儲(chǔ)String類型元素的ArrayList。其中是泛型參數(shù),用于指定列表中元素的類型。除了String,還可以是其他基本數(shù)據(jù)類型對(duì)應(yīng)的包裝類(如Integer、Double等)或自定義的類類型。

四、ArrayList使用

4.1 ArrayList的構(gòu)造

public static void main(String[] args) {
// ArrayList創(chuàng)建,推薦寫法
// 構(gòu)造?個(gè)空的列表
List<Integer> list1 = new ArrayList<>();
// 構(gòu)造?個(gè)具有10個(gè)容量的列表
List<Integer> list2 = new ArrayList<>(10);
list2.add(1);
list2.add(2);
list2.add(3);
// list2.add("hello"); // 編譯失敗,List<Integer>已經(jīng)限定了,list2中只能存儲(chǔ)整
形元素
// list3構(gòu)造好之后,與list中的元素?致
ArrayList<Integer> list3 = new ArrayList<>(list2);
// 避免省略類型,否則:任意類型的元素都可以存放,使?時(shí)將是?場(chǎng)災(zāi)難
List list4 = new ArrayList();
list4.add("111");
list4.add(100);
}

4.2 ArrayList常?操作

4.2.1添加元素

add(E e)方法:用于在ArrayList末尾添加元素。

import java.util.ArrayList;
public class ArrayListAddExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        System.out.println(fruits); 
    }
}

首先創(chuàng)建了一個(gè)ArrayList對(duì)象fruits,用于存儲(chǔ)String類型的元素。然后通過add方法添加了兩個(gè)水果名稱,最后打印出ArrayList,輸出結(jié)果為[Apple, Banana]。

add(int index, E e)方法:用于在指定索引index處插入元素e。

import java.util.ArrayList;
public class ArrayListAddAtIndexExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add(1, "Cherry");
        System.out.println(fruits); 
    }
}

這里在索引為1的位置插入了"Cherry",原來索引為1(即"Banana")及其后面的元素會(huì)向后移動(dòng)一位。輸出結(jié)果為[Apple, Cherry, Banana]。

4.2.2獲取元素

get(int index)方法:用于獲取ArrayList中指定索引index處的元素。

import java.util.ArrayList;
public class ArrayListGetExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        String secondFruit = fruits.get(1);
        System.out.println(secondFruit); 
    }
}

通過get(1)獲取了索引為1的元素,即"Banana",并將其存儲(chǔ)在secondFruit變量中,最后打印輸出。

4.2.3修改元素

直接通過索引賦值:可以像操作數(shù)組一樣,通過指定索引來修改ArrayList中的元素。

import java.util.ArrayList;
public class ArrayListSetExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.set(1, "Orange");
        System.out.println(fruits); 
    }
}

通過set(1, “Orange”)將索引為1的元素(原來為"Banana")修改為"Orange",輸出結(jié)果為[Apple, Orange]。

4.2.4刪除元素

remove(int index)方法:用于刪除指定索引index處的元素。

import java.util.ArrayList;
public class ArrayListRemoveByIndexExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.remove(0);
        System.out.println(fruits); 
    }
}

通過remove(0)刪除了索引為0的元素(即"Apple"),輸出結(jié)果為[Banana]。

remove(Object o)方法:用于刪除指定的對(duì)象o。

import java.util.ArrayList;
public class ArrayListRemoveByObjectExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.remove("Apple");
        System.out.println(fruits); 
    }
}

通過remove(“Apple”)刪除了ArrayList中值為"Apple"的元素,輸出結(jié)果為[Banana]。

4.2.5遍歷ArrayList

使用普通for循環(huán)

import java.util.ArrayList;
public class ArrayListForLoopExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        for (int i = 0; i < fruits.size(); i++) {
            System.out.println(fruits.get(i));
        }
    }
}

在這個(gè)循環(huán)中,i從0開始,每次循環(huán)增加1,直到i小于ArrayList的大?。ㄍㄟ^size()方法獲?。T谘h(huán)體內(nèi)部,通過get(i)方法獲取當(dāng)前索引的元素并打印輸出。

使用增強(qiáng)for循環(huán)(for - each循環(huán))

import java.util.ArrayList;
public class ArrayListForEachLoopExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

fruit變量會(huì)依次獲取ArrayList中的每個(gè)元素,循環(huán)會(huì)自動(dòng)遍歷整個(gè)ArrayList,直到所有元素都被訪問。

使用迭代器(Iterator):

import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListIteratorExample {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        Iterator<String> iterator = fruits.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

通過iterator()方法獲取ArrayList的迭代器。然后通過hasNext()方法檢查是否還有下一個(gè)元素,如果有,則通過next()方法獲取并打印下一個(gè)元素,直到?jīng)]有更多元素為止。

五、ArrayList的擴(kuò)容機(jī)制

ArrayList是?個(gè)動(dòng)態(tài)類型的順序表,即:在插?元素的過程中會(huì)?動(dòng)擴(kuò)容。

public boolean add(E e) {
	modCount++;
	add(e, elementData, size);
	return true;
}
private void add(E e, Object[] elementData, int s) {
	if (s == elementData.length) //第?次存儲(chǔ)的時(shí)候 elementData.length=0,s = 0
	elementData = grow();
	elementData[s] = e;
	size = s + 1;
}
private Object[] grow() {
	return grow(size + 1);
}
private Object[] grow(int minCapacity) {
	int oldCapacity = elementData.length;
	if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
		int newCapacity = ArraysSupport.newLength(oldCapacity,
		minCapacity - oldCapacity, /* minimum growth */
		oldCapacity >> 1 /* preferred growth */);
	return elementData = Arrays.copyOf(elementData, newCapacity);
	} else {
		return elementData = new Object[Math.max(DEFAULT_CAPACITY,minCapacity)];
	}
}
//oldLength: 當(dāng)前數(shù)組的?度
//minGrowth: 最?需要增加的?度
//prefGrowth: ?選的增? 度(通常是當(dāng)前??的?半)
public static int newLength(int oldLength, int minGrowth, int prefGrowth) {
	// preconditions not checked because of inlining
	// assert oldLength >= 0
	// assert minGrowth > 0
	//當(dāng)前?度加上 minGrowth 和 prefGrowth 中的較?值。
	int prefLength = oldLength + Math.max(minGrowth, prefGrowth); // might overflow
	if (0 < prefLength && prefLength <= SOFT_MAX_ARRAY_LENGTH) {
		return prefLength;
	} else {
		// put code cold in a separate method
			return hugeLength(oldLength, minGrowth);
		}
}
private static int hugeLength(int oldLength, int minGrowth) {
	int minLength = oldLength + minGrowth;
	if (minLength < 0) { // overflow
		throw new OutOfMemoryError("Required array length " + oldLength + " + " + minGrowth + " is too large");
	} else if (minLength <= SOFT_MAX_ARRAY_LENGTH) {
		return SOFT_MAX_ARRAY_LENGTH;
	} else {
		return minLength;
			}
}

如果調(diào)?不帶參數(shù)的構(gòu)造?法,第?次分配數(shù)組??為10

后續(xù)擴(kuò)容為1.5倍擴(kuò)容

以上就是Java數(shù)據(jù)結(jié)構(gòu)之ArrayList與順序表詳解的詳細(xì)內(nèi)容,更多關(guān)于Java ArrayList與順序表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PowerJob的OmsLogHandler工作流程源碼解析

    PowerJob的OmsLogHandler工作流程源碼解析

    這篇文章主要為大家介紹了PowerJob的OmsLogHandler工作流程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Spring集成Druid連接池及監(jiān)控配置的全過程

    Spring集成Druid連接池及監(jiān)控配置的全過程

    java程序很大一部分要操作數(shù)據(jù)庫,為了提高性能操作數(shù)據(jù)庫的時(shí)候,有不得不使用數(shù)據(jù)庫連接池,下面這篇文章主要給大家介紹了關(guān)于Spring集成Druid連接池及監(jiān)控配置的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 理解Java中的靜態(tài)綁定和動(dòng)態(tài)綁定

    理解Java中的靜態(tài)綁定和動(dòng)態(tài)綁定

    這篇文章主要幫助大家理解Java中的靜態(tài)綁定和動(dòng)態(tài)綁定,在Java中存在兩種綁定方式,一種為靜態(tài)綁定,另一種就是動(dòng)態(tài)綁定,亦稱為后期綁定,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Java多線程并發(fā)synchronized?關(guān)鍵字

    Java多線程并發(fā)synchronized?關(guān)鍵字

    這篇文章主要介紹了Java多線程并發(fā)synchronized?關(guān)鍵字,Java?在虛擬機(jī)層面提供了?synchronized?關(guān)鍵字供開發(fā)者快速實(shí)現(xiàn)互斥同步的重量級(jí)鎖來保障線程安全。
    2022-06-06
  • springboot如何開啟一個(gè)監(jiān)聽線程執(zhí)行任務(wù)

    springboot如何開啟一個(gè)監(jiān)聽線程執(zhí)行任務(wù)

    這篇文章主要介紹了springboot如何開啟一個(gè)監(jiān)聽線程執(zhí)行任務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • spring boot 與kafka集成的示例代碼

    spring boot 與kafka集成的示例代碼

    這篇文章主要介紹了spring boot 與kafka集成的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • 簡(jiǎn)單了解Java位域的一些知識(shí)

    簡(jiǎn)單了解Java位域的一些知識(shí)

    這篇文章主要介紹了簡(jiǎn)單了解Java位域的一些知識(shí),這個(gè)概念是在 Effective Java中了解到的, 可以通過EnumSet來代替位域這種方式表達(dá),需要的朋友可以參考下
    2019-07-07
  • springboot?vue接口測(cè)試定義編輯功能的實(shí)現(xiàn)

    springboot?vue接口測(cè)試定義編輯功能的實(shí)現(xiàn)

    這篇文章主要為大家介紹了springboot?vue接口測(cè)試定義編輯功能的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 關(guān)于Jsoup將相對(duì)路徑轉(zhuǎn)為絕對(duì)路徑的方法

    關(guān)于Jsoup將相對(duì)路徑轉(zhuǎn)為絕對(duì)路徑的方法

    這篇文章主要介紹了關(guān)于Jsoup將相對(duì)路徑轉(zhuǎn)為絕對(duì)路徑的方法,jsoup 是一款Java 的HTML解析器,可直接解析某個(gè)URL地址、HTML文本內(nèi)容,需要的朋友可以參考下
    2023-04-04
  • 淺談Redis持久化的幾種方式

    淺談Redis持久化的幾種方式

    這篇文章主要介紹了淺談Redis持久化的幾種方式,前面說到了Redis持久化的 實(shí)現(xiàn)方式主要分為了:快照持久化(RDB)、寫日志持久化(AOF)
    ,其中快照持久化方式也就是RDB ,需要的朋友可以參考下
    2023-08-08

最新評(píng)論