最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基礎學習筆記之數(shù)組詳解

 更新時間:2019年08月30日 09:27:44   作者:愛吾所愛(超超)  
這篇文章主要介紹了Java基礎學習筆記之數(shù)組,結合實例形式詳細分析了java的基本概念、定義、迭代、輸出、反轉、排序等常用操作技巧,需要的朋友可以參考下

本文實例講述了Java基礎學習筆記之數(shù)組。分享給大家供大家參考,具體如下:

數(shù)組的定義于使用

1:數(shù)組的基本概念

一組相關變量的集合;在Java里面將數(shù)組定義為引用數(shù)據(jù)類型,所以數(shù)組的使用一定要牽扯到內(nèi)存分配;想到了用new 關鍵字來處理。

2:數(shù)組的定義格式

區(qū)別:

動態(tài)初始化后數(shù)組中的每一個元素的內(nèi)容都是其對應數(shù)據(jù)類型的默認值,隨后可以通過下標進行數(shù)組內(nèi)容的修改;

如果希望數(shù)組定義的時候就可以提供內(nèi)容,則采用靜態(tài)初始化的方式;

a:數(shù)組的動態(tài)初始化(聲明并初始化數(shù)組):

數(shù)據(jù)類型 數(shù)組名稱 【】 = new 數(shù)據(jù)類型 【長度】;
數(shù)據(jù)類型 【】 數(shù)組名稱 = new 數(shù)據(jù)類型 【長度】

b:數(shù)組的靜態(tài)初始化(在數(shù)組定義的時候就為其設置好了里面的內(nèi)容)

簡化格式:數(shù)據(jù)類型 數(shù)組 數(shù)組名稱 【】 = {數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3,。。。};

完整格式:數(shù)據(jù)類型 數(shù)組名稱【】 = new 數(shù)據(jù)類型【】{ 數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3,。。。};

3:數(shù)組的特點

通過腳標訪問:0~n-1;

進行數(shù)組操作的時候往往會利用for循環(huán)來完成;

數(shù)組的長度:“數(shù)組名稱.length”;

4:數(shù)組的引用傳遞

數(shù)組定義時用到了new,所以這里存在有內(nèi)存關系匹配。

public class ArrayDemo {
	public static void main(String args[]) {
		// 使用數(shù)組的靜態(tài)初始化
		int data [] = new int [3] ;
		data [0] = 10 ;	// 為數(shù)組設置內(nèi)容
		data [1] = 20 ;	// 為數(shù)組設置內(nèi)容
		data [2] = 30 ;	// 為數(shù)組設置內(nèi)容
		for (int x = 0 ; x < data.length ; x ++) {
			System.out.println(data[x]) ;
		}
	}
}

在這里插入圖片描述

一個堆內(nèi)存可以被多個棧內(nèi)存所指向

public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {10,20,30} ;	// 靜態(tài)初始化
		int temp [] = data ;	// 引用傳遞
		temp [0] = 99 ;
		for (int x = 0 ; x < data.length ; x ++) {
			System.out.println(data[x]) ;
		}
	}
}

在這里插入圖片描述

由于數(shù)組是引用數(shù)據(jù)類型,所以一定要為其開辟堆內(nèi)存空間(也就是實例化對象)才可以使用,如果使用了未開辟堆內(nèi)存空間的數(shù)組則一定會出現(xiàn)“NullPointerException”異常

5foreach迭代輸出

JDK1.5之后為了減輕下標對程序的影響(以為下標處理不當則會出現(xiàn)數(shù)組越界異常),參考了.NET的設計,引入了增強型for循環(huán):foreach

for(數(shù)據(jù)類型 變量 :數(shù)組名) { }

特點:可以自動將數(shù)組中的每一個元素的內(nèi)容取出保存到變量里,這樣就可以直接通過變量獲取數(shù)組的內(nèi)容,避免了數(shù)組越界。

public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {1,2,3,4,5} ;
		for (int temp : data) {	// 自動循環(huán),將data數(shù)組每一個內(nèi)容交給temp
			System.out.println(temp) ;
		}
	}
}

6:二維數(shù)組

定義格式:

a:動態(tài)初始化:數(shù)據(jù)類型 數(shù)組名稱【】【】 = new 數(shù)據(jù)類型【行個數(shù)】【列個數(shù)】;

b:靜態(tài)初始化:數(shù)據(jù)類型 【】【】 new 數(shù)據(jù)類型 【】【】 { { 數(shù)據(jù),數(shù)據(jù) …},{ 數(shù)據(jù),數(shù)據(jù)…},… }

