欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

帶你輕松搞定Java面向?qū)ο蟮木幊?-數(shù)組,集合框架

 更新時(shí)間:2021年06月23日 17:06:58   作者:給我new一個(gè)億  
Java是面向?qū)ο蟮母呒?jí)編程語(yǔ)言,類和對(duì)象是 Java程序的構(gòu)成核心。圍繞著Java類和Java對(duì)象,有三大基本特性:封裝是Java 類的編寫規(guī)范、繼承是類與類之間聯(lián)系的一種形式、而多態(tài)為系統(tǒng)組件或模塊之間解耦提供了解決方案

一、數(shù)組

1.數(shù)組的定義

數(shù)組是為了解決同類數(shù)據(jù)整合擺放而提出的,可以理解為一組具有相同類型的變量的集合,它的每個(gè)元素都具有相同的數(shù)據(jù)類型。

2.數(shù)組的聲明

1.<data_type>[] <array_name>;  
2.<data_type> <array_name>[];

例如定義保存學(xué)生成績(jī)的語(yǔ)法:

1.float[] scores;  
2.float scores[];

雖說(shuō)兩種寫法都沒錯(cuò),但是按照J(rèn)ava語(yǔ)言的變成習(xí)慣,推薦各位采用第一種寫法,即把中括號(hào)放在數(shù)據(jù)類型和變量名中間。

注意:

  • 數(shù)組的類型實(shí)際上是指數(shù)組元素的取值類型。對(duì)于同一個(gè)數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。
  • 項(xiàng)目數(shù)組名的書寫規(guī)則應(yīng)符合標(biāo)識(shí)符的書寫規(guī)定。
  • 數(shù)組名不能與其他變量名相同。
  • 在數(shù)組聲明中包含數(shù)組長(zhǎng)度永遠(yuǎn)是不合法的,如float[] scores;。因?yàn)?,聲明的時(shí)候并沒有實(shí)例化任何對(duì)象(沒有分配空間),只有在實(shí)例化對(duì)象時(shí),JVM才分配空間,這時(shí)才與長(zhǎng)度有關(guān)。

 3.數(shù)組的初始化

數(shù)組有兩種初始化

  • 靜態(tài)初始化

靜態(tài)初始化的方式是在聲明數(shù)組變量的同時(shí)進(jìn)行的。這種方式不僅定義了數(shù)組中包含的元素的數(shù)量,而且制定了每個(gè)元素的值。

注意,靜態(tài)初始化應(yīng)該在一條語(yǔ)句內(nèi)完成,不能分開寫。

例如:

float[] scores = {93.5f,83,61,80};
int[] arr ={1,2,3,4,5};
  • 動(dòng)態(tài)初始化

動(dòng)態(tài)初始化的方式是在聲明數(shù)組時(shí)就必須定義數(shù)組的大小,以及每個(gè)元素的初始值。如果要定義的數(shù)組長(zhǎng)度或數(shù)組數(shù)據(jù)只有在運(yùn)行時(shí)才能決定,就要使用動(dòng)態(tài)初始化。

注意,動(dòng)態(tài)初始化時(shí)也可以使用變量的值來(lái)定義數(shù)組大小

例如:

int[] arr;
arr = new  int[10];
char[] c = new char[100];
int[] d = new int[]{1,2,3,4};

抽象類的使用原則如下:

(1)抽象方法必須為public或者protected(因?yàn)槿绻麨閜rivate,則不能被子類繼承,子類便無(wú)法實(shí)現(xiàn)該方法),缺省情況下默認(rèn)為public;

(2)抽象類不能直接實(shí)例化,需要依靠子類采用向上轉(zhuǎn)型的方式處理;

(3)抽象類必須有子類,使用extends繼承,一個(gè)子類只能繼承一個(gè)抽象類;

(4)子類(如果不是抽象類)則必須覆寫抽象類之中的全部抽象方法(如果子類沒有實(shí)現(xiàn)父類的抽象方法,則必須將子類也定義為為abstract類。)

二、集合概述

java.util包中提供了所有用到的集合類。

集合 簡(jiǎn)單來(lái)說(shuō)就是存儲(chǔ)對(duì)象容器

集合中可存儲(chǔ)任意類型的對(duì)象,最重要的是長(zhǎng)度可變

不過(guò)集合類存放的都是對(duì)象的引用,而非對(duì)象本身,集合也不能存儲(chǔ)基本數(shù)據(jù)類型

下圖是集合框架

在這里插入圖片描述

三、Collection接口

1.Collection接口概述

Collection是單向集合。Set接口、List接口都是Collection接口的子接口

2.集合框架的三個(gè)組件

