中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

公司文化墻圖片大全關(guān)鍵詞優(yōu)化排名軟件案例

公司文化墻圖片大全,關(guān)鍵詞優(yōu)化排名軟件案例,美食網(wǎng)站怎么做,裝修設(shè)計費多少錢一平方目錄 1.Java容器概述 2.集合框架 3.Collection接口中的方法使用 4.iterator() 5.List接口 2.ArrayList、LinkedList、Vector相同點 3.不同點 1.ArrayList 2.LinkedList 3.Vector 4.Vector源碼分析 5.ArrayList源碼分析 6.LinkedList源碼分析 6.List中的常用方法 …

目錄

1.Java容器概述

2.集合框架

3.Collection接口中的方法使用

4.iterator()

5.List接口

2.ArrayList、LinkedList、Vector相同點

3.不同點

1.ArrayList

2.LinkedList

3.Vector

4.Vector源碼分析

5.ArrayList源碼分析

6.LinkedList源碼分析

6.List中的常用方法

7.區(qū)分remove刪除的是元素還是索引

8.Set接口存在三個主要的實現(xiàn)類

1.HashSet

2.LinkedHashSet

3.TreeSet

4.如何理解Set的無序、不可重復(fù)特性(以HashSet為例)

5.set中添加元素的過程(以HashSet為例)

6.HashSet底層

7.要求

9.LinkedHashSet的使用

10.TreeSet()的使用

11.Map接口

1.HashMap

2.LinkedHashMap

3.TreeMap

4.Hashtable

5.Properties

12.Map的鍵與值

13.HashMap的底層實現(xiàn)原理

1.以jdk7說明

2.jdk8和jdk7的不同

3.HashMap的默認值

14.Map接口中常用的方法

15.遍歷Map的方法

16.TreeMap

17.Collections工具類

19.Collection和Collections的區(qū)別


1.Java容器概述

1.集合、數(shù)組都是對多個數(shù)據(jù)進行存儲的結(jié)構(gòu),簡稱java容器。

????????此時的存儲:主要是內(nèi)存層面的存儲不涉及到持久化(硬盤方面)的存儲

2.數(shù)組在存儲多個數(shù)據(jù)方面的特點:

????????一旦初始化后,長度就確定了,元素的類型也確定了;

3.數(shù)組存儲多個數(shù)據(jù)方面的缺點

? ? ? 1.初始化后,其長度無法修改

? ? ? 2.數(shù)組中提供的方法極其有限,對于增刪改查操作不方便,效率不高;

? ? ? 3.獲取數(shù)組中實際元素個數(shù)的需求,沒有現(xiàn)成的方法可用;

? ? ? ?4.數(shù)組存儲數(shù)據(jù)的特點:有序、可重復(fù);對于無序、不可重復(fù)的需求,不能滿足

2.集合框架

1.Collection接口:單列集合,存儲一個一個的對象;分為兩大類

????????List接口:存儲有序的、可重復(fù)的數(shù)據(jù);主要實現(xiàn)類:ArrayList,LinkedList,Vector

????????Set接口:存儲無序的、不可重復(fù)的數(shù)據(jù);主要實現(xiàn)類:HashSet,LinkedHashSet,TreeSet

2.Map接口:雙列集合,存儲一對(key-value)的數(shù)據(jù)

????????主要實現(xiàn)類:HashMap,LinkedHashMap,TreeMap,Hashtable,Properties

3.Collection接口中的方法使用

????????1.使用多態(tài)造實現(xiàn)類對象賦給Collection集合對象;

????????2.add(E e):將元素添加到集合中

????????3.size():獲取添加元素的個數(shù)

????????4.addAll(Collection coll):添加一個集合;

????????5.isEmpty():判斷當(dāng)前集合是否為空

????????6.clear():清空集合元素

????????7.contains(O o):判斷當(dāng)前集合中是否包含o

????????8.containsAll(Collection coll):判斷形參coll中所有元素是否都存在于當(dāng)前集合

