1. 程式人生 > >陣列和向量類

陣列和向量類

陣列是n個相同資料型別的資料元素構成的佔用一塊地址連續的記憶體單元的有限集合,所以線性結構(包括線性表、堆疊、佇列、串、陣列和矩陣)的順序儲存結構實際就是使用陣列來儲存。所以,不像線性表等結構要特意的學習,感覺陣列是我們接觸程式語言開始就拿來即用的東西。

陣列的實現機制(記憶體映像公式):Loc(ai)是ai的記憶體單元,每個元素的位元組數為k。(1)一位陣列中Loc(ai) = Loc(a0)+i*k (0<=i<n)。(2)二維陣列中(m*n),因為儲存單元都是一維的,所以有行主序存放(按照行一行一行元素存)和列主序存放(按照列一列一列元素存放),行主序:Loc(aij) = Loc(a00)+(i*n+j)*k (0<=i<m,0<=j<n)。陣列中一但給定了首地址,系統就可以通過計算元素記憶體地址在等時間記憶體取陣列中任意一個元素,所以稱這種特性的儲存結構為隨機儲存結構。

對於陣列,不單獨進行舉例,接著看向量類。

運用陣列時需要給定陣列長度,但是當需要擴充陣列長度時,系統不能直接提供支援,需要自己實現。java中為我們提供了向量類Vector在java.util包中,擴充了陣列功能可以擴充長度並把原陣列元素複製到新的陣列中。(其實java1.2版本後就很少用Vector了,多用ArrayList)

接下來自定義MyVector學習向量類(注意區別數學中的向量)

package ArrayVectorSetMatrix;
/**
* @author sun
* 建立時間:2017年4月7日上午11:40:57
*/
/*自定義實現java.util中的vector類的功能
 * vector類存在的擴充了陣列的功能,提供了自動擴充陣列長度
 * 並且把陣列中原先存放的資料元素原樣儲存的功能
 * */
public class MyVector {
	private Object[] elementData;
	private int elementCount;
	
	private void ensureCapacity(int minCapacity){//擴充記憶體minCapacity為引數要求長度
		int oldCapacity = elementData.length;//原陣列長度
		if(minCapacity>oldCapacity){
			Object oldData[] = elementData;
			int newCapacity = oldCapacity*2;//新的陣列長度
			if(newCapacity<minCapacity){
				newCapacity = minCapacity;
			}
			elementData = new Object[newCapacity];
			System.arraycopy(oldData, 0, elementData, 0, elementCount);
			//從指定源陣列中複製一個數組,複製從指定的位置開始,到目標陣列的指定位置結束。
		}
	}
	
	public MyVector(){
		this(10);//呼叫帶引數的建構函式
	}
	
	public MyVector(int initialCapacity){
		elementData = new Object[initialCapacity];
		elementCount = 0;
	}
	
	public void add(int index,Object element){
		if(index >= elementCount+1){//可以插到最後一個元素的後一位
			throw new ArrayIndexOutOfBoundsException(index+">"+elementCount);
		}
		ensureCapacity(elementCount+1);
		System.arraycopy(elementData, index, elementData, index+1, elementCount-index);
		elementData[index] = element;
		elementCount++;
	}
	
	public void add(Object element){//新增到最後
		add(elementCount,element);
	}
	
	public void set(int index,Object element){//把index處的元素重置為element
		if(index >= elementCount){
			throw new ArrayIndexOutOfBoundsException(index+">="+elementCount);
		}
		elementData[index] = element;
	}
	
	public Object get(int index){
		if(index >= elementCount){
			throw new ArrayIndexOutOfBoundsException(index);
		}
		return elementData[index];
	}
	
	public int size(){
		return elementCount;
	}
	
}
簡單測試:
package ArrayVectorSetMatrix;
/**
* @author sun
* 建立時間:2017年4月7日下午2:30:29
*/
//儲存並新增資料,輸出等簡單測試
public class TestMyVector {
	public static void main(String[] args) {
		Integer t;
		MyVector mv = new MyVector(10);
		for(int i=0;i<10;i++){
			mv.add(new Integer(i+1));
		}
		mv.add(5,new Integer(11));
		System.out.println("size= "+mv.size());
		for(int j=0;j<mv.size();j++){
			t = (Integer)mv.get(j);//注意向下轉型
			System.out.print(t+" ");
		}
	}
}
/*
size= 11
1 2 3 4 5 11 6 7 8 9 10  
 */



相關推薦

陣列向量