public class ArrayDemo {
	public static void main(String args[]) {
		int data [][] = new int [][] {
			{1,2,3,4,5} , {1,2,3} , {5,6,7,8}} ;
		for (int x = 0 ; x < data.length ; x ++) {
			for (int y = 0 ; y < data[x].length ; y ++) {
				System.out.println("data["+x+"]["+y+"] = " + data[x][y]) ;
			}
			System.out.println() ;	// 換行
		}
	}
}
//輸出結果:
data[0][0] = 1
data[0][1] = 2
data[0][2] = 3
data[0][3] = 4
data[0][4] = 5

data[1][0] = 1
data[1][1] = 2
data[1][2] = 3

data[2][0] = 5
data[2][1] = 6
data[2][2] = 7
data[2][3] = 8


同一個二維數(shù)組通過foreach輸出

public class ArrayDemo {
	public static void main(String args[]) {
		int data [][] = new int [][] {
			{1,2,3,4,5} , {1,2,3} , {5,6,7,8}} ;
		for (int temp [] : data) {
			for (int num : temp) {
				System.out.print(num + "、") ;
			}
			System.out.println() ;
		}
	}
}
//輸出結果
1、2、3、4、5、
1、2、3、
5、6、7、8

7數(shù)組與方法

對于引用數(shù)據(jù)類型,主要的特點是可以于方法進行引用傳遞,數(shù)組本身也是引用數(shù)據(jù)類型,所以自然也可以通過方法實現(xiàn)引用傳遞的操作。

public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {1,2,3,4,5} ;
		printArray(data) ;	// 傳遞數(shù)組
	}
	// 要求接收一個int型的數(shù)組
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.println(temp[x]) ;
		}
	}
}
//通過方法來接收一個數(shù)組

在這里插入圖片描述

public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = initArray() ;	// 通過方法可以獲得數(shù)組內(nèi)容
		printArray(data) ;	// 傳遞數(shù)組
	}
	public static int [] initArray() {
		int arr [] = new int [] {1,2,3,4,5} ;
		return arr ;	// 返回一個數(shù)組
	}
	// 要求接收一個int型的數(shù)組
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.println(temp[x]) ;
		}
	}
}
//通過方法返回一個數(shù)組對象

在這里插入圖片描述

public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {1,2,3,4,5} ;
		changeArray(data) ;	// 修改數(shù)組內(nèi)容
		printArray(data) ;	// 傳遞數(shù)組
	}
	public static void changeArray(int arr[]) {
		for (int x = 0 ; x < arr.length ; x ++) {
			arr[x] *= 2 ;	// 每個元素的內(nèi)容乘2保存
		}
	}
	// 要求接收一個int型的數(shù)組
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.println(temp[x]) ;
		}
	}
}
//通過方法修改數(shù)組內(nèi)容。

在這里插入圖片描述

下面寫一個案例,總結上面內(nèi)容

案例;定義一個int數(shù)組,要求計算出這個數(shù)組元素的總和,最大值,最小值,平均值。

//此程序的基本實現(xiàn)
public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {1,2,3,4,5} ;
		int sum = 0 ; ;
		double avg = 0.0 ;
		int max = data[0] ; // 假設第一個是最大值
		int min = data[0] ;	// 假設第一個是最小值
		for (int x = 0 ; x < data.length ; x ++) {
			if (data[x] > max) {	// max地位改變了
				max = data[x] ;
			}
			if (data[x] < min) {
				min = data[x] ;
			}
			sum += data[x] ;
		}
		avg = sum / data.length ;
		System.out.println("數(shù)組內(nèi)容總和:" + sum) ;
		System.out.println("數(shù)組內(nèi)容平均值:" + avg) ;
		System.out.println("數(shù)組內(nèi)容最大值:" + max) ;
		System.out.println("數(shù)組內(nèi)容最小值:" + min) ;
	}
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.println(temp[x]) ;
		}
	}
}

問題:主函數(shù)所在的類往往被稱為主類,那么既然是主類中不希望涉及過多復雜的功能;在開發(fā)的過程中,主方法本身就相當于是一個客戶端,而對于客戶端的代碼盡量簡單一些,所以這個時候是將一系列的計算過程交給單獨的程序類去完成。

