Java中提供了java.util.Arrays
包,包含了一些操作數組的常用方法
什麼是包?
例如做一碗油潑面, 需要先和麪, 擀麪, 扯出麪條, 再燒水, 下鍋煮熟, 放調料, 潑油.
但是其中的 “和麪, 擀麪, 扯出麪條” 環節難度比較大, 不是所有人都能很容易做好. 於是超市就提供了一些直接已
經扯好的麪條, 可以直接買回來下鍋煮. 從而降低了做油潑面的難度, 也提高了製作效率.
程序開發也不是從零開始, 而是要站在巨人的肩膀上.
已經有大量的標準庫(JDK提供好的代碼)和海量第三方庫(其他機構組織提供的代碼)供我們使用,這些代碼就放在一個一個的包中。
1.數組轉字符串
public class LearnArrays {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
System.out.println(arrToString(arr));
System.out.println(Arrays.toString(arr));
}
public static String arrToString(int[] arr){
String ret="[";
for(int i=0;i<arr.length;i++){
ret+=arr[i];
if(i!=arr.length-1){
ret+=", ";
}
}
ret+="]";
return ret;
}
}
結果:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
2.數組拷貝
這裏我介紹一個數組拷貝的函數
public class LearnArrays {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
int[] newarr=Arrays.copyOf(arr, arr.length);
System.out.println(Arrays.toString(newarr));
}
}
copyOf 是將數組進行了 深拷貝, 即又創建了一個數組對象, 拷貝原有
數組中的所有元素到新數組中. 因此, 修改原數組, 不會影響到新數組.
自我實現:
import java.util.Arrays;
/**
* LearnArrays
*/
public class LearnArrays {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
int[] newarr=Arrays.copyOf(arr, arr.length);
System.out.println(Arrays.toString(newarr));
int[] newarr2=copyarr(arr);
System.out.println(Arrays.toString(newarr2));
}
public static int[] copyarr(int[] arr){
int[] newarr2=new int[arr.length];
for(int i=0;i<newarr2.length;i++){
newarr2[i]=arr[i];
}
return newarr2;
}
}
3.找出數組最大元素
打擂臺思想解決:
import java.util.Arrays;
/**
* LearnArrays
*/
public class LearnArrays {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
LearnArrays maxvalue=new LearnArrays();
System.out.println(maxvalue.findMax(arr));
}
public int findMax(int[] arr){
int maxValue=arr[0];
for(int i=0;i<arr.length;i++){
if(arr[i]>arr[0]){
maxValue=arr[i];
}
}
return maxValue;
}
}
4.求平均數
public class LearnArrays {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
LearnArrays arrays=new LearnArrays();
System.out.println(arrays.Average(arr));
}
public double Average(int[] arr){
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
return (double)sum / (double)arr.length;
}
}
結果注意用double來表示
5.查找數組中指定元素(二分查找法)
適用於有序數組
import java.util.Arrays;
/**
* LearnArrays
*/
public class LearnArrays {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
System.out.println(binarySearch(arr, 5));
}
public static int binarySearch(int[] arr,int tofind){
int left=0;
int right=arr.length-1;
int mid;
while(left<=right){
mid=(left+right)/2;
if(tofind<arr[mid]){
right=mid-1;
}
else if(tofind>arr[mid]){
left=mid+1;
}
else{
return mid;
}
}
return -1;
}
}
6.檢查數組的有序性
給定一個整型數組,判斷是否有序。
import java.util.Arrays;
/**
* LearnArrays
*/
public class LearnArrays {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
// System.out.println(binarySearch(arr, 5));
System.out.println(isSort(arr));
}
public static boolean isSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
if(arr[i]>arr[i+1]){
return false;
}
}
return true;
}
}
注意:在數組比較的時候,比較arr.length-1次,否則會下標越界拋出異常
7.冒泡排序
public class LearnArrays {
public static void main(String[] args) {
int[] arr={9,5,2,7};
LearnArrays arrays=new LearnArrays();
arrays.bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
public void bubbleSort(int[] arr){
for(int bound=0;bound<arr.length;bound++){
for(int cur=arr.length-1;cur>bound;cur--){
if(arr[cur-1]>arr[cur]){
int tmp=arr[cur];
arr[cur]=arr[cur-1];
arr[cur-1]=tmp;
}
}
}
}
}
Java內置了更高效的排序算法
int[] arr={9,5,2,7};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
8.數組逆序:
public class LearnArrays {
public static void main(String[] args) {
int[] arr={9,5,2,7};
reverse(arr);
System.out.println(Arrays.toString(arr));
}
public static void reverse(int[] arr){
int left=0;
int right=arr.length-1;
while(left<right){
int tmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
left++;
right--;
}
}
}
9.數組數字排列
public class LearnArrays {
public static void main(String[] args) {
int[] arr={9,5,2,7};
LearnArrays arrays=new LearnArrays();
arrays.transform(arr);
System.out.println(Arrays.toString(arr));
}
public void transform(int[] arr){
for(int bound=0;bound<arr.length;bound++){
for(int cur=arr.length-1;cur>bound;cur--){
if(arr[cur-1]%2==0&&arr[cur]%2!=0){
int tmp=arr[cur];
arr[cur]=arr[cur-1];
arr[cur-1]=tmp;
}
}
}
}
}