????????9.remove(Object o):刪除obj數(shù)據(jù)

????????10.removeAll(Collection c):刪除c中包含的所有元素;獲取與c集合之間的差集

????????11.retainAll(Collection c):獲取與c集合之間的交集

????????12.equals(Object o):判斷兩個集合所有的元素是否相同,是返回true

????????13.hashCode():調(diào)用集合的哈希值

????????14.toArray():集合轉(zhuǎn)化為數(shù)組

????????15.將數(shù)組轉(zhuǎn)換為集合:Arrays.asList(String[])

????????注意:包裝類數(shù)組與基本數(shù)據(jù)類型數(shù)組的區(qū)別

????????若寫為一個基本數(shù)據(jù)類型數(shù)組則為一個元素,而不是識別為數(shù)組;寫成包裝類就會識別為數(shù)組中的多個元素。

        Iterator iterator = c.iterator();//hasNext():判斷是否還有下一個元素while (iterator.hasNext()) {//next():兩個作用:指針下移;返回下移以后的集合位置上的元素System.out.println(iterator.next());}

重要:add和contains方法調(diào)用的是obj對象所在類的equals()方法;若未重寫即為false;因此向Collection的接口實現(xiàn)類的對象中添加數(shù)據(jù)obj時,要求obj所在類要重寫equals()方法

4.iterator()

返回Iterator接口的實例,用于遍歷集合元素

????????1.使用hasNext()+next()方法。使用next()時指針下移,并將下移后對應(yīng)的集合元素返回。

????????2.集合對象每次調(diào)用hasNext()都會得到一個全新的迭代器對象,默認游標(biāo)都在集合第一個元素之上。

        Iterator iterator = c.iterator();//hasNext():判斷是否還有下一個元素while (iterator.hasNext()) {//next():兩個作用:指針下移;返回下移以后的集合位置上的元素System.out.println(iterator.next());}

????????3.內(nèi)部定義了remove()方法;刪除遍歷后集合中的元素,此方法不同于集合中調(diào)用的remove;

????????4.jdk5.0后使用foreach,用于遍歷集合、數(shù)組;也叫做增強for循環(huán)

ArrayList a = new ArrayList();
//增強for循環(huán)
for(Object obj : a){System.out.println(obj);
}//for遍歷
for (int i = 0; i < a.size(); i++) {System.out.println(a.get(i));
}//iterator迭代器
Iterator iterator = a.iterator();
while(iterator.hasNext()){System.out.println(iterator.next());
}

5.List接口

看作是數(shù)組的替換,動態(tài)數(shù)組

1.存儲有序的、可重復(fù)的數(shù)據(jù);有三個實現(xiàn)類ArrayList、LinkedList、Vector

2.ArrayList、LinkedList、Vector相同點

?????????三個類都實現(xiàn)了List接口;存儲數(shù)據(jù)都有序可重復(fù)。

3.不同點

1.ArrayList

????????作為List接口的主要實現(xiàn)類;線程不安全,執(zhí)行效率比較高;底層使用object[ ]存儲。適合查找元素,復(fù)雜度較低;不適合插入、刪除操作。

2.LinkedList

????????對于頻繁的插入、刪除操作,使用此類效率比ArrayList高,底層使用雙向鏈表存儲;不適合查找元素,復(fù)雜度較高。

3.Vector

????????作為List接口中的古老實現(xiàn)類,線程安全,效率比較低;底層使用object[ ]存儲

4.Vector源碼分析

? ? ? ? jdk7和idk8中都是通過Vector()構(gòu)造器創(chuàng)建對象,底層都創(chuàng)建了長度為10的數(shù)組

????????在數(shù)組容量不夠需要擴容方面,默認擴容為原來的數(shù)組長度的2倍。

 //源碼public Vector() {this(10);}

5.ArrayList源碼分析

1.jdk 7情況下

ArrayList List = new ArrayList();//源碼
private static final int DEFAULT_CAPACITY = 10;

????????此時:底層創(chuàng)建了長度是10的object[ ]數(shù)組elementData