集合類主要有Set、List、Map

  • Set(集):無(wú)序、不可重復(fù)
  • List(列表):有序,可重復(fù) 常用的列表類有Vector、Stack、LinkedList、ArrayList
  • Map(映射):保存的是鍵值對(duì)(key-value),映射中存儲(chǔ)的每個(gè)對(duì)象(value)都有一個(gè)相關(guān)的關(guān)鍵字(key)對(duì)象。一個(gè)Map對(duì)象的每一個(gè)關(guān)鍵字應(yīng)是惟一的(否則key可能對(duì)應(yīng)多個(gè)value),就是說(shuō)key-value是單向一對(duì)一的關(guān)系 常用的映射類有HashTable、HashMap、TreeMap

由于Set和List都是Collection的子接口,那么Set和List的所有實(shí)現(xiàn)類都實(shí)現(xiàn)了下面所示的Collection的方法

方法 摘要
boolean add(E e) 確保此集合包含指定的元素(可選操作)
boolean addAll(Collection<? extends E> c) 將指定集合中的所有元素添加到此集合(可選操作)
void clear() 從此集合中刪除所有元素(可選操作)
boolean contains(Object o) 如果此集合包含指定的元素,則返回 true )
boolean containsAll(Collection<?> c) 如果此集合包含指定 集合中的所有元素,則返回true
boolean isEmpty() 如果此集合不包含元素,則返回 true
Iterator iterator() 返回此集合中的元素的迭代器
boolean remove(Object o) 從該集合中刪除指定元素的單個(gè)實(shí)例(如果存在)(可選操作)
Object[] toArray() 返回一個(gè)包含此集合中所有元素的數(shù)組
T[] toArray(T[] a) 返回包含此集合中所有元素的數(shù)組; 返回的數(shù)組的運(yùn)行時(shí)類型是指定數(shù)組的運(yùn)行時(shí)類型

3.Iterator接口

所謂的“Collection是所有集合類的跟接口”,并不意味著Collection就是“根”。其實(shí),Collection是Iterator接口的子接口,只不過(guò)Iterator(迭代器)不屬于集合的范疇而已,那么Iterator接口作用是什么呢?

Iterator叫做“迭代器”,它允許訪問(wèn)一個(gè)容器(container)對(duì)象中的各個(gè)元素,而又不需要公開該對(duì)象的內(nèi)部細(xì)節(jié),從定義上看,迭代器為容器而生。由Collection接口繼承了Iterator,所以所有集合對(duì)象都可以被迭代,Collection接口內(nèi)定義了 iterator() 方法,能獲得一個(gè)Iterator迭代器,從而實(shí)現(xiàn)對(duì)集合的迭代。

迭代器的用法:

Iterator it = Collection.iterator(); 
while(it.hasNext()){
	Object obj = it.next();
}

Iterator如何對(duì)ArrayList進(jìn)行迭代

public class IteratorDemo  {
    public static void main(String[] args) {     
    	//創(chuàng)建List集合對(duì)象
    	List<String> alist = new ArrayList<String>();
    	alist.add("a");
    	alist.add("b");
    	alist.add("c");
    	alist.add("d");
       //設(shè)定迭代內(nèi)容為String對(duì)象
        Iterator<String> it = alist.iterator(); 
		while(it.hasNext()){
			//此時(shí)就可以直接使用String來(lái)接收返回值了
			String s = it.next();
			System.out.println(s);
		}	
  	}
}

四、List接口

List繼承了Collection,是有序的列表,該接口定義的元素是有序的且可重復(fù)的。在List接口下使用最多的就是ArryList實(shí)現(xiàn)類和LinkList實(shí)現(xiàn)類。

1.ArrayList類

ArrayList類是List接口的大小可變數(shù)組的實(shí)現(xiàn)(繼承AbstractList,同時(shí)實(shí)現(xiàn)List接口)。

ArrayList是動(dòng)態(tài)數(shù)組,所以保持了數(shù)組的特性。在ArrayList執(zhí)行查詢操作將非常,但如果執(zhí)行增加(特別是插入)、刪除操作,效率低下。

ArrayList類的特點(diǎn)如下:

  • 大小是可變的,是自動(dòng)增長(zhǎng)的,可動(dòng)態(tài)的增加或減少元素,可存儲(chǔ)null值
  • 實(shí)現(xiàn)了ICollection 和 IList 接口
  • 它是非同步的集合類
  • 元素可以重復(fù)

構(gòu)造方法

在這里我只寫一種構(gòu)造方法

ArrayList<Object> alist = new ArrayList<Object>;

ArrayList類的方法:

方法 摘要
boolean add(E e) 將指定的元素追加到此列表的末尾
void add(int index, E element) 在此列表中的指定位置插入指定的元素。
boolean addAll(Collection<? extends E> c) 按指定集合的Iterator返回的順序?qū)⒅付现械乃性刈芳拥酱肆斜淼哪┪?/td>
boolean addAll(int index, Collection<? extends E> c) 將指定集合中的所有元素插入到此列表中,從指定的位置開始
void clear() 從此集合中刪除所有元素
Object clone() 返回此 ArrayList實(shí)例的淺拷貝
boolean contains(Object o) 如果此集合包含指定的元素,則返回 true )
void ensureCapacity(int minCapacity) 如果需要,增加此 ArrayList實(shí)例的容量,以確保它可以至少保存最小容量參數(shù)指定的元素?cái)?shù)
void forEach(Consumer<? super E> action) 對(duì) Iterable的每個(gè)元素執(zhí)行給定的操作,直到所有元素都被處理或動(dòng)作引發(fā)異常
E get(int index) 返回此列表中指定位置的元素
int indexOf(Object o) 返回此列表中指定元素的第一次出現(xiàn)的索引,如果此列表不包含元素,則返回-1
boolean isEmpty() 如果此列表不包含元素,則返回 true
E remove(int index) 刪除該列表中指定位置的元素
boolean remove(Object o) 從列表中刪除指定元素的第一個(gè)出現(xiàn)(如果存在)
E set(int index, E element) 用指定的元素替換此列表中指定位置的元素
int size() 返回此列表中的元素?cái)?shù)
List subList(int fromIndex, int toIndex) 返回此列表中指定的 fromIndex (包括)和 toIndex之間的獨(dú)占視圖
Object[] toArray() 以正確的順序(從第一個(gè)到最后一個(gè)元素)返回一個(gè)包含此列表中所有元素的數(shù)組
T[] toArray(T[] a) 以正確的順序返回一個(gè)包含此列表中所有元素的數(shù)組(從第一個(gè)到最后一個(gè)元素); 返回的數(shù)組的運(yùn)行時(shí)類型是指定數(shù)組的運(yùn)行時(shí)類型

2.LinkedList類

ArrayList類用于創(chuàng)建鏈表數(shù)據(jù)結(jié)構(gòu)對(duì)象。與ArrayList一樣,LinkedList也實(shí)現(xiàn)了List接口,這說(shuō)明可根據(jù)索引來(lái)查詢集合內(nèi)的元素。

由于LinkedList實(shí)現(xiàn)了雙向循環(huán)鏈表,所以可以很快捷插入或刪除元素;但由于鏈表的特性,如果對(duì)LinkedList執(zhí)行查詢,那么效率也非常。可以說(shuō)ArrayList和LinkedList是互補(bǔ)關(guān)系

構(gòu)造方法

在這里我只寫一種構(gòu)造方法

LinkedList<Object> llist = new LinkedList<Object>;

LinkedList類的方法:

方法 摘要
boolean add(E e) 將指定的元素追加到此列表的末尾
void add(int index, E element) 在此列表中的指定位置插入指定的元素
boolean addAll(Collection<? extends E> c) 按照指定集合的迭代器返回的順序?qū)⒅付现械乃性刈芳拥酱肆斜淼哪┪?/td>
boolean addAll(int index, Collection<? extends E> c) 將指定集合中的所有元素插入到此列表中,從指定的位置開始
void addFirst(E e) 在該列表開頭插入指定的元素
void addLast(E e) 將指定的元素追加到此列表的末尾
void clear() 從列表中刪除所有元素
boolean contains(Object o) 如果此列表包含指定的元素,則返回 true
E element() 檢索但不刪除此列表的頭(第一個(gè)元素)
E get(int index) 返回此列表中指定位置的元素
E getFirst() 返回此列表中的第一個(gè)元素
E getLast() 返回此列表中的最后一個(gè)元素
int indexOf(Object o) 返回此列表中指定元素的第一次出現(xiàn)的索引,如果此列表不包含元素,則返回-1
int lastIndexOf(Object o) 返回此列表中指定元素的最后一次出現(xiàn)的索引,如果此列表不包含元素,則返回-1
ListIterator listIterator(int index) 從列表中的指定位置開始,返回此列表中元素的列表迭代器(按適當(dāng)?shù)捻樞颍?/td>
E remove() 檢索并刪除此列表的頭(第一個(gè)元素)
E remove(int index) 刪除該列表中指定位置的元素
boolean remove(Object o) 從列表中刪除指定元素的第一個(gè)出現(xiàn)(如果存在)
E removeFirst() 從此列表中刪除并返回第一個(gè)元素
E removeLast() 從此列表中刪除并返回最后一個(gè)元素
E set(int index, E element) 用指定的元素替換此列表中指定位置的元素
int size() 返回此列表中的元素?cái)?shù)
Object[] toArray() 以正確的順序(從第一個(gè)到最后一個(gè)元素)返回一個(gè)包含此列表中所有元素的數(shù)組
T[] toArray(T[] a) 以正確的順序返回一個(gè)包含此列表中所有元素的數(shù)組(從第一個(gè)到最后一個(gè)元素); 返回的數(shù)組的運(yùn)行時(shí)類型是指定數(shù)組的運(yùn)行時(shí)類型