//改善操作設計
class ArrayUtil {	// 是一個操作工具的類
	private int sum ; // 保存總和
	private double avg ; // 保存平均值
	private int max ; // 保存最大值
	private int min ; // 保存最小值
	public ArrayUtil(int data[]) {	// 進行數(shù)組計算
		this.max = data[0] ; // 假設第一個是最大值
		this.min = data[0] ;	// 假設第一個是最小值
		for (int x = 0 ; x < data.length ; x ++) {
			if (data[x] > max) {	// max地位改變了
				this.max = data[x] ;
			}
			if (data[x] < min) {
				this.min = data[x] ;
			}
			this.sum += data[x] ;
		}
		this.avg = this.sum / data.length ;
	}
	public int getSum() {
		return this.sum ;
	}
	public double getAvg() {
		return this.avg ;
	}
	public int getMax() {
		return this.max ;
	}
	public int getMin() {
		return this.min ;
	}
}
public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {1,2,3,4,5} ;
		ArrayUtil util = new ArrayUtil(data) ;	// 數(shù)據(jù)計算
		System.out.println("數(shù)組內(nèi)容總和:" + util.getSum()) ;
		System.out.println("數(shù)組內(nèi)容平均值:" + util.getAvg()) ;
		System.out.println("數(shù)組內(nèi)容最大值:" + util.getMax()) ;
		System.out.println("數(shù)組內(nèi)容最小值:" + util.getMin()) ;
	}
}

8:數(shù)組操作案例:數(shù)組反轉

做法一:定義一個新的數(shù)組而后按照逆序的方式保存(會產(chǎn)生無用的垃圾空間)

class ArrayUtil {
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.print(temp[x] + "、") ;
		}
		System.out.println() ;
	}
}
public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {1,2,3,4,5,6,7,8,9} ;
		int temp [] = new int [data.length] ;	// 第二個數(shù)組
		int foot = temp.length - 1; // 第二個數(shù)組的腳標
		for (int x = 0 ; x < data.length ; x ++) {
			temp[foot --] = data[x] ;
		}
		data = temp ; 
		ArrayUtil.printArray(data) ;
	}
	
}

在這里插入圖片描述
在這里插入圖片描述

做法二:在一個數(shù)組上進行轉置

class ArrayUtil {
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.print(temp[x] + "、") ;
		}
		System.out.println() ;
	}
}
public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {1,2,3,4,5,6,7,8,9} ;
		int center = data.length / 2 ; // 確定轉換的次數(shù)
		int head = 0 ;	// 操作腳標
		int tail = data.length - 1 ; // 操作腳標
		for (int x = 0 ; x < center ; x ++) {
			int temp = data [head] ;
			data [head] = data [tail] ;
			data [tail] = temp ;
			head ++ ;
			tail -- ;
		}
		ArrayUtil.printArray(data) ;
	}
	
}

比較兩種方式:第一種循環(huán)次數(shù)較多,會產(chǎn)生垃圾;第二種實現(xiàn)循環(huán)次數(shù)較低,但是存在if判斷增加了
時間復雜度,可是減少了無用對象的產(chǎn)生,提升了性能。

//將轉換功能變?yōu)轭惗x

class ArrayUtil {
	public static void reverse(int data[]) {
		int center = data.length / 2 ; // 確定轉換的次數(shù)
		int head = 0 ;	// 操作腳標
		int tail = data.length - 1 ; // 操作腳標
		for (int x = 0 ; x < center ; x ++) {
			int temp = data [head] ;
			data [head] = data [tail] ;
			data [tail] = temp ;
			head ++ ;
			tail -- ;
		}
	}
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.print(temp[x] + "、") ;
		}
		System.out.println() ;
	}
}
public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {1,2,3,4,5,6,7,8,9} ;
		ArrayUtil.reverse(data) ;	// 轉置處理
		ArrayUtil.printArray(data) ;
	}
}

9數(shù)組相關類操作方法

Java語言本身提供有數(shù)組的相關支持處理。

a:數(shù)組排序:Java.util.Arrays.sort(數(shù)組名稱)

class ArrayUtil {
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.print(temp[x] + "、") ;
		}
		System.out.println() ;
	}
}
public class ArrayDemo {
	public static void main(String args[]) {
		int data [] = new int [] {23,12,1,234,2,6,12,34,56} ;
		java.util.Arrays.sort(data) ;	// 排序
		ArrayUtil.printArray(data) ;
	}
}

b:數(shù)組拷貝:System.arraycopy(源數(shù)組,源數(shù)組開始點,目標數(shù)組,目標數(shù)組開始點,拷貝長度)