List.add(123);//elementDatale[0] = new Integer(123);

????????此時:elementDatale[0] = new Integer(123);
????????若:List.add()添加到第十一次:

List.add(11);

????????此時:若此次的添加導(dǎo)致底層eLlementData數(shù)組容量不夠,則擴容。默認情況下,擴容為原來的容量的1.5倍,同時需要將原有數(shù)組中的數(shù)據(jù)復(fù)制到新的數(shù)組中
結(jié)論:建議開發(fā)中使用帶參的構(gòu)造器:

ArrayList list = new ArrayList(int capacity)


2.jdk 8中ArrayList的變化:

ArrayList List = new ArrayList();
?
//源碼transient Object[] elementData;
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

????????此時:底層創(chuàng)建了bject[ ]數(shù)組,而elementData初始化為{},說明此時的elementData并沒有創(chuàng)建
若調(diào)用

List.add(123);//elementDatale[0] = new Integer(123);
    //源碼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 static final int DEFAULT_CAPACITY = 10;

????????此時:第一次調(diào)用add(),add()調(diào)用底層ensureCapacityInternal()方法,底層傳入的最小數(shù)組容量為:calculateCapacity(elementData, minCapacity),calculateCapacity()方法返回的是DEFAULT_CAPACITY = 10(沒有擴容的情況下);之后將并將數(shù)據(jù)123添加到elementData
后續(xù)的添加和擴容操作與idk 7 一樣。


2.3小結(jié):

????????jdk7中的ArrayList的對象的創(chuàng)建類似于單例模式中的餓漢式,而idk8中的ArrayList的對象的創(chuàng)建類似于單例的懶漢式,延遲了數(shù)組的創(chuàng)建,節(jié)省內(nèi)存。

6.LinkedList源碼分析

LinkedList list = new LinkedList();

????????此時:內(nèi)部聲明了Node類型的first和last性,默認值為null

transient Node<E> first;//null
transient Node<E> last;//null

????????向list中封裝數(shù)據(jù):?

List.add(123);

????????此時:直到往list中封裝數(shù)據(jù)后,開始創(chuàng)建Node對象,將123封裝到Node中。
其中,Node定義為:

    private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}

LinkedList 對數(shù)據(jù)的封裝,就是說把數(shù)據(jù)封裝成Node 對象;當(dāng)往list封裝數(shù)據(jù)后,創(chuàng)建Node對象,并根據(jù)此時的具體情況創(chuàng)建prev和next屬性;

????????prev屬性表示previous-上一個:若此時的元素不是第一個元素,則指向上一個節(jié)點

? ? ? ? next屬性表示下一個:指向下一個節(jié)點

????????item屬性:保存了當(dāng)前節(jié)點的值

這幾個屬性體現(xiàn)了LinkedList的雙向鏈表的說法

6.List中的常用方法

加入了調(diào)用索引的方法

????????1.add(int index,Object o);在index插入o

????????2.addAll():在index加入一個集合中的所有元素

????????3.get():獲取索引處元素

????????4.indexOf(Object o):返回o在集合中首次出現(xiàn)位置(若找不到就返回-1)

????????5.lastIndexOf(Object o):返回o在集合中末次出現(xiàn)位置(不存在就返回-1)

????????6.remove(int index):刪除指定索引處元素

????????7.set(inded,o):設(shè)置指定索引位置元素

????????8.subList(from,toIndex):返回指定位置集合

7.區(qū)分remove刪除的是元素還是索引

????????在List方法中提供了重載的remove刪除該索引處元素

????????而Collection中刪除的是該元素(若Collection無序就不存在索引)

8.Set接口存在三個主要的實現(xiàn)類

set接口中沒有額外定義新的方法,使用的都是Collection中聲明過的方法。

1.HashSet

????????set接口的主要實現(xiàn)類;是線程不安全的;可以存儲null值;

2.LinkedHashSet

????????作為HashSet的子類,遍歷內(nèi)部數(shù)據(jù)時,可以按照添加的順序遍歷

