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

Java中數(shù)組的定義和使用教程(三)

 更新時間:2021年01月14日 17:31:14   作者:mrbacker  
這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的定義和使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

數(shù)組排序

在很多的面試題上都會出現(xiàn)數(shù)組排序的操作形式。但是這個時候你千萬別寫上:java.util.Arrays.sort(數(shù)組)。而這種排序都是以升序為主。

基礎(chǔ)的排序操作:

范例: 冒泡排序

public class ArrayDemo {
	public static void main(String args[]) {
		int data[] = new int[] {9, 3, 1, 5, 4, 2, 7, 8, 6, 0};
		sort(data);
		printArray(data);
	}

	public static void sort(int arr[]) { //實現(xiàn)數(shù)組排序
		for(int x = 0; x < arr.length - 1; x++) {
			for(int y = 0; y < arr.length - x - 1; y++) {
				if(arr[y] > arr[y+1]) {
					int temp = arr[y];
					arr[y] = arr[y+1];
					arr[y+1] = temp;
				}
			}
		}
	}
	//定義一個專門進行數(shù)組輸出的方法
	public static void printArray(int temp[]) {
		for (int i = 0; i < temp.length; i++) {
			System.out.print(temp[i] + "、");
		}
		System.out.println();
	}
}

數(shù)組轉(zhuǎn)置

所謂的轉(zhuǎn)置最簡單的理解就是首尾交換。而如果要想實現(xiàn)這樣的交換有兩種實現(xiàn)思路。

思路一:開辟一個新的等長的數(shù)組,而后將原始數(shù)組倒序保存進去;

public class ArrayDemo {
	public static void main(String args[]) {
		int data[] = new int[] {9, 3, 1, 5, 4, 2, 7, 8, 6, 0};
		data = reverse(data); //反轉(zhuǎn)
		printArray(data);
	}
	public static int [] reverse(int arr[]) { 
		int temp[] = new int[arr.length];
		int foot = 0;
		for(int x = arr.length - 1; x >= 0; x--) {
			temp[foot++] = arr[x];
		}
		return temp;
	}
	//定義一個專門進行數(shù)組輸出的方法
	public static void printArray(int temp[]) {
		for (int i = 0; i < temp.length; i++) {
			System.out.print(temp[i] + "、");
		}
		System.out.println();
	}
}

使用此類模式實現(xiàn)的最大問題在于開辟了兩塊相同的堆內(nèi)存空間,所以造成空間浪費。

思路二:在一個數(shù)組上完成轉(zhuǎn)換

public class ArrayDemo {
	public static void main(String args[]) {
		int data[] = new int[] {9, 3, 1, 5, 4, 2, 7, 8, 6, 0};
		reverse(data); //反轉(zhuǎn)
		printArray(data);
	}

	public static void reverse(int arr[]) {
		int center = arr.length / 2; //轉(zhuǎn)換次數(shù)
		int head = 0; //頭部開始索引
		int tail = arr.length - 1; //尾部開始索引
		for(int x = 0; x < center; x++) {
			int temp = arr[head];
			arr[head] = arr[tail];
			arr[tail] = temp;
			head++;
			tail--;
		}
	}
	//定義一個專門進行數(shù)組輸出的方法
	public static void printArray(int temp[]) {
		for (int i = 0; i < temp.length; i++) {
			System.out.print(temp[i] + "、");
		}
		System.out.println();
	}
}

這種轉(zhuǎn)換只需要根據(jù)數(shù)組長度 ÷ 2即可。

如果要進行二維數(shù)組的原地轉(zhuǎn)置,那么肯定有一個前提:行列要相等。

范例: 保證中間軸不變(x = y)

public class ArrayDemo {
	public static void main(String args[]) {
		int data[][] = new int[][] {{1, 2, 3}, {4, 5, 6},{7, 8, 9}};
		reverse(data); //反轉(zhuǎn)
		printArray(data);
	}