class ArrayUtil {
	public static void printArray(int temp []) {
		for (int x = 0 ; x < temp.length ; x ++) {
			System.out.print(temp[x] + "、") ;
		}
		System.out.println() ;
	}
}
public class ArrayDemo {
	public static void main(String args[]) {
		int dataA [] = new int [] {1,2,3,4,5,6,7,8,9} ;
		int dataB [] = new int [] {11,22,33,44,55,66,77,88,99} ;
		System.arraycopy(dataA,5,dataB,3,3) ;
		ArrayUtil.printArray(dataB) ;
	}
}
//結果:
11、22、33、6、7、8、77、88、99、

10方法可變參數(shù)

需求:定義一個方法,可以實現(xiàn)任意多個整型數(shù)據(jù)的相加處理。

傳統(tǒng)實現(xiàn)。

class ArrayUtil {
	public static int sum(int [] data) {
		int sum = 0 ; 
		for (int temp : data) {
			sum += temp ;
		}
		return sum ;
	}
}
public class ArrayDemo {
	public static void main(String args[]) {
		System.out.println(ArrayUtil.sum(new int [] {1,2,3})) ;
	}
}

上述代碼可以實現(xiàn)任意多個數(shù)字的參數(shù)內(nèi)容傳遞,但是與實際的要求并不符合,實際要求的是可以傳遞任意多個參數(shù),而不是一個數(shù)組。

從JDK1.5開始為了方便開發(fā)組進行可變參數(shù)的定義。

class ArrayUtil {
	public static int sum(int ... data) {	// 變種數(shù)組
		int sum = 0 ; 
		for (int temp : data) {
			sum += temp ;
		}
		return sum ;
	}
}
public class ArrayDemo {
	public static void main(String args[]) {
		System.out.println(ArrayUtil.sum(1,2,3,4)) ;
		System.out.println(ArrayUtil.sum(new int [] {1,2,3})) ;
	}
}
//輸出
10
6

總結:可變參數(shù)的最大作用:在以后進行一些程序類設計或者開發(fā)者調用的時候,利用次種形式可以避免數(shù)組的傳遞操作;可變參數(shù)的本質:依然屬于數(shù)組。

11對象數(shù)組(重點)

之前接觸到的都是基本數(shù)據(jù)類型定義的數(shù)組;Java程序中各種數(shù)據(jù)類型都可以成為數(shù)組類型,所以類也可以成為數(shù)組類型:對象數(shù)組。

動態(tài)初始化: 類 對象數(shù)組名稱 【】 = new 類 【長度】;

靜態(tài)初始化: 類 對象數(shù)組名稱 【】 = new 類 【】{實例化對象,實例化對象,… };

動態(tài)初始化每個元素為null;

//動態(tài)初始化
class Person {
	private String name ;
	private int age ;
	public Person(String name,int age) {
		this.name = name ;
		this.age = age ;
	}
	public String getInfo() {
		return "姓名:" + this.name + "、年齡:" + this.age ;
	}
	// setter、getter略
}
public class ArrayDemo {
	public static void main(String args[]) {
		Person per [] = new Person[3] ; // 對象數(shù)組
		per[0] = new Person("張三",20) ;
		per[1] = new Person("李四",20) ;
		per[2] = new Person("王五",20) ;
		for (int x = 0 ; x < per.length ; x ++) {
			System.out.println(per[x].getInfo()) ;
		}
	}
}
//靜態(tài)初始化

class Person {
	private String name ;
	private int age ;
	public Person(String name,int age) {
		this.name = name ;
		this.age = age ;
	}
	public String getInfo() {
		return "姓名:" + this.name + "、年齡:" + this.age ;
	}
	// setter、getter略
}
public class ArrayDemo {
	public static void main(String args[]) {
		Person per [] = new Person[] {
			new Person("張三",20) ,
			new Person("李四",20) ,
			new Person("王五",20)} ; // 對象數(shù)組
		for (int x = 0 ; x < per.length ; x ++) {
			System.out.println(per[x].getInfo()) ;
		}
	}
}

對于對象數(shù)組而言,上述代碼只是更換了一種所謂的數(shù)組定義的類型,但是內(nèi)存圖變得復雜:
在這里插入圖片描述

總結

數(shù)組最大缺陷:

長度是固定的;

優(yōu)勢:線性保存,根據(jù)索引訪問,速度較塊。(時間復雜度為“1”)。

面試題:定義類的時候什么情況下會考慮使用static方法?