3.TreeSet

????????可以按照添加的對象指定屬性,進行排序。

4.如何理解Set的無序、不可重復(fù)特性(以HashSet為例)

?????? 無序性:不等于隨機性;存儲的數(shù)據(jù)在底層數(shù)組中并非按照數(shù)組索引的順序添加,而是根據(jù)數(shù)據(jù)的哈希值決定.添加時是無序

????? 不可重復(fù)性:保證添加的元素按照equals()判斷時,不能返回true;即相同的元素只能添加一個。

5.set中添加元素的過程(以HashSet為例)

????????向HashSet中添加元素a,首先調(diào)用a所在類的hashCode方法,計算a的哈希值,此哈希值接著通過某種算法計算出a在HashSet底層數(shù)組中的存放位置(即索引位置),判斷數(shù)組位置上是否已經(jīng)有元素,如果此位置沒有其他元素,則a添加成功;若此位置有其他元素b(或以鏈表形式存在的多個元素),則比較a與b的hash值,若哈希值不同,則a添加成功,若哈希值相同,則調(diào)用a所在類的equals()方法,若equals返回true,則a添加失敗,若返回false,則a添加成功。

6.HashSet底層

????????數(shù)組+鏈表形式。

7.要求

????????向Set中添加的數(shù)據(jù),其所在的類一定要重寫hashCode()和equals();重寫的hashCode()和equals()盡可能保持一致性:相等的對象必須具有相等的散列碼(即哈希值)

9.LinkedHashSet的使用

????????1.LinkedHashSet的使用作為HashSet的子類,在添加數(shù)據(jù)的同時,每個數(shù)據(jù)還維護了兩個引用,記錄此數(shù)據(jù)前一個數(shù)據(jù)和后一個數(shù)據(jù)

????????2.優(yōu)點:對于頻繁的遍歷操作,效率高于HashSet()

10.TreeSet()的使用

????????1.向TreeSet中添加的數(shù)據(jù),要求是相同類的對象,不能添加不同類的對象。

????????2.兩種排序方式:自然排序(實現(xiàn)Comparable接口)、定制排序(comparator)

????????3.自然排序中,比較兩個對象是否相同的標(biāo)準(zhǔn)為compareTo()方法返回0;不再是equals()方法

????????4.定制排序中,比較兩個對象是否相同的標(biāo)準(zhǔn)是compare()返回0,不再是equals()方法

    //Comparable 自然排序
public class Person implements Comparable {@Overridepublic int compareTo(Object o) {if (o instanceof Person){Person oo = (Person)o;return this.age - (oo.getAge());}else {throw new RuntimeException("輸入的類型不一致");}}
}//comparator:定制排序Set set3 = new TreeSet(new Comparator() {@Overridepublic int compare(Object o1, Object o2) {if (o1 instanceof Person && o2 instanceof Person){Person oo1 = (Person)o1;Person oo2 = (Person)o2;return oo1.getName().compareTo(oo2.getName());}else{throw new RuntimeException("輸入的類型不一致。");}}});

11.Map接口

1.HashMap

????????Map的主要實現(xiàn)類;線程不安全的,效率高;可以存儲null的key和value。

????????底層:jdk7之前:數(shù)組+鏈表

? ? ? ? ? ? ? ? ???jdk8:數(shù)組+鏈表+紅黑樹

2.LinkedHashMap

????????保證在遍歷map元素時,可以按照添加的順序實現(xiàn)遍歷。

????????原因:在原有的HashMap底層結(jié)構(gòu)基礎(chǔ)上,添加了一對指針,指向前一個和后一個元素。

? ? ? ? ? ? ? ? ? ?對于頻繁的遍歷操作,效率高于HashMap

3.TreeMap

????????可以按照添加的key- value進行排序,實現(xiàn)排序遍歷。此時考慮key的自然排序或定制排序。底層使用紅黑樹。

4.Hashtable

????????作為古老的實現(xiàn)類;線程安全的,效率低;不能存儲null的key和value

