1. 程式人生 > 程式設計 >Java自定義陣列列表的實現操作

Java自定義陣列列表的實現操作

主要目的:

解決ArrayList 類不能改變大小的問題,主要實現陣列列表動態調整大小。

1、陣列型別如何選擇?由於我們不清楚陣列中具體存入什麼型別的資料, 我們可以宣告一個物件Object [ ] ,這樣,陣列列表就可以儲存任何型別的資料了。

2、泛型<> :如果定義的一個類或介面有一個或多個型別變數,則可以使用泛型。

ArrayList<String>本身就是泛型,各種型別的變數都可以組裝成對應的List,而不必針對每個型別分別實現一個構建ArrayList的類。

泛型字母所代表含義:

E表示集合的元素型別,

K 和 V分別表示表的關鍵字與值的型別 *

T(需要時還可以用臨近的字母 U 和 S)表示“任意型別”

3、實現功能:我們主要實現arraylist的基本的增,刪,改,等功能。

核心思路:主要根據所需求大小進行調整,需要建立一個新的陣列,將老陣列值賦予新陣列再進行詳細的變動。

package com.customArray0905;
public class CustomArraryList<E> {
 Object[] data;
 int Size;

 public int getSize() {
  return Size;
 }

 //返回陣列下標為index的元素的值
 public E get(int index) {
  if(index<0 || index>=Size) {
   throw new IndexOutOfBoundsException();
   //否則return null
  }
  return (E) data[index];
 }

 //自定義更改下標為index的元素值的方法
 public void set(int index,E e) {
  if(index<0 || index>=Size) {
   throw new IndexOutOfBoundsException();
   //否則return null
  }
  data[index] = e;
 }

 public void add(E e) {
  ///建立新物件 容量擴大一個
  Object[] newdata = new Object[Size + 1];
  //將array中的元素重新存入更新容量後的newArray陣列中去
  for (int i = 0; i < Size; i++) {
   newdata[i] = data[i];
  }
  data = newdata;
  data[Size++] = e;
 }
 //自定義移除下標為index的元素的方法
 public void remove(int index) {
  ///建立新物件 容量減少一個
  Object[] newdata = new Object[Size - 1];
  int j = 0;

  //判斷index大小是否合適存在陣列中
  if(index<0 || index>=Size) {
   throw new IndexOutOfBoundsException();
   //否則return null
  }
   //得到老物件裡下標之前的所有元素並存入新物件
   for (int i = 0; i < index; i++) {
    newdata[j] = data[i];
    j++;
   }
   //得到老物件裡下標之後的所有元素並存入新物件
   for (int i = index + 1; i < Size; i++) {
    newdata[j] = data[i];
    j++;
   }
   data = newdata;
   Size--;
 }
 //清除array中所有的元素
 public void clear() {
  for(int i = 0;i<Size;i++) {
   data[i] = null;
  }
  Size = 0;
 }

 public static void main(String[] args) {
  CustomArraryList<String> myList = new CustomArraryList<>();
  //Add
  System.out.println("測試1,ADD方法");
  myList.add("1");
  myList.add("2");
  myList.add("3");
  myList.add("4");
  myList.add("5");
  for (int i = 0; i < myList.getSize(); i++) {
   System.out.println(myList.get(i));
  }

  //Remove,Set
  myList.remove(2);
  myList.set(3,"7");
  System.out.println("測試2,移除index=2的資料,並設定index=3的資料值為7,");
  for (int i = 0; i < myList.getSize(); i++) {
   System.out.println(myList.get(i));
  }

  //Clear
  myList.clear();
  myList.add("1");
  for (int i = 0; i < myList.getSize(); i++) {
   System.out.println("測試3,clear方法,僅剩下新新增資料 "+myList.get(i));
  }
  //丟擲錯誤
  System.out.println("測試4,丟擲set錯誤");
  myList.set(2,"2");

 }
}

測試結果:

Java自定義陣列列表的實現操作

補充知識:java Arrays快速列印陣列的資料元素列表

1、Arrays.toString

用來快速列印一維陣列的資料元素列表

2、Arrays.deepToString 快速列印一個二維陣列的資料元素列表

public static strictfp void main(String[] args) {
 
 String[][] arr = {{"aaa","bbb"},{"ccc"}};
 for(int x=0;x<arr.length;x++){
  for(int y=0;y<arr[x].length;y++){
  System.out.println(arr[x][y]);
  }
 }
 
 //Arrays.deepToString 快速列印一個二維陣列的資料元素列表 
 System.out.println(Arrays.deepToString(arr));
 }

以上這篇Java自定義陣列列表的實現操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。