Java中的ArrayList和順序表-創(chuàng)新互聯(lián)

文章目錄
  • 前言
  • 一、線性表
  • 二、順序表
  • 三、ArrayList的簡(jiǎn)介
  • 四、ArrayList的使用
    • 4.1 ArrayList的構(gòu)造
    • 4.2 ArrayList常見操作
    • 4.3 ArrayList的遍歷
  • 五、ArrayList的擴(kuò)容機(jī)制
  • 總結(jié)

和政網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,和政網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為和政上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的和政做網(wǎng)站的公司定做!
前言

以實(shí)踐為線索,逐步深入數(shù)據(jù)結(jié)構(gòu)和算法,提升編程能力和思維能力。


一、線性表

線性表是n個(gè)具有相同特性的數(shù)據(jù)元素的有限序列。線性表是一種在實(shí)際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見的線性表有順序表、鏈表、棧、隊(duì)列…

線性表在邏輯上是線性結(jié)構(gòu),也就是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上存儲(chǔ)時(shí),通常以數(shù)組和鏈?zhǔn)浇Y(jié)構(gòu)的形式存儲(chǔ)。

二、順序表

順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)數(shù)據(jù)元素的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲(chǔ)。在數(shù)組上完成增刪改查。

三、ArrayList的簡(jiǎn)介

在集合框架中,ArrayList是一個(gè)普通的類,實(shí)現(xiàn)了List接口,具體框架圖如下:
在這里插入圖片描述

【說(shuō)明】

  1. ArrayList是以泛型方式實(shí)現(xiàn)的,使用時(shí)必須要先實(shí)例化
  2. ArrayList實(shí)現(xiàn)了RandomAccess接口,表明ArrayList支持隨機(jī)訪問(wèn)
  3. ArrayList實(shí)現(xiàn)了Cloneable接口,表明ArrayList是可以clone的
  4. ArrayList實(shí)現(xiàn)了serializable接口,表明ArrayList是支持序列化的
  5. 和Vector不同,ArrayList不是線程安全的,在單線程下可以使用,在多線程中可以選擇Vector或者CopyOnWriteArrayList
  6. ArrayList底層是一段連續(xù)的空間,并且可以動(dòng)態(tài)擴(kuò)展,是一個(gè)動(dòng)態(tài)類型的順序表
四、ArrayList的使用 4.1 ArrayList的構(gòu)造

無(wú)參構(gòu)造:

ArrayList()

利用其他Collection構(gòu)建ArrayList:

ArrayList(Collectionc)		

指定順序表初始化容量:

ArrayList(int initialCapacity)

代碼實(shí)例:

public static void main(String[] args) {// ArrayList創(chuàng)建,推薦寫法
	// 構(gòu)造一個(gè)空的列表
	Listlist1 = new ArrayList<>();
	
	// 構(gòu)造一個(gè)具有10個(gè)容量的列表
	Listlist2 = new ArrayList<>(10);
	list2.add(1);
	list2.add(2);
	list2.add(3);
	// list2.add("hello"); // 編譯失敗,List已經(jīng)限定了,list2中只能存儲(chǔ)整形元素
	
	// list3構(gòu)造好之后,與list中的元素一致
	ArrayListlist3 = new ArrayList<>(list2);
	
	// 避免省略類型,否則:任意類型的元素都可以存放,使用時(shí)將是一場(chǎng)災(zāi)難
	List list4 = new ArrayList();
	list4.add("111");
	list4.add(100);
}
4.2 ArrayList常見操作

ArrayList實(shí)現(xiàn)了List接口,可以使用List中的方法,常用的方法已在上一篇文章介紹。詳情請(qǐng)見 Java中的List接口。

代碼實(shí)例:

public static void main(String[] args) {Listlist = new ArrayList<>();
	list.add("JavaSE");
	list.add("JavaWeb");
	list.add("JavaEE");
	list.add("JVM");
	list.add("測(cè)試課程");
	System.out.println(list);
	
	// 獲取list中有效元素個(gè)數(shù)
	System.out.println(list.size());
	
	// 獲取和設(shè)置index位置上的元素,注意index必須介于[0, size)間
	System.out.println(list.get(1));
	list.set(1, "JavaWEB");
	System.out.println(list.get(1));
	
	// 在list的index位置插入指定元素,index及后續(xù)的元素統(tǒng)一往后搬移一個(gè)位置
	list.add(1, "Java數(shù)據(jù)結(jié)構(gòu)");
	System.out.println(list);
	
	// 刪除指定元素,找到了就刪除,該元素之后的元素統(tǒng)一往前搬移一個(gè)位置
	list.remove("JVM");
	System.out.println(list);
	
	// 刪除list中index位置上的元素,注意index不要超過(guò)list中有效元素個(gè)數(shù),否則會(huì)拋出下標(biāo)越界異常
	list.remove(list.size()-1);
	System.out.println(list);
	
	// 檢測(cè)list中是否包含指定元素,包含返回true,否則返回false
	if(list.contains("測(cè)試課程")){list.add("測(cè)試課程");
	}
	
	// 查找指定元素第一次出現(xiàn)的位置:indexOf從前往后找,lastIndexOf從后往前找
	list.add("JavaSE");
	System.out.println(list.indexOf("JavaSE"));
	System.out.println(list.lastIndexOf("JavaSE"));
	
	// 使用list中[0, 4)之間的元素構(gòu)成一個(gè)新的SubList返回,但是和ArrayList共用一個(gè)elementData數(shù)組
	Listret = list.subList(0, 4);
	System.out.println(ret);
	
	list.clear();
	System.out.println(list.size());
}
4.3 ArrayList的遍歷

ArrayList可以使用三種方式進(jìn)行遍歷:for循環(huán)、foreach(增強(qiáng)for循環(huán))、使用迭代器。

代碼實(shí)例:

public static void main(String[] args) {Listlist = new ArrayList<>();
	list.add(1);
	list.add(2);
	list.add(3);
	list.add(4);
	list.add(5);
	
	// 使用下標(biāo)+for遍歷
	for (int i = 0; i< list.size(); i++) {System.out.print(list.get(i) + " ");
	}
	System.out.println();
	
	// 借助foreach遍歷
	for (Integer integer : list) {System.out.print(integer + " ");
	}
	System.out.println();
	
	//使用迭代器
	Iteratorit = list.listIterator();
	while(it.hasNext()){System.out.print(it.next() + " ");
	}
	System.out.println();
}

注意:

  1. ArrayList最常使用的遍歷方式是for循環(huán)和foreach
  2. 迭代器是設(shè)計(jì)模式的一種
五、ArrayList的擴(kuò)容機(jī)制

ArrayList是一個(gè)動(dòng)態(tài)類型的順序表,即:在插入元素的過(guò)程中會(huì)自動(dòng)擴(kuò)容。

以下是ArrayList源碼中擴(kuò)容方式:

Object[] elementData; // 存放元素的空間
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; // 默認(rèn)空間
private static final int DEFAULT_CAPACITY = 10; // 默認(rèn)容量大小

public boolean add(E e) {ensureCapacityInternal(size + 1); // Increments modCount!!
	elementData[size++] = e;
	return true;
}

private void ensureCapacityInternal(int minCapacity) {ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}

private static int calculateCapacity(Object[] elementData, int minCapacity) {if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {return Math.max(DEFAULT_CAPACITY, minCapacity);
	}
	return minCapacity;
}

private void ensureExplicitCapacity(int minCapacity) {modCount++;
	// overflow-conscious code
	if (minCapacity - elementData.length >0)
		grow(minCapacity);
}

private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

private void grow(int minCapacity) {// 獲取舊空間大小
	int oldCapacity = elementData.length;
	
	// 預(yù)計(jì)按照1.5倍方式擴(kuò)容
	int newCapacity = oldCapacity + (oldCapacity >>1);
	
	// 如果用戶需要擴(kuò)容大小 超過(guò) 原空間1.5倍,按照用戶所需大小擴(kuò)容
	if (newCapacity - minCapacity< 0)
		newCapacity = minCapacity;
		
		// 如果需要擴(kuò)容大小超過(guò)MAX_ARRAY_SIZE,重新計(jì)算容量大小
	if (newCapacity - MAX_ARRAY_SIZE >0)
		newCapacity = hugeCapacity(minCapacity);
		
		// 調(diào)用copyOf擴(kuò)容
	elementData = Arrays.copyOf(elementData, newCapacity);
}

private static int hugeCapacity(int minCapacity) {// 如果minCapacity小于0,拋出OutOfMemoryError異常
	if (minCapacity< 0)
		throw new OutOfMemoryError();
	return (minCapacity >MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;
}
總結(jié)

以上就是今天要講的內(nèi)容,本文介紹了順序表和ArrayList的使用,這是數(shù)據(jù)結(jié)構(gòu)和算法中重要的知識(shí)內(nèi)容,在學(xué)習(xí)過(guò)程中,我們要多實(shí)踐、多敲代碼。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:Java中的ArrayList和順序表-創(chuàng)新互聯(lián)
URL鏈接:http://muchs.cn/article0/dscjoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站收錄網(wǎng)站導(dǎo)航、虛擬主機(jī)、電子商務(wù)手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司