	public static void reverse(int arr[][]) {
		for(int x = 0; x < arr.length; x++) {
			for(int y = x; y < arr[x].length; y++) {
				if(x != y) {
					int temp = arr[x][y];
					arr[x][y] = arr[y][x];
					arr[y][x] = temp;
				}
			}
		}
	}
	//定義一個專門進行數(shù)組輸出的方法
	public static void printArray(int temp[][]) {
		for (int i = 0; i < temp.length; i++) {
			for(int j = 0; j < temp[i].length; j++) {
				System.out.print(temp[i][j] + "、");
			}
			System.out.println();
		}
		System.out.println();
	}
}

二分查找法

如果現(xiàn)在要求在一個指定的數(shù)組之中查詢一個數(shù)據(jù)的位置,那么現(xiàn)在可能想到的最簡化的實現(xiàn),整體數(shù)組遍歷。

范例: 順序查找

public class ArrayDemo {
	public static void main(String args[]) {
		int data[] = new int[] {1, 2, 3, 4, 5, 6, 7, 8};
		int search = 7;
		System.out.println(index(data, search));
	}
	public static int index(int arr[], int key) {
		for(int x = 0; x < arr.length; x++) {
			if(arr[x] == key)
				return x;
		}
		return -1;
	}
}

這個的時間復(fù)雜度是n,也就是說所有的數(shù)組中的數(shù)據(jù)都需要進行一次遍歷,這樣才能確認(rèn)所需要查找的數(shù)據(jù)是否存在,那么現(xiàn)在如果想進行更快速地查找,最好的做法是進行二分查找(折半查找)。

范例: 實現(xiàn)二分查找(采用遞歸)

public class ArrayDemo {
	public static void main(String args[]) {
		int data[] = new int[] {1, 2, 3, 4, 5, 6, 7, 8};
		int search = 7;
		System.out.println(index(data, search));
	}
	public static int binarySearch(int arr[], int from, int to, int key) {
		if(from < to) {
			int mid = from / 2 + to / 2; //確定中間點
			if(arr[mid] = key) { //數(shù)據(jù)找到了
				return mid; // 取得當(dāng)前索引
			}else if(key < arr[mid]) {
				return binarySearch(arr, from, mid - 1; key);
			}
			else(key > arr[mid]){
				return binarySearch(arr, mid + 1, to, key);
			}
		}
		return -1;
	}
}

但是這些都是屬于數(shù)據(jù)結(jié)構(gòu)課程的范圍,是邏輯思維訓(xùn)練。

對象數(shù)組(核心)

在之前所定義的數(shù)組都屬于基本數(shù)據(jù)類型數(shù)組,那么對象也可以將其定義為數(shù)組,這樣的操作形式稱為對象數(shù)組。對象數(shù)組往往是以引用數(shù)據(jù)類型為主的定義,例如:類、接口,而且對象數(shù)組也分為兩種定義格式。

  • 對象數(shù)組動態(tài)初始化:類名稱 對象數(shù)組名稱[] = new 類名稱[長度];
  • 對象數(shù)組靜態(tài)初始化:類名稱 對象數(shù)組名稱[] = new 類名稱[]{實例化對象,…};

范例: 對象數(shù)組的動態(tài)初始化

class Person {
	private String name;
	private int age;

	public Person(String n, int a) {
		name = n;
		age = a;
	}
	public String getInfo() {
		return "姓名:" + name + ",年齡:" + age;
	}
}
public class ArrayDemo {
	// 動態(tài)初始化之后對象數(shù)組中的每一個元素都是其對象數(shù)據(jù)類型的默認(rèn)值
	public static void main(String args[]) {
		Person per[] = new Person[3]; //動態(tài)初始化
		per[0] = new Person("張三", 1);
		per[1] = new Person("王五", 2);
		per[2] = new Person("李四", 4);
		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 n, int a) {
		name = n;
		age = a;
	}
	public String getInfo() {
		return "姓名:" + name + ",年齡:" + age;
	}
}
public class ArrayDemo {
	// 動態(tài)初始化之后對象數(shù)組中的每一個元素都是其對象數(shù)據(jù)類型的默認(rèn)值
	public static void main(String args[]) {
		Person per[] = new Person[] {
		new Person("張三", 1), 
		new Person("王五", 2),
		new Person("李四", 4)
		}; //動態(tài)初始化
		for(int x = 0; x < per.length; x++) {
			System.out.println(per[x].getInfo());
		}
	}
}

