Java實(shí)現(xiàn)一個(gè)順序表的完整代碼
實(shí)現(xiàn)一個(gè)順序表
接口實(shí)現(xiàn)
定義一個(gè)MyArrayList類,在類中實(shí)現(xiàn)以下函數(shù)
public class MyArrayList {
}
數(shù)組的定義
public int[] elem;//定義一個(gè)整形數(shù)組
public int usize;//usize表示數(shù)組的長(zhǎng)度
public MyArrayList(){
this.elem = new int[5];
}
打印順序表
for循環(huán)打印順序表的每一位
public void display(){
for (int i = 0; i < this.usize; i++) {
System.out.print(this.elem[i]+" ");
}
System.out.println();
}
在pos位置新增元素
先定義一個(gè)isFull函數(shù)判斷順序表是否滿了,滿了返回true,沒(méi)滿則返回false
public boolean isFull(){
if (this.usize == this.elem.length){
return true;
}
return false;
}
將pos位置后的元素后移,順序表順序表長(zhǎng)度增加一位
public void add(int pos, int data){
//判斷順序表是否滿了
if (isFull()){
System.out.println("順序表已滿");
//擴(kuò)容
this.elem = Arrays.copyOf(this.elem,2*this.usize);
}
//判斷pos的合法性
if (pos < 0 || pos > this.usize){
System.out.println("pos位置不合法");
return;
}
//將pos位置后的數(shù)字后移
for (int i = this.usize-1; i >= pos; i--) {
this.elem[i+1] = this.elem[i];
}
this.elem[pos] = data;
this.usize++;
}
判定是否包含某個(gè)元素
public boolean contains(int key){
for (int i = 0; i < this.usize; i++) {
if (this.elem[i] == key){
return true;
}
}
return false;
}
查找某個(gè)對(duì)應(yīng)元素的位置
返回它的位置
public int search(int key){
for (int i = 0; i < this.usize; i++) {
if (this.elem[i] == key){
return i;
}
}
return -1;
}
獲取pos位置的元素
定義一個(gè)isEmpty函數(shù)判斷順序表是否為空
public boolean isEmpty(){
return this.usize == 0;
}
public int getPos(int pos){
//判斷順序表是否為空
if (isEmpty()){
return -1;
}
//判斷pos 位置是否合法
if (pos < 0 || pos >= this.usize){
return -1;
}
return this.elem[pos];
}
給pos位置的元素設(shè)為value 更新為新的數(shù)字
public void setPos(int pos,int value){
//判斷順序表是否為空
if (isEmpty()){
return;
}
//判斷pos位置是否合法
if (pos < 0 || pos >= this.usize){
return;
}
this.elem[pos] = value;
}
刪除第一次出現(xiàn)的關(guān)鍵字key
查找到關(guān)鍵字,從關(guān)鍵字所在的位置開(kāi)始到順序表結(jié)束每一項(xiàng)前移,覆蓋掉關(guān)鍵字,長(zhǎng)度減少一位
public void remove(int key){
int index= search(key);
if (key == -1){
System.out.println("關(guān)鍵字不存在");
return;
}
for (int i = key; i < this.usize-1; i++) {
this.elem[i] = this.elem[i+1];
}
this.usize--;
}
獲取順序表長(zhǎng)度
public int size(){
return this.usize;
}
清空順序表
順序表長(zhǎng)度直接為0
public void clear(){
this.usize = 0;
}
實(shí)現(xiàn)這個(gè)順序表
定義一個(gè)測(cè)試類,測(cè)試這些函數(shù)的輸出
public class TestDemo {
public static void main(String[] args) {
MyArrayList myArrayList = new MyArrayList();
//給這個(gè)順序表寫入1,2,3,4,5
myArrayList.add(0,1);
myArrayList.add(1,2);
myArrayList.add(2,3);
myArrayList.add(3,4);
myArrayList.add(4,5);
//打印這個(gè)順序表
myArrayList.display();
//判定5這個(gè)元素是否在該順序表中
System.out.println(myArrayList.contains(5));
//查找5這個(gè)元素 返回它的位置
System.out.println(myArrayList.search(5));
//獲取3位置的元素
System.out.println(myArrayList.getPos(3));
//將4位置的元素重新賦值為9
myArrayList.setPos(4,9);
//打印新的順序表
myArrayList.display();
//刪除第一次出現(xiàn)的元素4
myArrayList.remove(4);
//打印新的順序表
myArrayList.display();
//獲取順序表的長(zhǎng)度
System.out.println(myArrayList.size());
System.out.println("清空");
//清空順序表
myArrayList.clear();
//打印新的順序表
myArrayList.display();
}
}
得到結(jié)果:

