您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“java怎么實(shí)現(xiàn)數(shù)組的增刪改查”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“java怎么實(shí)現(xiàn)數(shù)組的增刪改查”吧!
1.一維數(shù)組
2.數(shù)組的擴(kuò)容
3.數(shù)組的復(fù)制
1.直接將數(shù)組賦值給新數(shù)組
2.創(chuàng)建一個(gè)新的數(shù)組,再將原數(shù)組的數(shù)據(jù)逐個(gè)賦值
4.數(shù)組的刪除
5.數(shù)組的排序
6.數(shù)組的查找
1.順序查找:從頭到尾遍歷(簡(jiǎn)單除暴,效率相對(duì)較低)
2.二分法查找
概念:一組數(shù)據(jù)的容器(數(shù)組可以存放多個(gè)數(shù)據(jù))
注意:
1.數(shù)組是引用數(shù)據(jù)類型
2.數(shù)組中的數(shù)據(jù)又叫做元素
3.每個(gè)元素都有編號(hào)叫做下標(biāo)/索引
4.下標(biāo)從0開(kāi)始
5.數(shù)組初始化后,會(huì)在內(nèi)存中開(kāi)辟一連串連續(xù)的空間
6.數(shù)組一旦初始化后長(zhǎng)度不可以改變(數(shù)組沒(méi)有擴(kuò)容和刪除)
7.數(shù)組的操作:添加、修改、查詢
數(shù)組的聲明:數(shù)據(jù)類型[] 數(shù)組名;
數(shù)組的初始化:
靜態(tài)初始化:數(shù)據(jù)由程序員指定,長(zhǎng)度由系統(tǒng)分配
public static void main(String[] args){ //靜態(tài)初始化1 //String[] names = new String[]{"小明","小紅","鐵蛋","二狗","大傻子"}; //靜態(tài)初始化2 //String[] names; //names = new String[]{"小明","小紅","鐵蛋","二狗","大傻子"}; //靜態(tài)初始化3 String[] names = {"小明","小紅","鐵蛋","二狗","大傻子"}; //設(shè)置指定下標(biāo)上的元素 names[3] = "大狗"; //獲取指定下標(biāo)上的元素 String n = names[3]; System.out.println("獲取指定下標(biāo)上的元素:" + n);//林成 //ArrayIndexOutOfBoundsException - 數(shù)組下標(biāo)越界異常 //System.out.println(names[100]); //獲取元素個(gè)數(shù) int len = names.length; System.out.println("獲取元素個(gè)數(shù):" + len);//5 System.out.println("-----------"); //遍歷 - for循環(huán) for(int i = 0;i<names.length;i++){ System.out.println(names[i]); } System.out.println("-----------"); //遍歷 - foreach(增強(qiáng)for循環(huán)) for(String str:names){//遍歷數(shù)組,依次把元素賦值給str System.out.println(str); } /** 遍歷時(shí)要使用到下標(biāo),就用for循環(huán)遍歷 遍歷時(shí)要不使用到下標(biāo),就用foreach遍歷 */ }
動(dòng)態(tài)初始化:長(zhǎng)度由程序員指定,數(shù)據(jù)由系統(tǒng)分配(默認(rèn)值)
整數(shù)類型:0
浮點(diǎn)類型:0.0
字符類型:' '
布爾類型:false
引用類型:null(空)
public static void main(String[] args){ //動(dòng)態(tài)初始化1 String[] names = new String[5];//5->5個(gè)長(zhǎng)度 //設(shè)置指定下標(biāo)上的元素 names[0] = "小明"; names[1] = "鐵蛋"; names[2] = "二狗"; //獲取指定下標(biāo)上的元素 String n = names[2]; System.out.println("獲取指定下標(biāo)上的元素:" + n);//二狗 //ArrayIndexOutOfBoundsException - 數(shù)組下標(biāo)越界異常 //System.out.println(names[100]); //獲取元素個(gè)數(shù) int len = names.length; System.out.println("獲取元素個(gè)數(shù):" + len);//5 System.out.println("-----------"); //遍歷 - for循環(huán) for(int i = 0;i<names.length;i++){ System.out.println(names[i]); } System.out.println("-----------"); //遍歷 - foreach(增強(qiáng)for循環(huán)) for(String str:names){//遍歷數(shù)組,依次把元素賦值給str System.out.println(str); } /** 遍歷時(shí)要使用到下標(biāo),就用for循環(huán)遍歷 遍歷時(shí)要不使用到下標(biāo),就用foreach遍歷 */
前面講到數(shù)組一旦初始化后長(zhǎng)度不可以改變(數(shù)組沒(méi)有擴(kuò)容和刪除),那我們?nèi)绾卧谠瓉?lái)的數(shù)組上添加數(shù)據(jù)。數(shù)組沒(méi)有擴(kuò)容,但是可以將數(shù)組中的數(shù)據(jù)從小的容器放到大的容器里。
public static void main(String[] args){ //源數(shù)組 String[] names = {"小明","小紅","鐵蛋","二狗"}; //新數(shù)組 //(names.length>>1在此次可以理解為(names.length/2) int capacity = names.length + (names.length>>1);//新容量:是源數(shù)組長(zhǎng)度的1.5倍 String[] newNames = new String[capacity]; //把源數(shù)組所有的數(shù)據(jù)遷移到新數(shù)組中 for(int i = 0;i<names.length;i++){ newNames[i] = names[i]; } //將新數(shù)組的地址賦值給源數(shù)組 names = newNames; //遍歷源數(shù)組 for(String name:names){ System.out.println(name); } }
小明小紅鐵蛋二狗 null null
String[] names = {“小明”,“小紅”,“鐵蛋”,“二狗”};
String[] newNames = names;
這樣做會(huì)有一個(gè)小缺陷,修改源數(shù)組,新數(shù)組的數(shù)據(jù)也隨之改變.這是因?yàn)橘x值號(hào)所給到的不是原數(shù)組的數(shù)據(jù),而是原數(shù)組的地址。
public class Test111 { public static void main(String[] args){ //源數(shù)組 String[] names = {"小明","小紅","鐵蛋","二狗"}; //新數(shù)組 String[] newNames = names; //遍歷新數(shù)組 System.out.print("修改原數(shù)據(jù)前:"); for(String name : newNames){ System.out.print(name+"\t"); } System.out.println(); //修改源數(shù)組 names[0] = "大傻子"; //遍歷新數(shù)組 System.out.print("修改原數(shù)據(jù)后:"); for(String name : newNames){ System.out.print(name+"\t"); } System.out.println(); } }
修改原數(shù)據(jù)前:小明 小紅 鐵蛋 二狗 修改原數(shù)據(jù)后:大傻子 小紅 鐵蛋 二狗
public static void main(String[] args){ //源數(shù)組 String[] names = {"小明","小紅","鐵蛋","二狗"}; //新數(shù)組 String[] newNames = new String[names.length]; //將源數(shù)組中數(shù)據(jù)依次賦值給新數(shù)組 for(int i = 0;i<names.length;i++){ newNames[i] = names[i]; } //修改源數(shù)組 names[0] = "大聰明"; //遍歷新數(shù)組 for(String name : newNames){ System.out.println(name); } }
小明 小紅 鐵蛋 二狗
1.新建一個(gè)小容量的數(shù)組,然后將不刪除的數(shù)據(jù)導(dǎo)入。排除了需要?jiǎng)h除的數(shù)據(jù)
缺點(diǎn):數(shù)組原本是存放數(shù)據(jù)的,刪除元素后,數(shù)組長(zhǎng)度變短
public static void main(String[] args){ //源數(shù)組 String[] names = {"小明","小紅","鐵蛋","二狗"}; //新數(shù)組 String[] newNames = new String[names.length-1]; //將源數(shù)組的數(shù)據(jù)遷移到新數(shù)組中,要?jiǎng)h除的元素(深田詠美)除外 int index = 0;//新數(shù)組的下標(biāo) for(String name:names){ if(!name.equals("小紅")){ newNames[index] = name; index++; } } //將新數(shù)組的地址賦值給源數(shù)組 names = newNames; //遍歷源數(shù)組 for(String name:names){ System.out.println(name); } }
小明 鐵蛋 二狗
2.將需要?jiǎng)h除的數(shù)據(jù)后面的數(shù)據(jù)整體向前移,覆蓋掉刪除的數(shù)據(jù),這樣就可以留出空間了
public static void main(String[] args){ //源數(shù)組 String[] names = {"小明","小紅","鐵蛋","二狗"}; //數(shù)據(jù)的遷移 for(int i = 1;i<names.length-1;i++){ names[i] = names[i+1]; } names[names.length-1] = null; //遍歷源數(shù)組 for(String name:names){ System.out.println(name); } }
小明鐵蛋二狗 null
數(shù)組的排序方法有很多種,今天就分享比較簡(jiǎn)單的冒泡排序
口訣:
N個(gè)數(shù)字來(lái)排序
兩兩相比小靠前
外層循環(huán)N-1
內(nèi)層循環(huán)N-1-i
public static void main(String[] args){ int[] is = {39,77,27,20,45,62}; for(int i = 0;i<is.length-1;i++){ for(int j = 0;j<is.length-1-i;j++){ if(is[j] > is[j+1]){ int temp = is[j]; is[j] = is[j+1]; is[j+1] = temp; } } } for(int num : is){ System.out.println(num); } }
這里分享一個(gè)Arrays工具類,導(dǎo)入Arrays包后可直接調(diào)用里面的排序方法sort
public static void main(String[] args){ import java.util.Arrays; int[] a={1,5,8,6}; for(int num : a){ System.out.println(num); } }
1 5 6 8
for(int i = 0;i<is.length;i++){ if(is[i] == num){ System.out.println("查找到了"); } }
前提:先排序(效率高于順序查找)
排序時(shí)就可以使用Arrays.sort(is);
**二分法查找適用于數(shù)據(jù)量較大時(shí),但是數(shù)據(jù)需要先排好順序。
public static void main(String[] args){ int[] is = {39,77,27,20,45,62}; int num = 77; //排序 Arrays.sort(is); int start = 0; int end = is.length-1; while(start <= end){ int mid = (start+end)/2; if(num >is[mid]){ start = mid+1; }else if(num < is[mid]){ end = mid-1; }else{ System.out.println("查找到了"); break; } } }
到此,相信大家對(duì)“java怎么實(shí)現(xiàn)數(shù)組的增刪改查”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。