基于java的數據結構學習——泛型動態數組的封裝

public class Array<E> {private E[] data;private int size;// 構造函數public Array(int Capacity){data = (E[])new Object[Capacity];size = 0;}// 默認構造函數public Array(){this(10);}// 判斷數組是否已滿public boolean isFull(){return size == data.length;}// 判斷數組是否為空public boolean isEmpty(){return size == 0;}// 找出元素 e 的下標,沒有返回 -1public int find(E e){for(int i = 0; i < size; i++){if(data[i].equals(e)){return i;}}return -1;}// 判斷數組是否包含元素 epublic boolean contain(E e){return find(e) == -1 ? false : true ;}// 獲取數組的大小 sizepublic int getSize(){return size;}// 獲取數組的容量 Capacitypublic int getCapacity(){return data.length;}// 獲取下標為 index 位置的元素 epublic E get(int index){// 判斷傳入下標是否合法if(index < 0 || index >= size){throw new IllegalArgumentException("Get Failed! Index is illegal!");}return data[index];}// 獲取數組的第一個元素public E getFirst(){return get(0);}// 獲取數組的最后一個元素public E getLast(){return get(size - 1);}// 設置下標 index 位置處的元素為 epublic void set(int index, E e){// 判斷傳入下標是否合法if(index < 0 || index >= size){throw new IllegalArgumentException("Set Failed! Index is illegal!");}data[index] = e;}// 在下標為 index 位置插入元素 epublic void add(int index, E e){// 判斷傳入下標是否合法if(index < 0 || index > size){throw new IllegalArgumentException("Add Failed! Index is illegal!");}// 如果數組已滿,則重新分配空間if (isFull()){resize(data.length * 2);}// 在 index 位置插入元素 efor (int i = size - 1; i >= index; i--){data[i + 1] = data[i];}data[index] = e;size++;}// 在數組頭插入元素 epublic void addFirst(E e){add(0, e);}// 在數組尾插入元素 epublic void addLast(E e){add(size, e);}// 刪除下標為 index 位置處的元素public E remove(int index){// 判斷下標是否合法if (index < 0 || index >= size){throw new IllegalArgumentException("Remove Failed! Index is illegal!");}E tmp = data[index];for(int i = index; i < size - 1; i++){data[i] = data[i + 1];}size--;// 判斷是否需要重新分配空間if (size == data.length / 4 && data.length / 2 != 0){resize(data.length / 2);}return tmp;}// 刪除數組頭部元素public E removeFirst(){return remove(0);}// 刪除數組尾部元素public E removeLast(){return remove(size - 1);}// 刪除元素 epublic void removeElement(E e){int index = find(e);if (index != -1){remove(index);}}// 重新分配空間大小public void resize(int newCapacity){if (newCapacity <= 0){throw new IllegalArgumentException("Resize Failed! NewCapacity is illegal!");}E[] newData = (E[])new Object[newCapacity];for (int i = 0; i < size; i++){newData[i] = data[i];}data = newData;}// 重載打印函數@Overridepublic String toString(){StringBuilder res = new StringBuilder();res.append(String.format("Array size = %d, Capacity = %d\n", size, data.length));res.append("[");for (int i = 0; i < size; i++){res.append(data[i]);if (i != size - 1)res.append(", ");}res.append("]");return res.toString();}public static void main(String[] args){Array<Integer> arr = new Array<>();for(int i = 0 ; i < 10 ; i ++)arr.addLast(i);System.out.println(arr);arr.add(1, 100);System.out.println(arr);arr.addFirst(-1);System.out.println(arr);arr.remove(2);System.out.println(arr);arr.removeElement(4);System.out.println(arr);arr.removeFirst();System.out.println(arr);for(int i = 0 ; i < 4 ; i ++){arr.removeFirst();System.out.println(arr);}}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448166.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448166.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

POJ1207-The 3n + 1 problem

http://poj.org/problem?id1207 注意輸入兩個數的大小&#xff0c;水。。。 #include <stdio.h> int main(void) {int a,b,m,count,i,max;while(scanf("%d%d",&a,&b)!EOF){printf("%d %d ",a,b);if(a>b){ma;ab;bm;}max0;for(ia;i<b;i…

解決:vue.esm.js?efeb:591 [Vue warn]: Do not use built-in or reserved HTML elements as component id: me

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 報錯如題&#xff1a; vue.esm.js?efeb:591 [Vue warn]: Do not use built-in or reserved HTML elements as component id: menu …

JetBrains 系列軟件漢化包

Android Studio 3.0-3.1 漢化包 CLion 2018.1 漢化包 GoLand 2017.3.2-2018.1 漢化包 IntelliJ IDEA 2017.3-2018.1 漢化包 PhpStorm 2017.3-2018.1 漢化包 PyCharm 2017.3-2018.1 漢化包 RubyMine 2017.3.2-2018.1 漢化包 WebStorm 2017.3-2018.1 漢化包 下載完畢后&#xff…

JAXP進行DOM和SAX解析

1.常用XML的解析方式&#xff1a;DOM和SAX 1&#xff09;DOM思想&#xff1a;將整個XML加載內存中&#xff0c;形成文檔對象&#xff0c;所以對XML操作都對內存中文檔對象進行。 2&#xff09;SAX思想&#xff1a;一邊解析&#xff0c;一邊處理&#xff0c;一邊釋放內存資源---…

VScode 格式化代碼快捷鍵、修改快捷鍵

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 請看仔細快捷鍵是&#xff1a; shift alt F // 我是從 eclipse 轉的 idea &#xff0c;現在再用 vscode , 一直條件反射的按的 c…

信息學競賽的常數優化、常見問題、代碼風格相關

在查std::ios::sync_with_stdio(false);有關信息時&#xff0c;看到https://blog.csdn.net/qq_33583069/article/details/53086992 這篇博客&#xff0c;對其中一些問題比較感興趣&#xff0c;整理了下相關資料&#xff1a; isdigit()https://blog.csdn.net/cupidove/article/d…

TCP報文格式詳解

TCP協議只定義了一種報文格式 建立、拆除連接、傳輸數據使用同樣的報文 TCP報文格式 TCP報文段首部&#xff08;20個字節&#xff09; 源端口和目的端口&#xff1a;各占2個字節&#xff0c;16比特的端口號加上32比特的IP地址&#xff0c;共同構成相當于傳輸層服務訪問點的地址…

Vue 生命周期中 mounted( ) 和 created( ) 的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、什么是生命周期&#xff1f; 用通俗的語言來說&#xff0c;就是Vue中實例或者組件從創建到消滅中間經過的一系列過程。雖然不太嚴謹…

科目三考試

馬上要考大路了&#xff0c;考科目三考試必須做到什么事啊&#xff1f; 2012-5-30 8:46:23檢舉  注意事項   1、上車后確認車上電腦信息后&#xff0c;關好車門&#xff0c;系好安全帶&#xff0c;打左轉向燈起步。   2、直線行駛路段必須使用二檔行駛。否則將被判…

基于java的數據結構學習——數組實現的棧以及簡單應用

棧 Stack 棧是一種線性結構相比數組&#xff0c;棧對應的操作是數組的子集只能從一端添加元素&#xff0c;也只能從一端取出元素這一端稱為棧頂棧是一種后進先出的數據結構 棧的應用 無處不在的Undo操作&#xff08;撤銷&#xff09;括號匹配&#xff08;編譯器&#xff09;程…

Python 總結題目

題例1 # 打印如下長方形&#xff1a; ************ * * * * ************ # 打印如下長方形&#xff1a; print("*****************") print("* *") print("* *") print("****************…

vue : 引入、安裝 jquery 、bootstrap

一、vue安裝jquery 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、新建一個vue工程。 2、在項目文件夾下&#xff0c;使用命令 npm install jquery --save-dev 引入jquery。 np…

2013駕考科目三考試難點解析

原來規定科目三考試上車準備、起步、直線行駛等13個道路駕駛技能項目。123號令實施后&#xff0c;科目三考試分兩部分。道路駕駛技能考試項目增加到16項&#xff0c;增加了加減擋位操作、路口左轉彎、路口右轉彎3個考試項目&#xff0c;駕駛里程也增加。如何順利通過2013駕考科…

leetcode練習——棧(1)

題號20&#xff1a;Invalid Parentheses Given a string containing just the characters (, ), {, }, [ and ], determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets.Open brackets must be…

Asp.Net MVC 頁面代碼壓縮篩選器-自定義刪除無效內容

Asp.Net MVC 頁面代碼壓縮篩選器 首先定義以下篩選器&#xff0c;用于代碼壓縮。 /*頁面壓縮 篩選器*/public class WhiteSpaceFilter : Stream{private Stream _shrink;private Func<string, string> _filter;public WhiteSpaceFilter(Stream shrink, Func<string, s…

基于java的數據結構學習——數組實現的隊列和循環隊列及性能對比

隊列 Queue 隊列也是一種線性結構相比數組&#xff0c;隊列對應的操作是數組的子集只能從一端&#xff08;隊尾&#xff09;添加元素&#xff0c;只能從另一端&#xff08;隊首&#xff09;取出元素隊列是一種先進先出的數據結構 隊列的實現及復雜度分析 Queue<E> voi…

新手如何準確的控制油門

日常練車還不賴&#xff0c;可是一換車就容易加大油門兒&#xff0c;有啥子辦法能美好的扼制油呢?和調的坐位有關系嗎? 答&#xff1a;油門兒跟剎車被視為交通工具扼制的魂靈。交通工具引擎發動機的油門兒&#xff0c;通常是靠踏板來扼制的&#xff0c;也稱加速踏板&#xff…

vue 項目:文件夾 結構 、配置詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 項目配置 首先&#xff0c;在確定好使用的框架和組件庫后&#xff0c;先要大致了解它們&#xff0c;做到文檔基本熟悉。本次開發使用…

hdoj2553(N皇后問題)

Problem : 2553 ( N皇后問題 ) Judge Status : Accepted RunId : 2619754 Language : G Author : huwenbiao Code Render Status : Rendered By HDOJ G Code Render Version 0.01 Beta/***************************************************************\ *Author:Hu…

基于java的數據結構學習——數組實現的棧以及簡單應用C++實現

基于java的數據結構學習——數組實現的棧以及簡單應用的 C 實現 源碼&#xff1a; // // Created by PC-Saw on 2019/1/3. //#ifndef DATA_STRUCTURE_ARRAYSTACK_H #define DATA_STRUCTURE_ARRAYSTACK_H#include "Stack.h" #include "MyArray.h"template&…