java簡單實現(xiàn)數(shù)組的增刪改查方法
1.一維數(shù)組
概念:一組數(shù)據(jù)的容器(數(shù)組可以存放多個數(shù)據(jù))
注意:
1.數(shù)組是引用數(shù)據(jù)類型
2.數(shù)組中的數(shù)據(jù)又叫做元素
3.每個元素都有編號叫做下標(biāo)/索引
4.下標(biāo)從0開始
5.數(shù)組初始化后,會在內(nèi)存中開辟一連串連續(xù)的空間
6.數(shù)組一旦初始化后長度不可以改變(數(shù)組沒有擴容和刪除)
7.數(shù)組的操作:添加、修改、查詢
數(shù)組的聲明:數(shù)據(jù)類型[] 數(shù)組名;
數(shù)組的初始化:
靜態(tài)初始化:數(shù)據(jù)由程序員指定,長度由系統(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]);
//獲取元素個數(shù)
int len = names.length;
System.out.println("獲取元素個數(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(增強for循環(huán))
for(String str:names){//遍歷數(shù)組,依次把元素賦值給str
System.out.println(str);
}
/**
遍歷時要使用到下標(biāo),就用for循環(huán)遍歷
遍歷時要不使用到下標(biāo),就用foreach遍歷
*/
}
動態(tài)初始化:長度由程序員指定,數(shù)據(jù)由系統(tǒng)分配(默認(rèn)值)
整數(shù)類型:0
浮點類型:0.0
字符類型:' '
布爾類型:false
引用類型:null(空)
public static void main(String[] args){
//動態(tài)初始化1
String[] names = new String[5];//5->5個長度
//設(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]);
//獲取元素個數(shù)
int len = names.length;
System.out.println("獲取元素個數(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(增強for循環(huán))
for(String str:names){//遍歷數(shù)組,依次把元素賦值給str
System.out.println(str);
}
/**
遍歷時要使用到下標(biāo),就用for循環(huán)遍歷
遍歷時要不使用到下標(biāo),就用foreach遍歷
*/
2.數(shù)組的擴容
前面講到數(shù)組一旦初始化后長度不可以改變(數(shù)組沒有擴容和刪除),那我們?nèi)绾卧谠瓉淼臄?shù)組上添加數(shù)據(jù)。數(shù)組沒有擴容,但是可以將數(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ù)組長度的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
3.數(shù)組的復(fù)制
1.直接將數(shù)組賦值給新數(shù)組
String[] names = {“小明”,“小紅”,“鐵蛋”,“二狗”};
String[] newNames = names;
這樣做會有一個小缺陷,修改源數(shù)組,新數(shù)組的數(shù)據(jù)也隨之改變.這是因為賦值號所給到的不是原數(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ù)后:大傻子 小紅 鐵蛋 二狗
2.創(chuàng)建一個新的數(shù)組,再將原數(shù)組的數(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);
}
}
小明 小紅 鐵蛋 二狗
4.數(shù)組的刪除
1.新建一個小容量的數(shù)組,然后將不刪除的數(shù)據(jù)導(dǎo)入。排除了需要刪除的數(shù)據(jù)
缺點:數(shù)組原本是存放數(shù)據(jù)的,刪除元素后,數(shù)組長度變短
public static void main(String[] args){
//源數(shù)組
String[] names = {"小明","小紅","鐵蛋","二狗"};
//新數(shù)組
String[] newNames = new String[names.length-1];
//將源數(shù)組的數(shù)據(jù)遷移到新數(shù)組中,要刪除的元素(深田詠美)除外
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.將需要刪除的數(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
5.數(shù)組的排序
數(shù)組的排序方法有很多種,今天就分享比較簡單的冒泡排序
口訣:
N個數(shù)字來排序
兩兩相比小靠前
外層循環(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);
}
}
這里分享一個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
6.數(shù)組的查找
1.順序查找:從頭到尾遍歷(簡單除暴,效率相對較低)
for(int i = 0;i<is.length;i++){
if(is[i] == num){
System.out.println("查找到了");
}
}
2.二分法查找
前提:先排序(效率高于順序查找)
排序時就可以使用Arrays.sort(is);
**二分法查找適用于數(shù)據(jù)量較大時,但是數(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;
}
}
}
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java中常用解析工具jackson及fastjson的使用
今天給大家?guī)淼氖顷P(guān)于Java解析工具的相關(guān)知識,文章圍繞著jackson及fastjson的使用展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
spring boot 默認(rèn)異常處理的實現(xiàn)
這篇文章主要介紹了spring boot 默認(rèn)異常處理的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Mybatis-Plus實現(xiàn)公共字段自動填充的項目實踐
本文主要介紹了Mybatis-Plus實現(xiàn)公共字段自動填充的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