陣列是n個相同資料型別的資料元素構成的佔用一塊地址連續的記憶體單元的有限集合,所以線性結構(包括線性表、堆疊、佇列、串、陣列和矩陣)的順序儲存結構實際就是使用陣列來儲存。所以,不像線性表等結構要特意的學習,感覺陣列是我們接觸程式語言開始就拿來即用的東西。 陣列的實現機制(記

資料基礎---《利用Python進行資料分析·第2版》第4章 NumPy基礎:陣列向量計算

之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 NumPy(Numerical Python的簡稱)是Python數值計算最重要的基礎包。大多數提供科學計算的包都是用Nu

使用Python進行資料分析--------------NumPy基礎:陣列向量計算

NumPy(Numerical重點內容 Python的簡稱) 是Python數值計算最重要的基礎包。大多數提供科學計算的包都是用NumPy的陣列作為構建基礎。 NumPy的部分功能如下: - ndarray,一個具有向量算術運算和複雜廣播能力的快速且節省空間的多維陣列。 -

第4章 NumPy基礎:陣列向量計算

                                          &nb

【資料分析】:Numpy基礎:陣列向量運算

☆Numpy(Numerical Python)是高效能科學計算和資料分析的基礎包,它是幾乎所有資料分析高階工具的構建基礎。 ndarry ,一個具有向量算數運算和複雜廣播能力的快速且節省空間的多維陣列。 用於對整組資料進行快速運算的標準數學函式(無需編寫迴

01- Numy基礎:陣列向量計算

1. NumPy基礎:陣列和向量計算 NumPy (Numeriacal /njuː’merɪk(ə)l/ Python)是高效能科學計算和資料分析的基礎包。 它是幾乎所有高階工具的構建基礎,其部分功能如下: Ndarray,一個具有向量算術運算和複雜廣

第4章 NumPy基礎:陣列向量計算

參考 目錄 NumPy(Numerical Python的簡稱)是Python數值計算最重要的基礎包。大多數提供科學計算的包都是用NumPy的陣列作為構建基礎。 NumPy的

Java陣列Arrays

一維陣列的兩種定義方法 一維陣列的三種遍歷方法 import java.util.Arrays; import java.util.Scanner; public class Main { static int maxn = (int) 1e5 + 10;

Numpy基礎 --陣列向量計算 利用Python進行資料分析讀書筆記

Numpy 陣列和向量計算 程式碼下載 import numpy as np #ndarray物件 陣列 NumPy陣列 建立ndarray data1=[6,7.5,8,0,1] arr1=np.array(data1) a

python numpy基礎 陣列向量計算

在python 中有時候我們用陣列操作資料可以極大的提升資料的處理效率, 類似於R的向量化操作,使得資料的操作趨於簡單化,在python 中是使用numpy模組可以進行陣列和向量計算。 下面來看下簡單的例子 import n

JVM系列之:String,陣列集合的記憶體佔用大小

[toc] # 簡介 之前的文章中,我們使用JOL工具簡單的分析過String,陣列和集合類的記憶體佔用情況,這裡再做一次更詳細的分析和介紹,希望大家後面再遇到OOM問題的時候不再抱頭痛哭,而是可以有章可循,開始吧。 # 陣列 先看下JOL的程式碼和輸出: ~~~java //byte array

基於陣列的容器實現 基於連結串列結構的容器實現

1. 資料結構   概念 :資料結構是計算機儲存、組織資料的方式。    簡單理解:可以看成是對資料儲存的一種方式   儲存方式   :     1.變數       2.陣列    3.自定義容器 連結串列是一種線性的資料結構是一種最簡單的動態資料

java:集合框架(Arrays工具的asList()方法的使用)-陣列集合互轉

import java.util.ArrayList; import java.util.Arrays; import java.util.List; //陣列轉集合,雖然不能增加或刪除元素,但是可以集

【計算機基礎】Java學習篇(四) 認識與物件(打包器、陣列字串)

介紹完基本型別,下面介紹類型別。 瞭解物件與參考的關係,認識打包器,以及陣列物件、字串物件。 一、類與物件       1.建立類          編寫程式需要使用物件(Object),產生物件必須先定義類(Class),類就像是設計圖,而物件是類

利用模板實現簡單的棧陣列單鏈表)

主要的功能是實現一個後進先出的列表,有入棧、出棧、返回大小、判空等基本功能 #pragma once using namespace std; const int MAXSIZE = 0xfff;

Java基礎知識:,多型,Object,陣列字串

類 類的定義格式: [類的修飾符] class 類的名稱 [extends 父類名稱][implements 介面名稱列表] { 變數的定義以及變數的初始化; 方法的定義以及方法體; } 類的修飾符:public,abstract ,final等。 private

【1.1】Eigen C++ 矩陣開源庫學習之稠密矩陣陣列操作——矩陣

稠密矩陣和陣列操作 http://eigen.tuxfamily.org/dox-devel/group__DenseMatrixManipulation__chapter.html 包含模組: 1.矩陣類 2.矩陣和向量的運算

陣列連結串列分別實現棧stack,隊queue

棧(stack)是一種常見資料結構,以後進先出(LIFO)著稱。比如編譯器用棧處理函式呼叫,儲存被呼叫函式的引數和區域性變數。當一個函式呼叫另一個函式時候,新的函式引數和區域性變數被入棧。呼叫結束,佔用的資源從棧釋放。 用陣列實現: class vector{ priva

MFC陣列 列表對映

1.僅有的幾個抽象資料類; 2.這裡的陣列是動態陣列,C++中陣列在定義的時候就要指定大小,並且不檢查陣列的上下標,這樣會造成陣列使用不安全; 3.所以VC++封裝陣列,比如bit陣列,Dword陣列,指標陣列,Ob(object)陣列,String陣列等。這些都是動態的陣

7.Spring切入點的表達式通知

ice span rac 後置 owin err logs 異常 環繞 1.切入點的表達式 表達式格式: execution([修飾符] 返回值類型 包名.類名.方法名(參數)) 其他的代替: <!-- 完全指定一個方法 --> <!-- <a