5.Properties

????????常用來處理配置文件。key和value都是String類型。

12.Map的鍵與值

????????1.Map當(dāng)中的key是無序的不可重復(fù)的,是使用Set存儲的;values也是無序的,但是可以重復(fù),使用Collection存儲;而實際上使用put(key,value)時向Map中存儲的是一個Entry對象,該對象有兩個屬性,一個是key,另一個是value,且Entry也是使用Set存儲的,無序不可重復(fù)。

????????2.以HashMap為例,key所在的類必須重寫equals()和hashCode()方法values所在的類要重寫equals()方法。

????????3.hashCode方法主要是存的時候效率高一點,在查找值時方便一點。

13.HashMap的底層實現(xiàn)原理

1.以jdk7說明

HashMap被實例化后,底層創(chuàng)建長度為16的一維數(shù)組Entry[ ] table。

????????調(diào)用put(key1,value1)后,會先調(diào)用key1所在類的hashCode()方法計算key1的哈希值,此哈希值經(jīng)過計算后得到Entry數(shù)組在底層的存放位置

????????????????若此位置為,則key1-value1添加成功

? ? ? ? ? ? ? ? 若此位置不為空,則比較key1和該位置元素(假設(shè)為key2-value2)的哈希值

? ? ? ? ? ? ? ? ? ? ? ? 若key1的哈希值和該元素key2哈希值都不相同,則key1-value1添加成功

? ? ? ? ? ? ? ? ? ? ? ? 若key1的哈希值和該元素key2哈希值相同,則比較key1所在類的equals(key2)方法

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 若equals()返回false,則key1-value1添加成功

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 若equals返回true,則value1將value2進行替換

2.jdk8和jdk7的不同

? ? ? ? 1.new HashMap()后不會創(chuàng)建長度為16的數(shù)組Entry[ ] table

? ? ? ? 2.jdk8 底層使用Node[ ],而不是Entry[ ]?

? ? ? ? 3.調(diào)用put方法時,底層創(chuàng)建長度為16的數(shù)組

? ? ? ? 4.jdk7底層結(jié)構(gòu)為數(shù)組+鏈表

? ? ? ? ? ?jdk8中的底層結(jié)構(gòu)為數(shù)組+鏈表+紅黑樹;當(dāng)數(shù)組的某一個索引位置元素以鏈表形式存在的數(shù)據(jù)個數(shù)大于8且當(dāng)前數(shù)組長度大于64,則將該索引位置上的所有數(shù)據(jù)改為使用紅黑樹存儲。

? ? ? ?

3.HashMap的默認值

HashMap的默認容量:16

HashMap的加載因子:0.75

擴容的臨界值:容量*加載因子:16*0.75=12

鏈表形式存在的數(shù)據(jù)大于8:轉(zhuǎn)化為紅黑樹

Node被樹化時最小的hash表容量:64

14.Map接口中常用的方法

????????1.put():添加key- value的Node對象

????????2.putAll(Map m):將m中所有Node添加

????????3.remove(key):刪除指定key的鍵值對

????????4.clear():清空當(dāng)前map

????????5.get(key):獲取key的value

????????6.containsKey(key):是否包含kry

????????7.contains Value()

????????8.size():Node個數(shù)

????????9.isEmpty()

????????10.equals():兩個Map是否相同

15.遍歷Map的方法

????????1.遍歷所有的key:keySet()

????????2.遍歷所有的value:values()

????????3.遍歷所有的key-value():entrySet()