順序表的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):順序表查找方便,知道這個(gè)元素的位置就可以直接找到這個(gè)元素。
缺點(diǎn):擴(kuò)容一般成2倍增長(zhǎng),會(huì)有一定的空間浪費(fèi)。
相關(guān)文章
Java中的任務(wù)調(diào)度框架quartz詳細(xì)解析
這篇文章主要介紹了Java中的任務(wù)調(diào)度框架quartz詳細(xì)解析,Quartz 是一個(gè)完全由 Java 編寫的開(kāi)源作業(yè)調(diào)度框架,為在 Java 應(yīng)用程序中進(jìn)行作業(yè)調(diào)度提供了簡(jiǎn)單卻強(qiáng)大的機(jī)制,需要的朋友可以參考下2023-11-11
SpringBoot實(shí)現(xiàn)輕量級(jí)動(dòng)態(tài)定時(shí)任務(wù)管控及組件化的操作步驟
文章介紹了一種在SpringBoot中實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)的解決方案,基于COLA架構(gòu)理論,封裝到了組件層,該組件支持類級(jí)別和方法級(jí)別的定時(shí)任務(wù)注冊(cè),并提供了易用性和擴(kuò)展性,組件使用Maven形式引入,并且可以通過(guò)YAML配置文件進(jìn)行設(shè)置,感興趣的朋友一起看看吧2024-11-11
Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(使用數(shù)據(jù)庫(kù))
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Java中使用Thread類和Runnable接口實(shí)現(xiàn)多線程的區(qū)別
這篇文章主要介紹了使用Thread類和Runnable接口實(shí)現(xiàn)多線程的區(qū)別,本文給大家介紹了兩種實(shí)現(xiàn)方式的步驟,除了以上兩種多線程實(shí)現(xiàn)方式,還可以使用 Callable 接口實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
jstl標(biāo)簽基礎(chǔ)開(kāi)發(fā)步驟(詳解)
下面小編就為大家?guī)?lái)一篇jstl標(biāo)簽基礎(chǔ)開(kāi)發(fā)步驟(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
使用spring框架ResponseEntity實(shí)現(xiàn)文件下載
這篇文章主要介紹了使用spring框架ResponseEntity實(shí)現(xiàn)文件下載,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
SpringBoot 集成 Nebula的操作過(guò)程
這篇文章主要介紹了SpringBoot 集成 Nebula的操作過(guò)程,通過(guò)示例代碼介紹了java 環(huán)境下如何對(duì) Nebula Graph 進(jìn)行操作,感興趣的朋友跟隨小編一起看看吧2024-05-05
restemplate請(qǐng)求亂碼之content-encoding=“gzip“示例詳解
RestTemplate從Spring3.0開(kāi)始支持的一個(gè)HTTP請(qǐng)求工具,它提供了常見(jiàn)的REST請(qǐng)求方案的模板,及一些通用的請(qǐng)求執(zhí)行方法 exchange 以及 execute,接下來(lái)通過(guò)本文給大家介紹restemplate請(qǐng)求亂碼之content-encoding=“gzip“,需要的朋友可以參考下2024-03-03
SpringAOP 如何通過(guò)JoinPoint獲取參數(shù)名和值
這篇文章主要介紹了SpringAOP 通過(guò)JoinPoint獲取參數(shù)名和值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot與SpringMVC中參數(shù)傳遞的原理解析
這篇文章主要介紹了SpringBoot與SpringMVC中參數(shù)傳遞的原理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07