五、Set接口

Set接口 繼承Collection接口。他存儲(chǔ)的是無(wú)序的,惟一的集合元素

1.HashSet類

實(shí)現(xiàn)了Set接口,是基于HashMap實(shí)現(xiàn),存儲(chǔ)不重復(fù),無(wú)序值

HashSet 是根據(jù)對(duì)象的哈希值來(lái)確定元素在集合中的存儲(chǔ)位置,元素再插入時(shí)就確定了存儲(chǔ)位置,因此,元素在集合中的存儲(chǔ)位置時(shí)固定的(無(wú)序是指輸出順序 與存出順序不一致),具有良好的存儲(chǔ)和查詢性能(存儲(chǔ)速度快)。

構(gòu)造方法

在這里我只寫一種構(gòu)造方法

Set ss = new HashSet();

HashSet 類常用的方法:

方法 摘要
boolean add(E e) 將指定的元素添加到此集合(如果尚未存在)
boolean remove(Object o) 如果存在,則從該集合中刪除指定的元素
int size() 返回此集合中的元素?cái)?shù)(其基數(shù))

六、Map接口

Map接口 是一個(gè)根接口,他存儲(chǔ)的是鍵-值對(duì)(key-value),其中key不允許重復(fù),value允許重復(fù)。

1.HashMap類

HashMap類 實(shí)現(xiàn)了Map接口,存儲(chǔ)的是無(wú)序的鍵-值對(duì)(key-value)。

  • HashMap的key是用Set集合來(lái)存放,所以想做到key不允許重復(fù),key對(duì)應(yīng)的類需要重寫hashCode()和equals()方法
  • HashMap是線程不安全
  • HashMap中的元素的位置是不定時(shí)的更新,即元素位置不固定

構(gòu)造方法

在這里我只寫一種構(gòu)造方法

HashMap map = new HashMap();

HashMap 類常用的方法:

方法 摘要
V put(K key, V value) 將指定的值與此映射中的指定鍵相關(guān)聯(lián)
V get(Object key) 返回到指定鍵所映射的值,或 null如果此映射包含該鍵的映射
int size() 返回此地圖中鍵值映射的數(shù)量
V remove(Object key) 從該地圖中刪除指定鍵的映射(如果存在)

七、泛型

為什么要使用泛型程序設(shè)計(jì)?以常用的ArrayList類為例,在使用ArrayList的時(shí)候常遇到以下兩個(gè)問(wèn)題

  • 當(dāng)獲取一個(gè)值的時(shí)候必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換
  • 當(dāng)向其中放入值的時(shí)候沒有任何約束,只要是對(duì)象就行。

這樣,如果處理數(shù)據(jù)類型時(shí)稍微出現(xiàn)一點(diǎn)問(wèn)題,程序就會(huì)報(bào)錯(cuò)!

泛型提供了一個(gè)解決方案:類型參數(shù)(type parameters)。如果ArrayList類有一個(gè)類型參數(shù)指示元素的類型,就沒有問(wèn)題了

ArrayList<String>  arr = new ArrayList<String>();

這時(shí)程序員可以很方便的分辨其中元素的類型,編譯器也可以很好的利用這個(gè)信息。所以當(dāng)調(diào)用get()方法時(shí),不需要執(zhí)行類型轉(zhuǎn)換,編譯器就可以返回值類型為String。

String str = arr.get(0);

編譯器還知道ArrayList < String> 中add()方法有一個(gè)類型為String的參數(shù)。這將比直接使用Object類型的參數(shù)安全。如果在嘗試向其中放入非String的數(shù)據(jù),編譯器就會(huì)發(fā)出通知,以避免發(fā)生錯(cuò)誤。

arr.add(new Integer(1));

總結(jié)

本篇文章的內(nèi)容就到這了,希望大家可以喜歡,也希望大家可以多多關(guān)注腳本之家的其他精彩內(nèi)容!

相關(guān)文章

最新評(píng)論