1. 程式人生 > >Java資料結構與演算法之Array陣列

Java資料結構與演算法之Array陣列

目錄:
1.陣列概述
2.java中陣列的初始化
3.java中針對陣列的API
4.陣列排序
5.字串轉陣列(char[]/int[])
6.二維陣列的操作

1.陣列概述
陣列是重要的資料結構之一,以線性結構來儲存固定數量大小,資料型別相同的資料

2.java中陣列的初始化
(1)宣告和初始化分開
		//宣告
		//int[] a;
		int a[];
		//申請空間,int陣列預設初始值為0
		a= new int[5];
		//根據下標單個賦值初始化
		a[0] = 2;
		//迴圈賦值
		for (int i = 0; i < a.length; i++) {
			a[i] = i;
		}	

(2)宣告初始化同時進行
		//int [] c ={1,3,4,5,6};
		//int c[] ={1,3,4,5,6};
		int c[] = new int[]{1,3,4,5,6};

3.java中針對陣列的API
(1)java中陣列類Arrays的繼承關係
		java.lang.Object 
			java.util.Arrays 

(2)常用方法

asList(T... a) //將輸入的引數轉換成List型別的資料

binarySearch(Object[] a, Object key)//通過二分查詢方法,在指定的陣列中查詢指定的元素,並返回下標

copyOf(Object[] original, int newLength) //將陣列複製到另外一個數組中

copyOfRange(Object[] original, int from, int to) //將給定陣列的給定區間元素複製到新陣列中

equals(Object[] a, Object[] a2) //判斷兩個陣列是否相等,也就是長度和元素值是否一致


deepEquals(Object[] a1, Object[] a2) //常用來比較多維陣列

fill(Object[] a, Object val) //將指定的基本資料型別值分配到指定基本型別陣列的每一項

fill(Object[] a, int fromIndex, int toIndex, Object val) //指定分配到指定的區間

sort(Object[] a)//增序排列

sort(Object[] a, int fromIndex, int toIndex) //指定需要排序的陣列區間

toString(Object[] a) //轉換成字串型別

4.陣列排序
ps:java中對陣列的排序有兩種方法,第一種是直接使用API中的sort(Object[] a)方法進行排序或者採用演算法中的
各類演算法,比如:氣泡排序,選擇排序,插入排序,歸併排序等等。


(1)API排序案例
package com.datastructure.test;


import java.util.Arrays;
import java.util.List;


public class ApiArray {
  public static void main(String[] args){
	  int[] a = {4,6,78,8,34,56,26};
	  sortByApi(a);
  }
  
  
/*
 * 通過api直接對陣列排序
 */
  public static void sortByApi(int[] a){
	  System.out.println("排序前陣列:");
	  for (int i = 0; i < a.length; i++) {
		System.out.print(a[i]+"\t");
	}
	  System.out.println();
	  Arrays.sort(a);
	  System.out.println("排序後陣列:");
	  for (int i = 0; i < a.length; i++) {
		System.out.print(a[i]+"\t");
	}	  
  }
}

控臺輸出:
排序前陣列:
4	6	78	8	34	56	26	
排序後陣列:
4	6	8	26	34	56	78	

(2)演算法排序之氣泡排序

兩種寫法,第二種方法是每一次迴圈比較都迴圈n-1次,相比於第一種方法,沒那麼高效。
2.1) 第一種:
package com.datastructure.test;


import java.util.Arrays;
import java.util.List;