在類中不提供任何成員屬性的情況下,如果定義的是普通方法,那么就必須通過實例化對象來進行調用,這樣就會產(chǎn)生許多無用的實例化對象。那么在這樣的情況下會考慮直接定義static方法,這樣可以由類名稱直接調用。

更多關于java相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)組操作技巧總結》、《Java字符與字符串操作技巧總結》、《Java數(shù)學運算技巧總結》、《Java數(shù)據(jù)結構與算法教程》及《Java操作DOM節(jié)點技巧總結

希望本文所述對大家java程序設計有所幫助。

相關文章

  • Spring?Boot?接口加解密功能實現(xiàn)

    Spring?Boot?接口加解密功能實現(xiàn)

    在我們?nèi)粘5腏ava開發(fā)中,免不了和其他系統(tǒng)的業(yè)務交互,或者微服務之間的接口調用;如果我們想保證數(shù)據(jù)傳輸?shù)陌踩?,對接口出參加密,入?yún)⒔饷埽@篇文章主要介紹了Spring?Boot?接口加解密功能實現(xiàn),需要的朋友可以參考下
    2023-04-04
  • Java操作MongoDB數(shù)據(jù)庫的示例代碼

    Java操作MongoDB數(shù)據(jù)庫的示例代碼

    這篇文章主要介紹了Java操作MongoDB的示例代碼,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-04-04
  • 智能手表開發(fā)API接口

    智能手表開發(fā)API接口

    這篇文章主要介紹了智能手表開發(fā)API接口,使用圖靈機器人平臺接口實現(xiàn)天氣預報,非常簡單實用,這里推薦給大家。
    2015-03-03
  • springboot2如何集成ElasticSearch6.4.3

    springboot2如何集成ElasticSearch6.4.3

    這篇文章主要介紹了springboot2如何集成ElasticSearch6.4.3問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot?Profiles?多環(huán)境配置及切換

    SpringBoot?Profiles?多環(huán)境配置及切換

    大部分情況下,我們開發(fā)的產(chǎn)品應用都會根據(jù)不同的目的,所以需要支持不同的環(huán)境,本文主要介紹了SpringBoot?Profiles?多環(huán)境配置及切換,感興趣的可以了解一下
    2021-12-12
  • Maven Plugins報錯的解決方法

    Maven Plugins報錯的解決方法

    本文主要介紹了Maven Plugins報錯的解決方法,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • SpringBoot詳細探究講解默認組件掃描

    SpringBoot詳細探究講解默認組件掃描

    在項目中我們創(chuàng)建了Controller,這個Controller是如何被spring自動加載的呢?為什么Controller必須放在啟動類的同級目錄下呢
    2022-06-06
  • java工具類StringUtils使用實例詳解

    java工具類StringUtils使用實例詳解

    這篇文章主要為大家介紹了java工具類StringUtils使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Java調用groovy腳本的方式分享

    Java調用groovy腳本的方式分享

    Groovy?是一種基于?JVM?的動態(tài)語言,與?Java?語言緊密集成,可以很方便地在?Java?項目中使用。本文為大家整理了Java調用groovy腳本的幾種方式,希望對大家有所幫助
    2023-04-04
  • 在Java中關閉SQL執(zhí)行日志來優(yōu)化服務器性能

    在Java中關閉SQL執(zhí)行日志來優(yōu)化服務器性能

    Java應用程序中,數(shù)據(jù)庫操作是一個常見的任務,如果不適當?shù)靥幚鞸QL執(zhí)行日志,可能會導致不必要的性能損失,SQL執(zhí)行日志通常由數(shù)據(jù)庫連接池、ORM框架(如Hibernate、MyBatis)、或者應用服務器的內(nèi)置日志機制生成,本文將探討如何在Java中關閉SQL執(zhí)行日志,提升應用性能和效率
    2024-11-11

最新評論

威海市| 拜泉县| 新泰市| 门头沟区| 天长市| 浙江省| 大邑县| 防城港市| 公安县| 固始县| 同江市| 定兴县| 格尔木市| 邹城市| 新泰市| 绵阳市| 麟游县| 章丘市| 吴堡县| 襄樊市| 通山县| 上林县| 宣化县| 尼玛县| 余庆县| 毕节市| 图片| 望都县| 梁平县| 习水县| 万山特区| 兴义市| 丰台区| 甘孜县| 醴陵市| 聂荣县| 沙河市| 安丘市| 隆回县| 镇坪县| 高雄县|