代碼示例:

    @Testpublic void test(){//1.遍歷keyMap map = new HashMap();map.put("Tom",12);map.put("Jerry",45);map.put("Mary","AA");System.out.println(map);Set set = map.keySet();Iterator iterator = set.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}//2.遍歷valueCollection c = map.values();System.out.println(c);for (Object o : c){System.out.println(o);}System.out.println("-------------------------------");//3.遍歷NodeSet s1 = map.entrySet();Iterator iterator1 = s1.iterator();while(iterator1.hasNext()){Object obj = iterator1.next();Map.Entry entry = (Map.Entry)obj;System.out.println(entry.getKey() + " === " + entry.getValue());}}

16.TreeMap

????????1.向TreeMap中添加key-value,要求key必須由同一個類創(chuàng)建的對象

????????2.因為要按照key進行排序:自然排序、定制排序

17.Collections工具類

操作Collection和Map的工具類

????????1.Collections類中提供了synchronizeXxx():該方法可以使指定集合包裝成線程同步的集合,從而可以解決多線程并發(fā)訪問集合時的線程安全問題。

????????2.reverse(List):反轉(zhuǎn)list中元素順序

????????3.shuffle():對集合元素隨機排序

????????4.sort():根據(jù)自然順序?qū)χ付╨ist元素升序

????????5.swap():將制定list中的i元素交換為j元素

????????6.frequency():返回指定集合元素出現(xiàn)次數(shù)

????????7.copy(i,j):將j復(fù)制到i

19.Collection和Collections的區(qū)別

????????Collection是單列集合的接口,子接口有List和Set;

????????Collections是操作Collection和Map的工具類。

http://www.risenshineclean.com/news/47140.html

相關(guān)文章:

  • wordpress建購物網(wǎng)站成都網(wǎng)絡(luò)營銷公司哪家好
  • wordpress網(wǎng)站突然打不開阿里云域名注冊官網(wǎng)
  • 做網(wǎng)站騙子成都seo論壇
  • 用jsp怎么做網(wǎng)站關(guān)鍵詞排名推廣軟件
  • 中國做網(wǎng)站瀏覽器打開網(wǎng)站
  • 診斷網(wǎng)站seo現(xiàn)狀的方法廣州市網(wǎng)絡(luò)seo外包
  • 怎么查看網(wǎng)站是否備案網(wǎng)站top排行榜
  • 衢州做網(wǎng)站的公司bt種子搜索
  • 信息網(wǎng)站怎么做網(wǎng)絡(luò)零售的優(yōu)勢有哪些
  • 深圳商城網(wǎng)站建設(shè)google學(xué)術(shù)搜索
  • 介紹自己做的電影網(wǎng)站google推廣專員招聘
  • 南寧網(wǎng)站建設(shè)清單怎么注冊網(wǎng)址
  • 網(wǎng)站提交收錄入口鏈接福州短視頻seo
  • 新網(wǎng)站如何做seo推廣網(wǎng)站的友情鏈接是什么意思
  • 百度seo sem南京seo優(yōu)化培訓(xùn)
  • 教育類電商網(wǎng)站seo優(yōu)化網(wǎng)站
  • 萊蕪翰林名苑萊蕪論壇杭州seo價格
  • 公司網(wǎng)站建設(shè)南寧百度客服電話24小時人工服務(wù)熱線
  • 什么網(wǎng)站好看用h5做外貿(mào)網(wǎng)站谷歌seo
  • 怎樣網(wǎng)絡(luò)營銷推廣東莞優(yōu)化疫情防控措施
  • 做 專而精 的網(wǎng)站網(wǎng)站宣傳文案范例
  • 網(wǎng)站移動頁面怎么做google關(guān)鍵詞規(guī)劃師
  • 高校網(wǎng)站建設(shè)管理辦法怎樣做一個自己的網(wǎng)站
  • wordpress會員查看內(nèi)容收費免費seo網(wǎng)站的工具
  • 漸變網(wǎng)站seo海外
  • 轉(zhuǎn)業(yè)做網(wǎng)站的工具如何建造自己的網(wǎng)站
  • 蘇州哪家做網(wǎng)站便宜免費創(chuàng)建網(wǎng)站軟件
  • 戴爾cs24TY可以做網(wǎng)站嗎蘇州網(wǎng)站開發(fā)公司
  • 做站群的網(wǎng)站怎么來什么軟件可以發(fā)布推廣信息
  • 如何做網(wǎng)站遷移網(wǎng)絡(luò)營銷手段