亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、數(shù)組

1.數(shù)組的定義

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

2.數(shù)組的聲明

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

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

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

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

注意:

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

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

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

  • 靜態(tài)初始化

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

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

例如:

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

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

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

例如:

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

抽象類的使用原則如下:

(1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現(xiàn)該方法),缺省情況下默認(rèn)為public;

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

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

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

二、集合概述

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

集合 簡單來說就是存儲對象容器

集合中可存儲任意類型的對象,最重要的是長度可變

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

下圖是集合框架

在這里插入圖片描述

三、Collection接口

1.Collection接口概述

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

2.集合框架的三個組件

集合類主要有Set、List、Map

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

由于Set和List都是Collection的子接口,那么Set和List的所有實現(xiàn)類都實現(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) 從該集合中刪除指定元素的單個實例(如果存在)(可選操作)
Object[] toArray() 返回一個包含此集合中所有元素的數(shù)組
T[] toArray(T[] a) 返回包含此集合中所有元素的數(shù)組; 返回的數(shù)組的運行時類型是指定數(shù)組的運行時類型

3.Iterator接口

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

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

迭代器的用法:

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

Iterator如何對ArrayList進行迭代

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

四、List接口

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

1.ArrayList類

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

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

ArrayList類的特點如下:

  • 大小是可變的,是自動增長的,可動態(tài)的增加或減少元素,可存儲null值
  • 實現(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實例的淺拷貝
boolean contains(Object o) 如果此集合包含指定的元素,則返回 true )
void ensureCapacity(int minCapacity) 如果需要,增加此 ArrayList實例的容量,以確保它可以至少保存最小容量參數(shù)指定的元素數(shù)
void forEach(Consumer<? super E> action) 對 Iterable的每個元素執(zhí)行給定的操作,直到所有元素都被處理或動作引發(fā)異常
E get(int index) 返回此列表中指定位置的元素
int indexOf(Object o) 返回此列表中指定元素的第一次出現(xiàn)的索引,如果此列表不包含元素,則返回-1
boolean isEmpty() 如果此列表不包含元素,則返回 true
E remove(int index) 刪除該列表中指定位置的元素
boolean remove(Object o) 從列表中刪除指定元素的第一個出現(xiàn)(如果存在)
E set(int index, E element) 用指定的元素替換此列表中指定位置的元素
int size() 返回此列表中的元素數(shù)
List subList(int fromIndex, int toIndex) 返回此列表中指定的 fromIndex (包括)和 toIndex之間的獨占視圖
Object[] toArray() 以正確的順序(從第一個到最后一個元素)返回一個包含此列表中所有元素的數(shù)組
T[] toArray(T[] a) 以正確的順序返回一個包含此列表中所有元素的數(shù)組(從第一個到最后一個元素); 返回的數(shù)組的運行時類型是指定數(shù)組的運行時類型

2.LinkedList類

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

由于LinkedList實現(xiàn)了雙向循環(huán)鏈表,所以可以很快捷插入或刪除元素;但由于鏈表的特性,如果對LinkedList執(zhí)行查詢,那么效率也非常??梢哉fArrayList和LinkedList是互補關(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() 檢索但不刪除此列表的頭(第一個元素)
E get(int index) 返回此列表中指定位置的元素
E getFirst() 返回此列表中的第一個元素
E getLast() 返回此列表中的最后一個元素
int indexOf(Object o) 返回此列表中指定元素的第一次出現(xiàn)的索引,如果此列表不包含元素,則返回-1
int lastIndexOf(Object o) 返回此列表中指定元素的最后一次出現(xiàn)的索引,如果此列表不包含元素,則返回-1
ListIterator listIterator(int index) 從列表中的指定位置開始,返回此列表中元素的列表迭代器(按適當(dāng)?shù)捻樞颍?/td>
E remove() 檢索并刪除此列表的頭(第一個元素)
E remove(int index) 刪除該列表中指定位置的元素
boolean remove(Object o) 從列表中刪除指定元素的第一個出現(xiàn)(如果存在)
E removeFirst() 從此列表中刪除并返回第一個元素
E removeLast() 從此列表中刪除并返回最后一個元素
E set(int index, E element) 用指定的元素替換此列表中指定位置的元素
int size() 返回此列表中的元素數(shù)
Object[] toArray() 以正確的順序(從第一個到最后一個元素)返回一個包含此列表中所有元素的數(shù)組
T[] toArray(T[] a) 以正確的順序返回一個包含此列表中所有元素的數(shù)組(從第一個到最后一個元素); 返回的數(shù)組的運行時類型是指定數(shù)組的運行時類型

五、Set接口

Set接口 繼承Collection接口。他存儲的是無序的,惟一的集合元素

1.HashSet類

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

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

構(gòu)造方法

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

Set ss = new HashSet();

HashSet 類常用的方法:

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

六、Map接口

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

1.HashMap類

HashMap類 實現(xiàn)了Map接口,存儲的是無序的鍵-值對(key-value)。

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

構(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è)計?以常用的ArrayList類為例,在使用ArrayList的時候常遇到以下兩個問題

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

這樣,如果處理數(shù)據(jù)類型時稍微出現(xiàn)一點問題,程序就會報錯!

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

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

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

String str = arr.get(0);

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

arr.add(new Integer(1));

總結(jié)

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

相關(guān)文章

最新評論