每一個對象可以保存更多的的屬性,所以對象數(shù)組保存的內(nèi)容要比基本數(shù)據(jù)類型更多。那么應(yīng)用的也就更多。所有的開發(fā)必定都存在有對象數(shù)組的概念。

總結(jié)

到此這篇關(guān)于Java中數(shù)組的定義和使用的文章就介紹到這了,更多相關(guān)Java數(shù)組的定義和使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Map中實現(xiàn)key唯一不重復(fù)操作

    在Map中實現(xiàn)key唯一不重復(fù)操作

    這篇文章主要介紹了在Map中實現(xiàn)key唯一不重復(fù)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java編程實現(xiàn)非對稱加密的方法詳解

    Java編程實現(xiàn)非對稱加密的方法詳解

    這篇文章主要介紹了Java編程實現(xiàn)非對稱加密的方法,簡單講述了非對稱加密的概念、原理,并結(jié)合實例形式分析了java實現(xiàn)DH加密解密、RSA加密解密、ElGamal加密等具體操作技巧,需要的朋友可以參考下
    2017-08-08
  • Spring 實現(xiàn)給Bean屬性注入null值

    Spring 實現(xiàn)給Bean屬性注入null值

    這篇文章主要介紹了Spring 實現(xiàn)給Bean屬性注入null值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot項目中使用@Scheduled讀取動態(tài)參數(shù)

    SpringBoot項目中使用@Scheduled讀取動態(tài)參數(shù)

    這篇文章主要介紹了SpringBoot項目中使用@Scheduled讀取動態(tài)參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 深入Java對象的地址的使用分析

    深入Java對象的地址的使用分析

    本篇文章介紹了,Java對象的地址的使用分析。需要的朋友參考下
    2013-05-05
  • Java 調(diào)整格式日志輸出

    Java 調(diào)整格式日志輸出

    本文主要介紹Java 的日志輸出格式,在開發(fā)java的時候會經(jīng)??慈罩具M行調(diào)試或者查看錯誤,這里給大家介紹日志輸出調(diào)整格式,以便大家看日志的時候更加方便,
    2016-07-07
  • Rxjava+Retrofit+MVP實現(xiàn)購物車功能

    Rxjava+Retrofit+MVP實現(xiàn)購物車功能

    這篇文章主要為大家詳細(xì)介紹了Rxjava+Retrofit+MVP實現(xiàn)購物車功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java源碼解析CopyOnWriteArrayList的講解

    Java源碼解析CopyOnWriteArrayList的講解

    今天小編就為大家分享一篇關(guān)于Java源碼解析CopyOnWriteArrayList的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • java返回集合為null還是空集合及空集合的三種寫法小結(jié)

    java返回集合為null還是空集合及空集合的三種寫法小結(jié)

    這篇文章主要介紹了java返回集合為null還是空集合及空集合的三種寫法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解Spring中接口的bean是如何注入的

    詳解Spring中接口的bean是如何注入的

    這篇文章主要介紹了詳解Spring中接口的bean是如何注入的的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論

黄骅市| 德惠市| 金寨县| 获嘉县| 鸡西市| 上栗县| 嘉荫县| 五华县| 磐安县| 濉溪县| 和龙市| 林周县| 恩施市| 嵩明县| 杭锦后旗| 阳朔县| 阿拉善盟| 六安市| 丰县| 景泰县| 克东县| 濮阳县| 获嘉县| 武宁县| 赞皇县| 屏东市| 耿马| 靖边县| 红桥区| 鄂托克旗| 紫云| 武平县| 道真| 福鼎市| 靖远县| 灌云县| 云林县| 华阴市| 灵宝市| 安岳县| 兴隆县|