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数据结构与算法之学习路线

Java数据结构与算法之Array数组

Java数据结构与算法之LinkedList单链表

Java数据结构与算法之Queue队列

Java数据结构与算法之stack栈





你可能感兴趣的:(JAVA)