public class ApiArray {
  public static void main(String[] args){
	  int[] a = {4,6,78,8,34,56,26,2};
	  sortByBubble(a);
  }
  /*
   * 氣泡排序
   */
    public static void sortByBubble(int[] a){
    	int temp,i,j;
  	  System.out.println("排序前陣列:");
  	  for (i = 0; i < a.length; i++) {
  		System.out.print(a[i]+"\t");
  	}
  	  for (i = 1; i < a.length; i++) {
		for (j = 0; j < a.length-i; j++) {
			if (a[j]>a[j+1]) {
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}	
  	  System.out.println();
  	  System.out.println("排序後陣列:");
  	  for (i = 0; i < a.length; i++) {
  		System.out.print(a[i]+"\t");
  	}	  
    }  
}

2.2) 第二種:
	for (i = 1; i < a.length; i++) {
		for (j = 0; j < a.length-1; j++) {
			if (a[j]>a[j+1]) {
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
		

ps:這裡只舉例了一種排序演算法,後面對排序演算法做整體學習的時候再詳細學習其它的排序演算法


5.字串轉陣列(char[]/int[])
(1)字串轉char[]
		str="hellomynameisAndy";
		char [] charArray = str.toCharArray();
		

(2)字串轉int[]
package com.datastructure.test;


public class Array {


	public static void main(String[] args) {
		StringToArray("1234");
	}
/*
 * 字串轉int陣列,這裡要求輸入String全是數值	
 */
	public static void StringToArray(String str){
		char[] ch;
		int [] i;
		int len;
		//string長度
		len = str.trim().length();
		//初始化int陣列
		i=new int[len];
		//通過charAt()取得單個字元轉換成String型別再通過parseInt()轉換成int型別
		for (int j = 0; j < len; j++) {
			i[j] =Integer.parseInt(String.valueOf(str.charAt(j)));
		}		
		//int陣列輸出
		System.out.println("int陣列輸出:");
		for (int j = 0; j < i.length; j++) {
			System.out.print(i[j]+"\t");
		}
				
	}
}

6.二維陣列的操作
(1)二維陣列的宣告(以int陣列為例)
		int a[][];
		int [][] b;


(2)二維陣列的初始化
		int a[][];		
		a = new int[][]{{12,3,34},{23,34,56,78}};
		int[][] c ={{1,2,3},{34,55,6},{45,678,89}};
		int [][] b;
		b=new int[2][3];
		b[0][0] = 1;
		b[0][1] = 2;
		b[0][2] = 5;
		b[1][0] = 10;
		b[1][1] = 34;
		b[1][2] = 35;	

(3)二維陣列的長度計算
		//計算多少行
		array.length
		//計算每行多少個元素
		array[0].length	

(4)二維陣列的遍歷
package com.datastructure.test;


public class TwoDimensionalArray {
	public static void main(String[] args){
		int row,col;
		//注意初始化字元或字串的時候記得加引號
		int[][] c ={{1,2,3},{34,55,6},{45,678,89}};
		//計算行數和列數,如果已知就用不著了
		row = c.length;
		col = c[0].length;
		System.out.println("二維陣列遍歷輸出:");
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < col; j++) {
				System.out.print(c[i][j]+"\t");
			}
			System.out.println();
		}
	}


}

控制檯輸出結果:
	二維陣列遍歷輸出:
	1	2	3	
	34	55	6	
	45	678	89	

文章:

相關推薦

Java資料結構演算法Array陣列

目錄:1.陣列概述 2.java中陣列的初始化3.java中針對陣列的API4.陣列排序5.字串轉陣列(char[]/int[])6.二維陣列的操作 1.陣列概述陣列是重要的資料結構之一,以線性結構來儲存固定數量大小,資料型別相同的資料 2.java中陣列的初始化(1)宣告

java資料結構演算法平衡二叉樹(AVL樹)的設計實現

關聯文章:   上一篇博文中,我們詳細地分析了樹的基本概念以及二叉查詢樹的實現過程,基於二叉查詢樹的特性,即對於樹種的每個結點T(T可能是父結點),它的左子樹中所有項的值小T中的值,而它的右子樹中所有項的值都大於T中的值。這意味著該樹所有的元素可以用某

Java資料結構演算法資料結構-邏輯結構-集合(四)------集合Collection介面

Java集合類的基本概述: Java集合中主要有兩個大的介面:Collection介面和Map介面,Collection是元素集合,Map是鍵值對集合;其中List和Set繼承了Collection

資料結構演算法有序陣列(2)——in dart

本文比第一篇,採用了類實現。增加了運算子過載等功能。本來有序陣列是不能修改某個位置的值的,因為這樣會打破陣列的有序性;但為了演示,保留了修改的方法,但為此增加了排序。   1 import 'dart:math' show Random; 2 3 final _rnd = R

java資料結構演算法棧(Stack)設計實現

關聯文章:   本篇是java資料結構與演算法的第4篇,從本篇開始我們將來了解棧的設計與實現,以下是本篇的相關知識點: 棧的抽象資料型別   棧是一種用於儲存資料的簡單資料結構,有點類似連結串列或者順序表(統稱線性表),棧與線性表的最大區別是

java資料結構演算法樹基本概念及二叉樹(BinaryTree)的設計實現

關聯文章:   樹博文總算趕上這周釋出了,上篇我們聊完了遞迴,到現在相隔算挺久了,因為樹的內容確實不少,博主寫起來也比較費時費腦,一篇也無法涵蓋樹所有內容,所以後續還會用2篇左右的博文來分析其他內容大家就持續關注吧,而本篇主要了解的知識點如下(還是蠻多

java資料結構演算法順序表連結串列深入分析

關聯文章:   資料結構與演算法這門學科雖然在大學期間就已學習過了,但是到現在確實也忘了不少,因此最近又重新看了本書-《資料結構與演算法分析》加上之前看的《java資料結構》也算是對資料結構的進一步深入學習了,於是也就打算寫一系列的資料結構的博文以便加

java資料結構演算法遞迴思維(讓我們更通俗地理解遞迴)

關聯文章:   本篇是資料結構與演算法的第6篇,從這篇種我們將深入瞭解遞迴演算法,這可能是一篇分水嶺的博文,因為只有在理解遞迴的基礎上,我們才可能更輕鬆地學習樹的資料結構,實際上資料結構系列書籍中遞歸併沒有講得特別通俗易懂,博主目前看過的書籍中分析遞迴

Java資料結構演算法stack棧

目錄:1.棧概述2.陣列實現自定義棧3.連結串列實現自定義棧4.集合實現自定義棧 1.棧概述棧和佇列一樣,也是線性表的一種,它唯一的特點是需要滿足先進後出(FILO)的規則,也就是隻能對棧的一頭進行操作,新增資料 稱為壓棧,移除資料稱為彈棧。而在java中棧的實現可以通過陣

Java資料結構演算法初級篇陣列、集合和散列表

 原始碼下載地址:https://download.csdn.net/download/geduo_83/10913510 之前沒有寫過關於資料結構的文章,那麼今天我們將在本文中介紹最基礎、最簡單的資料結構。 陣列,作為資料結構中最基礎的一個儲存方式,是我們學習一切資料結構

資料結構演算法美專欄學習筆記-陣列

什麼是陣列 陣列(Array)是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。 線性表 線性表就是資料排成像一條線一樣的結構。 常見的線性表結構:陣列,連結串列、佇列、棧等。 非線性表有:二叉樹、圖、堆等。 連續的記憶體空間和相同型別的資料 優點:兩限制使得

資料結構演算法陣列

Q1:為什麼很多程式語言中,陣列都從0開始編號?      舉例說明:      從陣列儲存的記憶體模型上來看,"下標"最確切的定義應該是"偏移(offset)"。前面也講到,如果用a來表示陣列的首地址,a[0]就是偏移為0的位

【Python資料結構演算法Array陣列

Array(陣列) 下圖為6個元素 [15, 6, 12, 9, 13, 20] 的陣列: 陣列是一個盛有單一型別固定數量值的容器類 以0開始的索引 陣列的元素帶編號,編號從0開始,如上圖中,元素6的位置1;而元素15的位置為0 元素的位

資料結構演算法 棧(Stack)的Java實現

 後入先出的資料結構 在 LIFO 資料結構中,將首先處理新增到佇列中的最新元素。 與佇列不同,棧是一個 LIFO 資料結構。通常,插入操作在棧中被稱作入棧 push 。與佇列類似,總是在堆疊的末尾新增一個新元素。但是,刪除操作,退棧 pop ,將始終刪除佇列中相對於

資料結構演算法美(三):陣列

陣列看起來簡單基礎,但是很多人沒有理解這個資料結構的精髓。帶著為什麼陣列要從0開始編號,而不是從1開始的問題,進入主題。 一、 如何實現隨機訪問 1) 陣列是一種線性資料結構,用連續的儲存空間儲存相同型別資料: I) 線性表:陣列、連結串列、佇列、棧 ;非線性表

java資料結構演算法 第2章 陣列

1.建立陣列 在java中建立陣列的方式: String[] aArray = new String[5]; String[] bArray = {“a”,”b”,”c”, “d”, “e”};

Java程式設計師必備-資料結構演算法氣泡排序

氣泡排序基本思想: 首先,將N個元素的第一個和第二個進行比較,如果兩個元素的位置為逆序,則交換位置,進而比較第二個和第三個元素,如此類推,一直比較到第N-1和第N個元素為止。 如同下圖 首先我們在第一趟通過比較,將最大值53移到了最後面,第

js資料結構演算法——陣列基本用法

陣列建立方式: var arr=new Array();                              var arr=new Array(10);                              var  arr=new Array(1,2,3,4,

Java資料結構演算法】| 陣列--天平稱量問題

天平稱量問題 題目: 有12枚硬幣,其中有1枚是假幣,但不知道是重是輕。現給定衣架沒有砝碼的天平,問至少需要多少次稱量才能找到這枚硬幣? 思考: 如何證明某個方案是最少次數? 解析: 隨機將12枚硬幣等分成3份,每份4枚;標記為A,B

JavaScript 資料結構演算法美 - 線性表(陣列、棧、佇列、連結串列)

前言 基礎知識就像是一座大樓的地基,它決定了我們的技術高度。 我們應該多掌握一些可移值的技術或者再過十幾年應該都不會過時的技術,資料結構與演算法就是其中之一。 棧、佇列、連結串列、堆 是資料結構與演算法中的基礎知識,是程式設計師的地基。 筆者寫的 JavaScript 資料結構與演算法之美 系列用