三.集合框架

1.String類:字符串(重點)

?(1)多個字符組成的一個序列刻获,叫字符串坪创。

?? ? ? 生活中很多數(shù)據(jù)的描述都采用的是字符串的。而且我們還會對其進(jìn)行操作侍瑟。

?? ? ? 所以唐片,java就提供了這樣的一個類供我們使用。

?? ?(2)創(chuàng)建字符串對象

?? ??? ?A:String():無參構(gòu)造

?? ??? ??? ?**舉例:

?? ??? ??? ? ?String s = new String();

?? ??? ??? ? ?s = "hello";

?? ??? ??? ? ?sop(s);

?? ??? ?B:String(byte[] bys):傳一個字節(jié)數(shù)組作為參數(shù) *****

?? ??? ??? ?**舉例

?? ??? ??? ? ?byte[] bys = {97,98,99,100,101};

?? ??? ??? ? ?String s = new String(bys);

?? ??? ??? ? ?sop(s);

?? ??? ?C:String(byte[] bys,int index,int length):把字節(jié)數(shù)組的一部分轉(zhuǎn)換成一個字符串 *****

?? ??? ??? ?**舉例

?? ??? ??? ? ?byte[] bys = {97,98,99,100,101};

?? ??? ??? ? ?String s = new String(bys,1,2);

?? ??? ??? ? ?sop(s);

?? ??? ?D:String(char[] chs):傳一個字符數(shù)組作為參數(shù) *****

?? ??? ??? ?**舉例

?? ??? ??? ? ?char[] chs = {'a','b','c','d','e'};

?? ??? ??? ? ?String s = new String(chs);

?? ??? ??? ? ?sop(s);

?? ??? ?E:String(char[] chs,int index,int length):把字符數(shù)組的一部分轉(zhuǎn)換成一個字符串 *****

?? ??? ??? ?**舉例

?? ??? ??? ? ?char[] chs = {'a','b','c','d','e'};

?? ??? ??? ? ?String s = new String(chs,1,2);

?? ??? ??? ? ?sop(s);?? ?

?? ??? ?F:String(String str):把一個字符串傳遞過來作為參數(shù)

?? ??? ??? ? ?char[] chs = {'a','b','c','d','e'};

?? ??? ??? ? ?String ss = new String(s);

?? ??? ??? ? ?sop(ss);

?? ??? ?G:直接把字符串常量賦值給字符串引用對象(最常用) *****

?? ??? ??? ?**舉例

?? ??? ??? ? ?String s = "hello";

?? ??? ??? ? ?sop(s);

?? ?(3)面試題

?? ??? ?A:請問String s = new String("hello");創(chuàng)建了幾個對象涨颜。

?? ??? ? ?兩個费韭。一個"hello"字符串對象,在方法區(qū)的常量池庭瑰;一個s對象星持,在棧內(nèi)存。

?? ??? ?B:請寫出下面的結(jié)果

?? ??? ??? ?String s1 = new String("abc");

?? ??? ??? ?String s2 = new String("abc");

?? ??? ??? ?String s3 = "abc";

?? ??? ??? ?String s4 = "abc";

?? ??? ??? ?sop(s1==s2); ?//false

?? ??? ??? ?sop(s1==s3); ?//false

?? ??? ??? ?sop(s3==s4); ?//true

?? ??? ?C:字符串對象一旦被創(chuàng)建就不能被改變弹灭。

?? ??? ??? ?指的是字符串常量值不改變督暂。

?? ?(4)字符串中各種功能的方法

?? ??? ?A:判斷

? ? ? ? boolean equals(Object anObject):判斷兩個字符串的內(nèi)容是否相同,復(fù)寫了Object的方法

? ? ? ? boolean equalsIgnoreCase(String anotherString):判斷兩個字符串的內(nèi)容是否相同穷吮,不區(qū)分大小寫

? ? ? ? boolean contains(String s):判斷一個字符串中是否包含另一個字符串.注意:判斷字符串是否包含特殊字符.直接表示為str.contains(".")

? ? ? ? boolean endsWith(String suffix):測試此字符串是否以指定的后綴結(jié)束

? ? ? ? boolean startsWith(String suffix):測試此字符串是否以指定的前綴開始

? ? ? ? boolean isEmpty():測試字符串是否為空

?? ??? ?B:獲取

? ? ? ? int length():返回此字符串的長度

? ? ? ? char charAt(int index):返回指定索引處的 char值

? ? ? ? int indexOf(int ch):返回指定字符在此字符串中第一次出現(xiàn)處的索引逻翁。?

? ? ? ? int indexOf(int ch, int fromIndex):返回在此字符串中第一次出現(xiàn)指定字符處的索引,從指定的索引開始搜索捡鱼。?

? ? ? ? int indexOf(String str):返回指定子字符串在此字符串中第一次出現(xiàn)處的索引卢未。?

? ? ? ? int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出現(xiàn)處的索引,從指定的索引開始堰汉。?

? ? ? ? int lastIndexOf(int ch):返回指定字符在此字符串中最后一次出現(xiàn)處的索引辽社。

? ? ? ? int lastIndexOf(int ch, int fromIndex) :返回指定字符在此字符串中最后一次出現(xiàn)處的索引,從指定的索引處開始進(jìn)行反向搜索。?

? ? ? ? ?int lastIndexOf(String str):返回指定子字符串在此字符串中最右邊出現(xiàn)處的索引翘鸭。?

? ? ? ? ?int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出現(xiàn)處的索引滴铅,從指定的索引開始反向搜索。?

? ? ? ? ?String substring(int beginIndex) (注意:該方法substring的String是小寫>团摇:撼住!)返回一個新的字符串生蚁,它是此字符串的一個子字符串噩翠。?

? ? ? ? ?String substring(int beginIndex, int endIndex) (注意該方法的String是小寫!0钔丁伤锚!)返回一個新字符串,它是此字符串的一個子字符串,包含頭不包含尾志衣。?

?? ??? ?C:轉(zhuǎn)換

? ? ? ? byte[] getBytes():(很常用屯援!)從字符串到字節(jié)數(shù)組的方法

? ? ? ? void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) :將字符從此字符串復(fù)制到目標(biāo)字符數(shù)組猛们。?

? ? ? ? char[] toCharArray():(很常用!)從字符串到字符數(shù)組的方法

? ? ? ? static String copyValueOf(char[] data)? 返回指定數(shù)組中表示該字符序列的 String狞洋。?

? ? ? ? static String copyValueOf(char[] data, int offset, int count):返回指定數(shù)組中表示該字符序列的 String弯淘。?

? ? ? ? static String valueOf(數(shù)據(jù)類型):把該數(shù)據(jù)類型的數(shù)據(jù)轉(zhuǎn)換成字符串。

? ? ? ? String toLowerCase():把字符串轉(zhuǎn)換成小寫

? ? ? ?String toUpperCase():把字符串轉(zhuǎn)換成大寫

? ? ? ? D:字符串的連接

? ? ? ? String concat(String str):將指定字符串連接到此字符串的結(jié)尾吉懊。

?? ??? ?E:替換

? ? ? ? String replace(char oldChar, char newChar):用新字符替換舊字符(替換所有)

? ? ? ? String replace(String target, String replacement):用新的子串換舊串

?? ??? F:分割

? ? ? ?String[] split(String regex):根據(jù)指定的字符串把一個字符串分割成一個字符串?dāng)?shù)組

?? ??? ?G:?? ?

?? ??? ??? ?String trim():去除字符串的前后空格

?? ??? ?H:?? ?

? ? ? ? int compareTo(String anotherString) 按字典順序比較兩個字符串庐橙。?

? ? ? ? ?int compareToIgnoreCase(String str) 按字典順序比較兩個字符串,不考慮大小寫借嗽。?

2.StringBuffer

?? ?(1)字符串的緩沖區(qū)态鳖,是一個容器。

?? ?(2)它和String的區(qū)別:它是緩沖區(qū)可變長度的淹魄。

?? ?(3)構(gòu)造方法

?? ??? ?StringBuffer() 構(gòu)造一個其中不帶字符的字符串緩沖區(qū)郁惜,初始容量為 16 個字符堡距。

?? ??? ?StringBuffer(int num) 構(gòu)造一個不帶字符甲锡,但具有指定初始容量的字符串緩沖區(qū)。

?? ??? ?StringBuffer(String str) 構(gòu)造一個字符串緩沖區(qū)羽戒,并將其內(nèi)容初始化為指定的字符串內(nèi)容缤沦。

?? ?(4)常用方法

?? ??? ?A:增加數(shù)據(jù)

? ? ? ? ? ? append :添加各種類型的數(shù)據(jù)

? ? ? ? ? ? insert : 在容器指定位置插入各種類型的數(shù)據(jù)。

?? ??? ?B:刪除數(shù)據(jù)

? ? ? ? ? ? deleteCharAt : 刪除指定位置的字符

? ? ? ? ? ? delete 還可以用于清空StringBuffer的緩沖區(qū)

?? ??? ?C:替換

? ? ? ? ? ? replace

?? ??? ?D:獲取?

? ? ? ? ? ? charAt?

?? ??? ?E:長度和容量

? ? ? ? ? ? length() 元素的個數(shù)

? ? ? ? ? ? capacity 元素的理論值

?? ??? ?F:獲取元素的位置

? ? ? ? ? ? indexOf

? ? ? ? ? ? lastIndexOf

?? ??? ?G:截取

? ? ? ? ? ? substring(int start)

? ? ? ? ? ? substring(int start,int end)

?? ??? ?H:反轉(zhuǎn)

? ? ? ? ? ? reverse

?? ?(5)字符串和StringBuffer的轉(zhuǎn)換

?? ??? ?String-->StringBuffer通過構(gòu)造:

?? ??? ??? ?如:StringBuffer sb = new StringBuffer(String str)

?? ??? ?StringBuffer--String通過toString方法?

?? ??? ??? ?如:StringBuffer sb = new StringBuffer();

?? ??? ??? ? ? sb.toString();

3.StringBuilder

?? ?和StringBuffer的功能是一樣的易稠,但是有區(qū)別:

?? ?StringBuffer(JDK1.0)是線程安全的缸废。

?? ?StringBuilder(JDK1.5)不保證線程安全。

?? ?一般來說驶社,我們寫的程序都是單線程的企量,所以,用StringBuilder亡电,效率高届巩。

?? ?JDK版本的升級原則:

?? ?A:提高效率

?? ?B:提高安全性

?? ?C:簡化書寫

4.基本數(shù)據(jù)類型的對象包裝類

?? ?(1)為了更方便的操作每個基本數(shù)據(jù)類型,java對其提供了很多的屬性和方法供我們使用份乒。

?? ?(2)用途:

? ? ? ? 將基本數(shù)據(jù)類型封裝成對象的好處在于可以在對象中定義更多的功能操作該數(shù)據(jù)恕汇。

? ? ? ? 常用的操作之一:用于基本數(shù)據(jù)類型與字符串之間的轉(zhuǎn)換。

?? ??? ?A:方便操作

?? ??? ?B:用于和字符串進(jìn)行相互轉(zhuǎn)換

?? ?(3)基本數(shù)據(jù)類型和對象類型的對應(yīng)

?? ??? ?byte?? ??? ?Byte

?? ??? ?short?? ??? ?Short?

?? ??? ?int?? ??? ?Integer

?? ??? ?long?? ??? ?Long

?? ??? ?float?? ??? ?Float

?? ??? ?double?? ??? ?Double

?? ??? ?boolean?? ??? ?Boolean

?? ??? ?char?? ??? ?Character

?? ?(4)構(gòu)造方法

?? ??? ?字段摘要:

?? ??? ??? ?static int MAX_VALUE 值為 2^31-1 的常量或辖,它表示 int 類型能夠表示的最大值 ? ? ? ??

?? ??? ??? ?static int MIN_VALUE ?值為 -2^31 的常量瘾英,它表示 int 類型能夠表示的最小值

?? ??? ??? ?static Class<Integer> TYPE 表示基本類型int的Class 實例

?? ??? ?Integer(int value) 構(gòu)造一個新分配的Integer對象,它表示指定的int值颂暇。

?? ??? ?Inreger(String s) 注意:s必須是純數(shù)字的字符串缺谴。否則會有異常NumberFormatException

?? ?(5)幾個常用的方法

?? ??? ?Integer.toBinaryString();

?? ??? ??? ?以二進(jìn)制(基數(shù) 2)無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式。

?? ??? ?Integer.toOctalString();以八進(jìn)制(基數(shù) 8)無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式耳鸯。

?? ??? ?Integer.toHexString();以十六進(jìn)制(基數(shù) 16)無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式瓣赂。

?? ??? ?static int Integer.parseInt(String s) 將字符串參數(shù)作為有符號的十進(jìn)制整數(shù)進(jìn)行解析,字符串必須是int型范圍內(nèi)的數(shù)字字符串

?? ??? ?static int Integer.parseInt(String s,int basic)? 使用第二個參數(shù)指定的基數(shù),將字符串參數(shù)解析為有符號的整數(shù).字符串必須是int型范圍內(nèi)的數(shù)字字符串

?? ??? ?short shortValue() 以short類型返回該Integer的值榆骚。 ? ? ? ? ?

?? ??? ?int intValue() 以int類型返回該Integer的值。 ?

?? ??? ?static Integer valueOf(int num) 返回一個表示指定的 int 值的 Integer 實例煌集。

?? ??? ?static Integer valueOf(String s) 返回保存指定的String的值的Integer對象妓肢。 ? ? ? ? ??

? ? ? ? static Integer valueOf(String s, int radix) 返回一個Integer對象,該對象中保存了用第二個參數(shù)提供的基數(shù)進(jìn)行解析時從指定的String中提取的值苫纤。?

?? ?(6)類型轉(zhuǎn)換

?? ??? ?int -- Integer

?? ??? ??? ?int num = 20;

?? ??? ??? ?A:Integer i = new Integer(num);

?? ??? ??? ?B:Integer i = Integer.valueOf(num);

?? ??? ?Integer -- int

?? ??? ??? ?Integer i = new Integer(20);

?? ??? ??? ?A:int num = i.intValue();

?? ??? ?int -- String

?? ??? ??? ?int num = 20;

?? ??? ??? ?A:String s = String.valueOf(num);

?? ??? ??? ?B:String s = ""+num;

?? ??? ??? ?C:String s = Integer.toString(num);

?? ??? ?String -- int

?? ??? ??? ?String s = "20";

?? ??? ??? ?A:int num = Integer.parseInt(s);

?? ??? ??? ?B:Integer i = new Integer(s);或者Integer i = Integer.valueOf(s);

? ? ? ? ? ? ? ? ?int num = i.intValue();?? ?

5.集合框架:

?? ?(1)為什么出現(xiàn)集合類碉钠?

?? ??? ?面向?qū)ο髮κ挛锏捏w現(xiàn)都是以對象的形式,為了方便對多個對象的操作卷拘,就對對象進(jìn)行存儲喊废。

?? ??? ?集合就是存儲對象最常用的一種方式.

?? ?(2)數(shù)組和集合都是容器,兩者有何不同栗弟?

?? ??? ?**數(shù)組長度固定污筷,而集合長度是可變的?? ?

?? ??? ?**數(shù)組值可以存儲對象,還可以存儲基本數(shù)據(jù)類型;而集合只能存儲對象?? ?

?? ??? ?**數(shù)組存儲數(shù)據(jù)類型是固定的乍赫,而集合存儲的數(shù)據(jù)類型不固定?? ??? ?

?? ?(3)集合類的特點:

?? ??? ?集合只能存儲對象

?? ??? ?集合的長度是可變的

?? ??? ?集合可以存儲不同類型的對象

?? ?(4)集合類框架(重要0曛!雷厂!要分清幾種容器間的區(qū)別):

?? ??? ?**Collection:頂層接口

?? ??? ? ? ? |--->List:列表惋增,元素是有序的(元素帶角標(biāo)索引),可以有重復(fù)元素,可以有null元素改鲫。

? ? ? ? ? ? ? ? |--->ArrayList(JDK1.2):底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組數(shù)據(jù)結(jié)構(gòu)诈皿,特點是查詢速度快(因為帶角標(biāo)),但是增刪速度稍慢,因為當(dāng)元素多時像棘,增刪一個元素則所有元素的角標(biāo)都得改變線程不同步稽亏。默認(rèn)長度是10,當(dāng)超過長度時缕题,按50%延長集合長度截歉。? ? ? ? ? ? ? ?

?? ??? ??? ? ? ?|--->LinkedList(JDK1.2):底層數(shù)據(jù)結(jié)構(gòu)式鏈表數(shù)據(jù)結(jié)構(gòu)(即后面一個元素記錄前一個),特點:查詢速度慢,因為每個元素只知道前面一個元素避除,但增刪速度快因為元素再多怎披,增刪一個,只要讓其前后的元素重新相連即可線程是不同步的瓶摆。? ? ? ? ? ? ? ? ? ? ? ? ? ??

?? ??? ??? ? ? ?|--->Vector(JDK1.0):底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組數(shù)據(jù)結(jié)構(gòu).特點是查詢和增刪速度都很慢凉逛。默認(rèn)長度是10,當(dāng)超過長度時,按100%延長集合長度群井。線程同步状飞。(Vector功能跟ArrayList功能一模一樣,已被ArrayList替代)

?? ??? ? ? **List使用注意!

?? ??? ??? ?|--->ArrayList:

?? ??? ??? ?(1)當(dāng)往ArrayList里面存入元素沒什么要求時诬辈,即只要求有序就行時酵使;

?? ??? ??? ?(2)當(dāng)往ArrayList里面存入元素要求不重復(fù)時,比如存入學(xué)生對象焙糟,當(dāng)同名同姓時

?? ??? ??? ? ? 視為同一個人口渔,則不往里面存儲。則定義學(xué)生對象時穿撮,需復(fù)寫equals方法

?? ??? ??? ? ? public boolean equals(Object obj)

?? ??? ??? ? ? {

?? ??? ??? ??? ?if(!(obj instanceof Student))

?? ??? ??? ??? ??? ?return false;

?? ??? ??? ??? ?Student stu = (Student)obj;

?? ??? ??? ??? ?return this.name.equals(stu.name)&&this.age==stu.age;

?? ??? ??? ? ? }

?? ??? ??? ? ? 則往ArrayList集合通過add存入學(xué)生對象時缺脉,集合底層自己會調(diào)用學(xué)生類的equals方法,判斷重復(fù)學(xué)生則不存入悦穿。

?? ??? ??? ? 注:對于List集合攻礼,無論是add、contains栗柒、還是remove方法礁扮,判斷元素是否相同,都是通過復(fù)寫equals方法來判斷瞬沦!

?? ??? ??? ?|--->LinkedList

?? ??? ??? ?(1)LinkLedist的特有方法:

?? ??? ??? ??? ? boolean offerFirst(E e) ?在此列表的開頭插入指定的元素太伊。

?? ??? ??? ??? ? boolean offerLast(E e) 在此列表末尾插入指定的元素。

?? ??? ??? ??? ? E peekFirst() 獲取但不移除此列表的第一個元素蛙埂;如果此列表為空倦畅,則返回 null遮糖。

?? ??? ??? ??? ? E peekLast() 獲取但不移除此列表的最后一個元素绣的;如果此列表為空,則返回 null欲账。

?? ??? ??? ??? ? E pollFirst() 獲取并移除此列表的第一個元素屡江;如果此列表為空,則返回 null赛不。

?? ??? ??? ??? ? E pollLast() 獲取并移除此列表的最后一個元素惩嘉;如果此列表為空,則返回 null踢故。

?? ??? ??? ?(2)通過LinkLedist的特有方法文黎,可以實現(xiàn)某些數(shù)據(jù)特殊方式的存取,比如堆棧和隊列殿较。

?? ??? ??? ??? ?一般情況下耸峭,使用哪種List接口下的實現(xiàn)類呢?

?? ??? ??? ??? ?如果要求增刪快淋纲,考慮使用LinkedList

?? ??? ??? ??? ?如果要求查詢快劳闹,考慮使用ArrayList

?? ??? ??? ??? ?如果要求線程安全,考慮使用Vector。

?? ??? ? ? ? |--->Set:集合本涕,元素是無序的(因為沒有索引)业汰,元素不可以重復(fù)∑杏保可以有null元素样漆。

?? ??? ??? ? ? ?|--->HashSet(JDK1.2):底層數(shù)據(jù)結(jié)構(gòu)是哈希表、存取速度快晦闰、元素唯一氛濒、線程不同步。

?? ??? ??? ??? ??? ? 保證性元素唯一的原理:先判斷元素的hashCode值是否相同鹅髓,再判斷兩元素的equals方法是否為true(往HashSet里面存的自定義元素要復(fù)寫hashCode和equals方法舞竿, 以保證元素的唯一性!)

?? ??? ??? ? ? ?|--->TreeSet:底層數(shù)據(jù)結(jié)構(gòu)式二叉樹窿冯∑保可以對Set集合中的元素進(jìn)行排序。元素有序醒串、線程不同步执桌。保證元素唯一性的依據(jù):compareTo方法return 0

?? ??? ??? ??? ??? ? TreeSet排序的第一種方式:讓元素自身具備比較性,比如八種基本數(shù)據(jù)類型或則字符串芜赌, 實現(xiàn)Compareble接口,覆蓋compareTo方法仰挣,此方式是元素的自然順序? ? ? ? ? ? ?

?? ??? ??? ??? ??? ? TreeSet排序的第一種方式:當(dāng)元素自身不具備比較性(比如存儲學(xué)生對象時)或者具備的比較性不是我們所需要的比較性時(比如想字符串的長度排序),此時就需要讓集合自身具備自定義的比較性。 那如何讓集合自身具備比較性呢缠沈?可在集合初始化時膘壶,就讓集合具備比較方式。即定義一個類洲愤,實現(xiàn)Comparator接口颓芭,覆蓋compare方法。

?? ??? ??? ?**Set集合使用注意事項:

?? ??? ??? ?(1)HashSet:通過new的方式往HashSet里面存的元素的hashCode都不同柬赐,但通常我們定義對象亡问,比如學(xué)生對象時,雖然是new的兩個學(xué)生對象肛宋,但是當(dāng)他們name和age一樣時州藕,我們認(rèn)為是同一個對象,所以為了保證元素的唯一性酝陈,我們通常在往HashSet集合里面存儲元素時床玻,在定義對象的類中通常復(fù)寫hashCode和equals方法。

?? ??? ??? ? ? ? ?public int hashCode()

?? ??? ??? ? ? ? ?{

?? ??? ??? ??? ?return name.hashCode()+age*39;

?? ??? ??? ? ? ? ?}

?? ??? ??? ? ? ? ?public boolean equals(Object obj)

?? ??? ??? ? ? ? ?{

?? ??? ??? ??? ?if(!(obj instanceof Student))

?? ??? ??? ??? ??? ?return false;

?? ??? ??? ??? ?Student stu = (Student)obj;

?? ??? ??? ??? ?return this.name.equals(stu.name)&&this.age==stu.age;

?? ??? ??? ? ? ? ?}

?? ??? ??? ? ? ? HashSet是如何保證元素唯一性的呢后添?

?? ??? ??? ? ? ? ?**如果兩元素的hashCode值不同笨枯,則不會調(diào)用equals方法

?? ??? ??? ? ? ? ?**如果兩元素的hashCode值相同薪丁,則繼續(xù)判斷equals是否返回true;

?? ??? ??? ? ? ? ?**hashCode和equals方法雖然定義在自定義對象類里面馅精,但不是我們手動調(diào)用

?? ??? ??? ? ? ? ? ?而是往HashSet集合里面存儲元素的時候严嗜,集合底層自己調(diào)用hashCode和equals

?? ??? ??? ??? ?它自己拿對象去判斷,自己判斷兩元素是否是同一個元素。

?? ??? ??? ?(2)TreeSet:

?? ??? ??? ? ? ? TreeSet要求往里面存的元素具備比較性,否則會報錯疫铜。

?? ??? ??? ? ? ? TreeSet排序的第一種方式:讓元素自身具備比較性

?? ??? ??? ??? ? ?定義對象類,實現(xiàn)Compareble接口,復(fù)寫compareTo方法睦优,此方式是元素的自然順序

?? ??? ??? ??? ? ?class Student implements Comparable

?? ??? ??? ??? ? ?{

?? ??? ??? ??? ??? ?private String name;

?? ??? ??? ??? ??? ?private int age;

?? ??? ??? ??? ??? ?public Student(String name,int age)

?? ??? ??? ??? ??? ?{

?? ??? ??? ??? ??? ??? ?this.name=name;

?? ??? ??? ??? ??? ??? ?this.age=age;

?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ??? ?public String getName()

?? ??? ??? ??? ??? ?{

?? ??? ??? ??? ??? ??? ?return name;

?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ??? ?public int getAge()

?? ??? ??? ??? ??? ?{

?? ??? ??? ??? ??? ??? ?return age;

?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ??? ?public int compareTo(Object obj)

?? ??? ??? ??? ??? ?{

?? ??? ??? ??? ??? ??? ?if(!(obj instanceof Student))

?? ??? ??? ??? ??? ??? ??? ?throw new RuntimeException("不是學(xué)生對象!");

?? ??? ??? ??? ??? ??? ?Student stu = (Student)obj;

?? ??? ??? ??? ??? ??? ?int num = this.age-stu.age;

?? ??? ??? ??? ??? ??? ?if(num==0)

?? ??? ??? ??? ??? ??? ??? ?return this.name.compareTo(stu.name);

?? ??? ??? ??? ??? ??? ?return num;

?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ? ?}

?? ??? ??? ? ? ?TreeSet排序的第一種方式:讓集合具備比較性當(dāng)元素自身不具備比較性(比如存儲學(xué)生對象時)或者具備的比較性不是我們所需要的比較性時(比如想字符串的長度排序),此時就需要讓集合自身具備自定義的比較性壮不。那如何讓集合自身具備比較性呢汗盘?可在集合初始化時,就讓集合具備比較方式询一。即定義一個類隐孽,實現(xiàn)Comparator接口,覆蓋compare方法健蕊。

?? ??? ??? ??? ? class StringLengthComparator implements Comparator

?? ??? ??? ??? ? {

?? ??? ??? ??? ??? ?public int compare(Object obj1,Object obj2)

?? ??? ??? ??? ??? ?{

?? ??? ??? ??? ??? ??? ?String s1 = (String)obj1;

?? ??? ??? ??? ??? ??? ?String s2 = (String)obj2;

?? ??? ??? ??? ??? ??? ?int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));

?? ??? ??? ??? ??? ??? ?if(num==0)

?? ??? ??? ??? ??? ??? ??? ?return s1.compareTo(s2);

?? ??? ??? ??? ??? ??? ?return num;

?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ? }

?? ??? ??? ??? ? class TreeSetTest

?? ??? ??? ??? ? {

?? ??? ??? ??? ??? ?public static void main(String[] args)

?? ??? ??? ??? ??? ?{

?? ??? ??? ??? ??? ??? ?TreeSet ts = new TreeSet(new StringLengthComparator());

?? ??? ??? ??? ??? ??? ?ts.add("addfg");

?? ??? ??? ??? ??? ??? ?ts.add("dfg");

?? ??? ??? ??? ??? ??? ?ts.add("agtuug");

?? ??? ??? ??? ??? ??? ?ts.add("vgjkg");

?? ??? ??? ??? ??? ??? ?sop(ts);

?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ? }

?? ??? ??? ? ? ? 基本數(shù)據(jù)類型或字符串對象均實現(xiàn)了Comparable接口菱阵,故同種類型基本數(shù)據(jù)間具備比較性,即自然順序缩功。

?? ?**Map:頂層接口,該集合存儲的是鍵值對,而且鍵是唯一的,Map和Set很像,Set集合底層就是使用了Map集合晴及。

?? ??? ?Map集合沒有迭代器,要取出元素必須先將Map集合轉(zhuǎn)換成Set集合才能遍歷元素

?? ? ? |--->HashTable(JDK1.0):?

?? ??? ?底層是哈希表數(shù)據(jù)結(jié)構(gòu)嫡锌;

?? ??? ?不可以使用null鍵和null值虑稼;

?? ??? ?用作鍵的對象必須實現(xiàn)hashCode和equals方法來保證鍵的唯一性

?? ??? ?線程同步,效率低

?? ? ? |--->HashMap(JDK1.2):

?? ??? ?底層是哈希表數(shù)據(jù)結(jié)構(gòu)世舰;

?? ??? ?允許使用null鍵和null值动雹;

?? ??? ?線程不同步槽卫,效率高跟压;

?? ??? ?保證元素唯一性的:

?? ??? ??? ? 原理:先判斷元素的hashCode值是否相同,再判斷兩元素的equals方法是否為true(往HashSet里面存的自定義元素要復(fù)寫hashCode和equals方法歼培,以保證元素的唯一性震蒋!)

?? ??? ?class Student {

?? ??? ??? ?private String name;

?? ??? ??? ?private int age;

?? ??? ??? ?public Student(String name, int age) {

?? ??? ??? ??? ?super();

?? ??? ??? ??? ?this.name = name;

?? ??? ??? ??? ?this.age = age;

?? ??? ??? ?}

?? ??? ??? ?public int getAge() {

?? ??? ??? ??? ?return age;

?? ??? ??? ?}

?? ??? ??? ?public void setAge(int age) {

?? ??? ??? ??? ?this.age = age;

?? ??? ??? ?}

?? ??? ??? ?public String getName() {

?? ??? ??? ??? ?return name;

?? ??? ??? ?}

?? ??? ??? ?public void setName(String name) {

?? ??? ??? ??? ?this.name = name;

?? ??? ??? ?}

?? ??? ??? ?@Override

?? ??? ??? ?public int hashCode(){

?? ??? ??? ??? ?return name.hashCode()+age*34;

?? ??? ??? ?}

?? ??? ??? ?@Override

?? ??? ??? ?public boolean equals(Object obj){

?? ??? ??? ??? ?if(!(obj instanceof Student))

?? ??? ??? ??? ??? ?return false;

?? ??? ??? ??? ?Student stu = (Student)obj;

?? ??? ??? ??? ?return this.name.equals(stu.name)&&this.age==stu.age;

?? ??? ??? ?}

?? ??? ?public class HashMapDemo1 {

?? ??? ??? ?public static void main(String[] args) {

?? ??? ??? ??? ?Map<Student , String> hmap = new HashMap<Student , String>();

?? ??? ??? ??? ?hmap.put(new Student("001",20), "beijing");

?? ??? ??? ??? ?hmap.put(new Student("002",25), "hebei");

?? ??? ??? ??? ?hmap.put(new Student("003",50), "hainan");

?? ??? ??? ??? ?hmap.put(new Student("001",20), "beijing");

?? ??? ??? ??? ?System.out.println(hmap.size());

?? ??? ??? ??? ?Set<Student> keySet = hmap.keySet();

?? ??? ??? ??? ?Iterator<Student> it = keySet.iterator();

?? ??? ??? ??? ?while(it.hasNext()){

?? ??? ??? ??? ??? ?Student stu = it.next();

?? ??? ??? ??? ??? ?String addr = hmap.get(stu);

?? ??? ??? ??? ??? ?System.out.println(stu.getName()+".."+stu.getAge()+"::"+addr);

?? ??? ??? ??? ?}?? ?

?? ??? ??? ?}?? ?

?? ??? ?}?? ??? ??? ?

?? ? ? |--->TreeMap(JDK1.0):

?? ??? ?底層是二叉樹結(jié)構(gòu);

?? ??? ?允許使用null鍵和null值躲庄;

?? ??? ?線程不同步查剖;

?? ??? ?可以給Map集合中的鍵進(jìn)行排序.

?? ??? ?TreeMap排序的第一種方式:讓元素自身具備比較性,比如八種基本數(shù)據(jù)類型或則字符串,實現(xiàn)Compareble接口,覆蓋compareTo方法噪窘,此方式是元素的自然順序? ? ? ? ? ? ?

?? ??? ?TreeMap排序的第一種方式:當(dāng)元素自身不具備比較性(比如存儲學(xué)生對象時)或者具備的比較性不是我們所需要的比較性時(比如想字符串的長度排序),此時就需要讓集合自身具備自定義的比較性笋庄。 那如何讓集合自身具備比較性呢?可在集合初始化時,就讓集合具備比較方式直砂。即定義一個類菌仁,實現(xiàn)Comparator接口,覆蓋compare方法静暂。

?? ??? ?class Student implements Comparable<Student>{

?? ??? ??? ?private String name;

?? ??? ??? ?private int age;

?? ??? ??? ?public Student(String name, int age) {

?? ??? ??? ??? ?super();

?? ??? ??? ??? ?this.name = name;

?? ??? ??? ??? ?this.age = age;

?? ??? ??? ?}

?? ??? ??? ?public int getAge() {

?? ??? ??? ??? ?return age;

?? ??? ??? ?}

?? ??? ??? ?public void setAge(int age) {

?? ??? ??? ??? ?this.age = age;

?? ??? ??? ?}

?? ??? ??? ?public String getName() {

?? ??? ??? ??? ?return name;

?? ??? ??? ?}

?? ??? ??? ?public void setName(String name) {

?? ??? ??? ??? ?this.name = name;

?? ??? ??? ?}

?? ??? ??? ?@Override

?? ??? ??? ?public int compareTo(Student stu) {

?? ??? ??? ??? ?int num = new ?? ?Integer(this.age).compareTo(new Integer(stu.age));

?? ??? ??? ??? ?if(num==0)

?? ??? ??? ??? ??? ?return this.name.compareTo(stu.name);

?? ??? ??? ??? ?return num;

?? ??? ??? ?}?? ??? ??? ?

?? ??? ?}

?? ??? ?public class HashMapDemo1 {

?? ??? ??? ?public static void main(String[] args) {

?? ??? ??? ??? ?Map<Student , String> tmap = new TreeMap<Student , String>();

?? ??? ??? ??? ?tmap.put(new Student("001",20), "beijing");

?? ??? ??? ??? ?tmap.put(new Student("002",25), "hebei");

?? ??? ??? ??? ?tmap.put(new Student("003",50), "hainan");

?? ??? ??? ??? ?tmap.put(new Student("001",20), "beijing");

?? ??? ??? ??? ?System.out.println(tmap.size());

?? ??? ??? ??? ?Set<Student> keySet1 = tmap.keySet();

?? ??? ??? ??? ?Iterator<Student> it1 = keySet1.iterator();

?? ??? ??? ??? ?while(it1.hasNext()){

?? ??? ??? ??? ??? ?Student stu = it1.next();

?? ??? ??? ??? ??? ?String addr = tmap.get(stu);

?? ??? ??? ??? ??? ?System.out.println(stu.getName()+".."+stu.getAge()+"::"+addr);?? ??? ?

?? ??? ??? ??? ?}

?? ??? ??? ?}

?? ??? ?}

?? ?**Iterator:對collection進(jìn)行迭代的迭代器.迭代器取代了Enumeration济丘。

?? ??? ?迭代器和枚舉的區(qū)別:

?? ??? ?迭代器允許調(diào)用者利用定義良好的語義在迭代期間從迭代器所指向的collection移除元素

?? ??? ?方法名稱得到了改進(jìn),簡化書寫?

?? ?**LisIterator:系列表迭代器洽蛀,允許程序員按任一方向遍歷列表摹迷、迭代期間修改列表?? ??? ?

?? ?**Comparable:此接口強行對實現(xiàn)它的每個類的對象進(jìn)行整體自然排序。使元素具備比較性

?? ?**Comparator:強行對某個對象collection進(jìn)行整體排序的比較函數(shù)郊供,使集合具備比較性

?? ?**Collections:此類完全由在 collection 上進(jìn)行操作或返回 collection 的靜態(tài)方法組成峡碉。

?? ?**Arrays:此類包含用來操作數(shù)組(比如排序和搜索)的各種靜態(tài)方法

6.集合類各容器方法:

**接口Collection方法摘要(沒有構(gòu)造方法)?? ??? ?

?? ?a)添加:?? ??? ??? ??? ??? ??? ??? ?

?? ??? ?i. ?boolean add(E e)?? ??? ??? ??? ??? ??? ??? ?

?? ??? ?j. ?boolean addAll(Collection c)

?? ?b)刪除:

?? ??? ?i. ?void clear():清空容器

?? ??? ?j. ?boolean remove(Objec object):

?? ??? ?k. ?boolean removeAll(Collection c):

?? ?c)判斷:

?? ??? ?i. ?boolean contains(Object object):判斷是否包含此元素

?? ??? ?j. ?boolean containsAll(Collection c):判斷是否包含一堆元素

?? ??? ?k. ?boolean equals(Object object):比較此collection與指定對象是否相等

?? ??? ?m. ?boolean isEmpty():判斷是否集合為空

?? ?d)獲取:

?? ??? ?h. ?Iterator iterator():取出

?? ??? ?i. ?int hashCode():返回此collection的哈希值

?? ??? ?j. ?int size():返回此collection中元素的個數(shù)

?? ??? ?k. ?boolean retainAll(Collection c):取交集

?? ??? ?m. ?Object toArray():返回此collection中所有元素的數(shù)組

?? ??? ?n. ?T[] toArray(T[] a):返回包含此collection中所有元素的數(shù)值驮审。

*****List集合子類及其方法

?? ?(1)List接口是Collection接口的一個子接口异赫。

?? ?(2)List接口中的元素有如下特點(對角標(biāo)的操作都是特有方法,因為有序):

?? ??? ?A:元素有序(存儲順序和取出順序一致)

?? ??? ?B:元素可以重復(fù)

?? ?(3)List接口中的特有方法

?? ??? ?A:add(int index,Object obj):在指定位置加入元素

?? ??? ?B:remove(int index):移除指定位置的元素

?? ??? ?C:set(int index,Object obj):修改指定位置的元素

?? ??? ?D:get(int index):獲取指定位置的元素

?? ??? ?E:indexOf(Object obj):獲取指定元素的位置

?? ??? ?F:subList(int start,int end):從一個大的List中截取一個小的List

?? ??? ?G:listIterator():返回一個List接口特有的迭代器

(1)头岔、ArrayList:

? ? |--->構(gòu)造方法摘要:(少用塔拳,不是重點)

?? ?ArrayList():構(gòu)造一個初始容量為 10 的空列表。

?? ?ArrayList(Collection<? extends E> c): 構(gòu)造一個包含指定 collection 的元素的列表峡竣,?? ??? ??? ??? ??? ??? ? ??

?? ?ArrayList(int initialCapacity): 構(gòu)造一個具有指定初始容量的空列表靠抑。

? ? |--->方法摘要:

?? ?|--->添加:

?? ?boolean add(E e): 將指定的元素添加到此列表的尾部。

?? ?void add(int index, E element): 將指定的元素插入此列表中的指定位置适掰。

?? ?boolean addAll(Collection<? extends E> c):按照指定 collection 的迭代器所返回的元素順序颂碧,

?? ??? ??? ??? ??? ??? ? 將該 collection 中的所有元素添加到此列表的尾部?

?? ?boolean addAll(int index, Collection<? extends E> c): 從指定的位置開始,將指定 collection

?? ??? ??? ??? ??? ??? ??? ? ? ? ? 中的所有元素插入到此列表中类浪。?

?? ?|--->刪除:

?? ?void clear(): 移除此列表中的所有元素载城。

?? ?E remove(int index): 移除此列表中指定位置上的元素。?

?? ?boolean remove(Object o): 移除此列表中首次出現(xiàn)的指定元素(如果存在)费就。

?? ?protected ?void removeRange(int fromIndex, int toIndex):?

?? ??? ??? ?移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素诉瓦。

?? ?boolean removeAll(Collection<?> c): 從列表中移除指定 collection 中包含的其所有元素?

?? ?|--->獲取:

?? ?E get(int index): 返回此列表中指定位置上的元素力细。

?? ?int indexOf(Object o): 返回此列表中首次出現(xiàn)的指定元素的索引睬澡,或如果此列表不包含元素,則返回 -1眠蚂。

?? ?int lastIndexOf(Object o) 返回此列表中最后一次出現(xiàn)的指定元素的索引煞聪,或如果此列表不包含索引,則返回 -1逝慧。 ??

?? ?public List<E> subList(int fromIndex,int toIndex): 返回列表中指定的 fromIndex(包括 )?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? ? 和 toIndex(不包括)之間的部分視圖昔脯。

?? ?Iterator<E> iterator(): 返回按適當(dāng)順序在列表的元素上進(jìn)行迭代的迭代器啄糙。

?? ?ListIterator<E> listIterator(int index):返回列表中元素的列表迭代器(按適當(dāng)順序),從列表的指定位置開始。

?? ?|--->修改:(特有方法T浦伞迈套!)

?? ??? ?E set(int index, E element): 用指定的元素替代此列表中指定位置上的元素。?

(2)LinkedList:

?? ?|--->構(gòu)造方法摘要:

?? ??? ?LinkedList(): 構(gòu)造一個空列表碱鳞。?

?? ??? ?LinkedList(Collection<? extends E> c): 構(gòu)造一個包含指定 collection 中的元素的列表桑李,

?? ??? ??? ??? ??? ??? ? ? ? ? 這些元素按其 collection 的迭代器返回的順序排列。

?? ?|--->方法摘要:(特有的)

?? ??? ?|--->添加

?? ??? ??? ?void addFirst(E e): 將指定元素插入此列表的開頭窿给。?

?? ??? ??? ?void addLast(E e): 將指定元素添加到此列表的結(jié)尾贵白。?

?? ??? ?|--->獲取元素,但不刪除元素

?? ??? ??? ? E get(int index): 返回此列表中指定位置處的元素崩泡。 ? ? ? ? ??

?? ??? ??? ? E getFirst(): 返回此列表的第一個元素禁荒。 ? ? ? ? ?

?? ??? ??? ? E getLast(): 返回此列表的最后一個元素。

?? ??? ?|--->獲取元素且刪除元素

?? ??? ??? ? E remove(): 獲取并移除此列表的頭(第一個元素)角撞。 ? ? ? ? ?

?? ??? ??? ? E remove(int index): 移除此列表中指定位置處的元素呛伴。 ? ? ? ??

?? ??? ??? ? boolean remove(Object o): 從此列表中移除首次出現(xiàn)的指定元素(如果存在)。 ? ? ? ??

?? ??? ??? ? E removeFirst(): 移除并返回此列表的第一個元素谒所。?

?? ??? ??? ? E removeLast(): 移除并返回此列表的最后一個元素热康。

?? ??? ?|--->修改

?? ??? ??? ? E set(int index, E element) 將此列表中指定位置的元素替換為指定的元素。?

(3)Vector

?? ?|--->構(gòu)造方法摘要:

?? ??? ?Vector(): 構(gòu)造一個空向量劣领,使其內(nèi)部數(shù)據(jù)數(shù)組的大小為 10姐军,其標(biāo)準(zhǔn)容量增量為零。 ? ? ? ? ?

?? ??? ?Vector(Collection<? extends E> c): ?構(gòu)造一個包含指定 collection 中的元素的向量尖淘,

?? ??? ??? ??? ??? ??? ? ? ?這些元素按其 collection 的迭代器返回元素的順序排列奕锌。

?? ?|--->方法摘要:

?? ??? ?|--->添加:

?? ??? ??? ?boolean add(E e): 將指定元素添加到此向量的末尾。

?? ??? ??? ?void add(int index, E element): 在此向量的指定位置插入指定的元素村生。 ? ? ? ??

?? ??? ??? ?boolean addAll(Collection<? extends E> c):

?? ??? ??? ??? ??? ? 將指定 Collection 中的所有元素添加到此向量的末尾惊暴,?

?? ??? ??? ??? ??? ? 按照指定 collection 的迭代器所返回的順序添加這些元素。?

?? ??? ??? ?boolean addAll(int index, Collection<? extends E> c): 在指定位置將指定 Collection 中的所有元素插入到此向量中趁桃。

?? ??? ?|--->獲取:

?? ??? ??? ?Enumeration<E> elements(): 返回此向量的組件的枚舉辽话。

?? ??? ??? ? ? Vector特有的取出方式:

?? ??? ??? ? ? 枚舉和迭代器很像,其實枚舉和迭代器是一樣的镇辉,只是因為枚舉的名稱和方法的名稱

?? ??? ??? ? ? 名字都過長屡穗,所以枚舉被迭代器取代了。

?? ??? ??? ?|--->枚舉Enumeration的方法摘要:

?? ??? ??? ??? ? boolean hasMoreElements(): 測試此枚舉是否包含更多的元素忽肛。?

?? ??? ??? ??? ? E nextElement(): 如果此枚舉對象至少還有一個可提供的元素,

?? ??? ??? ??? ??? ??? ? ?則返回此枚舉的下一個元素烂斋。?

*****Set集合子類及其方法

(1)HashSet:它不保證set的迭代順序;特別是它不保證該順序恒久不變.此類允許使用null元素屹逛。?

?? ?|--->構(gòu)造方法:

?? ??? ?HashSet() 構(gòu)造一個新的空 set础废,其底層 HashMap 實例的默認(rèn)初始容量是 16,加載因子是 0.75罕模。

?? ??? ?HashSet(Collection<? extends E> c) 構(gòu)造一個包含指定 collection 中的元素的新 set评腺。

?? ?|--->方法摘要:

?? ??? ?boolean add(E e) 如果此 set 中尚未包含指定元素,則添加指定元素淑掌。 ??

?? ??? ?void clear() 從此 set 中移除所有元素蒿讥。?? ? ?

?? ??? ?Object clone() 返回此 HashSet 實例的淺表副本:并沒有復(fù)制這些元素本身。 ?? ? ?

?? ??? ?boolean contains(Object o) 如果此 set 包含指定元素抛腕,則返回 true芋绸。 ?? ? ?

?? ??? ?boolean isEmpty() 如果此 set 不包含任何元素,則返回 true担敌。 ?? ? ?

?? ??? ?Iterator<E> iterator() 返回對此 set 中元素進(jìn)行迭代的迭代器摔敛。 ?? ? ?

?? ??? ?boolean remove(Object o) 如果指定元素存在于此 set 中,則將其移除全封。?? ? ??

?? ??? ?int size() 返回此 set 中的元素的數(shù)量(set 的容量)马昙。 ?

(2)TreeSet:使用元素的自然順序?qū)υ剡M(jìn)行排序,或者根據(jù)創(chuàng)建 set 時提供的 Comparator 進(jìn)行排序.

?? ?|--->構(gòu)造方法:

?? ??? ?TreeSet() 構(gòu)造一個新的空 set刹悴,該set根據(jù)其元素的自然順序進(jìn)行排序行楞。 ? ? ? ? ?

?? ??? ?TreeSet(Collection<? extends E> c)?

?? ??? ??? ? 構(gòu)造一個包含指定 collection 元素的新 TreeSet,它按照其元素的自然順序進(jìn)行排序土匀。?

?? ??? ?TreeSet(Comparator<? super E> comparator) ?構(gòu)造一個新的空 TreeSet敢伸,它根據(jù)指定比較器進(jìn)行排序。

?? ?|--->方法摘要:

?? ??? ?添加:

?? ??? ? boolean add(E e) ?將指定的元素添加到此 set(如果該元素尚未存在于 set 中)恒削。

?? ??? ? boolean addAll(Collection<? extends E> c) 將指定 collection 中的所有元素添加到此 set 中池颈。

?? ??? ? 刪除:

?? ??? ? ?void clear() 移除此 set 中的所有元素。?

?? ??? ? ?boolean remove(Object o) ?將指定的元素從 set 中移除(如果該元素存在于此 set 中)钓丰。?

?? ??? ? ?E pollFirst() 獲取并移除第一個(最低)元素躯砰;如果此 set 為空,則返回 null携丁。?

?? ??? ? ?E pollLast() 獲取并移除最后一個(最高)元素琢歇;如果此 set 為空,則返回 null梦鉴。?

?? ??? ?獲壤蠲!:

?? ??? ? ?Iterator<E> iterator() ?返回在此 set 中的元素上按升序進(jìn)行迭代的迭代器。

?? ??? ? ?E first() 返回此 set 中當(dāng)前第一個(最低)元素肥橙。

?? ??? ? ?E last() 返回此 set 中當(dāng)前最后一個(最高)元素魄宏。

?? ??? ? ?int size() ?返回 set 中的元素數(shù)(set 的容量)。

?? ??? ?判斷:

?? ??? ? boolean isEmpty() ?如果此 set 不包含任何元素存筏,則返回 true宠互。?

?? ??? ? boolean contains(Object o) 如果此 set 包含指定的元素味榛,則返回 true。?

**Map:將鍵映射到值的對象予跌。Map集合沒有迭代器搏色!Map集合特點:該集合存儲鍵值對。而且鍵是唯一的券册。

?? ?|--->方法摘要:

?? ? ? |--->添加:

?? ? ? ? ?V put(K key, V value) 將指定的值與此映射中的指定鍵關(guān)聯(lián)(可選操作)频轿。 ? ? ? ? ??

?? ? ? ? ?void putAll(Map<? extends K,? extends V> m) 從指定映射中將所有映射關(guān)系復(fù)制到此映射中

?? ? ? |--->刪除:

? ? ? ? ? ? ? void clear() ?從此映射中移除所有映射關(guān)系(可選操作)。?

?? ? ? ? ?V remove(Object key) 如果存在一個鍵的映射關(guān)系烁焙,則將其從此映射中移除(可選操作)航邢。

?? ? ? |--->判斷

?? ? ? ? ?boolean containsKey(Object key) 如果此映射包含指定鍵的映射關(guān)系,則返回 true考阱。?

? ? ? ? ? ? ? boolean containsValue(Object value) 如果此映射將一個或多個鍵映射到指定值翠忠,則返回 true。

? ? ? ? ? ? ? boolean isEmpty() 如果此映射未包含鍵-值映射關(guān)系乞榨,則返回 true秽之。?

? ? ? ? ? ?|--->獲取

?? ? ? ? ?int size() 返回此映射中的鍵-值映射關(guān)系數(shù)。?

? ? ? ? ? ? ? Collection<V> values() ?返回此映射中包含的值的 Collection 視圖吃既。

? ? ? 重點:Map集合沒有迭代器考榨,以下是Map的兩種取出方式:

? ? ? 第一種:Set<K> keySet()

?? ??? ?返回此映射中包含的鍵的Set視圖,將Map集合中所有的鍵存入Set集合鹦倚,然后再通過Set集合的

?? ??? ?迭代器取出所有的鍵河质,再根據(jù)get方法獲取每個鍵的值;

? ? ? 第二種:Set<Map.Entry<K,V>> entrySet()?

?? ??? ?返回此映射中包含的映射關(guān)系的Set視圖震叙,將Map集合中的映射關(guān)系存入到Set集合中掀鹅,

?? ??? ?這個映射關(guān)系的數(shù)據(jù)類型是Map.entry,再通過Map.Entry類的方法再要取出關(guān)系里面的鍵和值

?? ??? ?Map.Entry的方法摘要:

?? ??? ??? ?boolean equals(Object o) ?比較指定對象與此項的相等性。?? ??? ??? ? ?

?? ??? ??? ?K getKey() ?返回與此項對應(yīng)的鍵媒楼。?? ??? ??? ? ?

?? ??? ??? ?V getValue() 返回與此項對應(yīng)的值乐尊。?? ??? ??? ? ??

?? ??? ??? ?int hashCode() 返回此映射項的哈希碼值。

?? ??? ??? ?V setValue(V value) 用指定的值替換與此項對應(yīng)的值(特有;贰H忧丁!)夺颤。

7.Map集合和Collection集合的區(qū)別痢缎?

?? ?1,

?? ?Map中一次存儲是鍵值對世澜。

?? ?Collection中一次存儲是單個元素独旷。

?? ?2,

?? ?Map的存儲使用的put方法。

?? ?Collection存儲使用的是add方法势告。?

?? ?3蛇捌,

?? ?Map集合沒有迭代器抚恒,Map的取出咱台,是將Map轉(zhuǎn)成Set,在使用迭代器取出俭驮。

?? ?Collection取出回溺,使用就是迭代器。

?? ?4混萝,

?? ?如果對象很多遗遵,必須使用集合存儲。

?? ?如果元素存在著映射關(guān)系逸嘀,可以優(yōu)先考慮使用Map存儲或者用數(shù)組车要,

?? ?如果沒有映射關(guān)系,可以使用Collection存儲崭倘。

8.迭代器:Iterator(Map集合沒有迭代器)

?? ?(1)迭代器就是取出集合元素的方式

?? ?(2)迭代器的作用因為每個集合中元素的取出方式都不一樣,于是就把元素的取出方式進(jìn)行抽取司光,并定義在集合內(nèi)部琅坡,這樣取出方式就可以直接訪問集合內(nèi)部的元素;而每個容器的數(shù)據(jù)結(jié)構(gòu)不同残家,所以取出動作的細(xì)節(jié)也不一樣榆俺,但是有共性內(nèi)容:判斷和取出。那么就將共性內(nèi)容進(jìn)行抽取坞淮,從而形成了接口Iterater

?? ?(3)獲取迭代器的方法:

?? ??? ?Iterator<E> iterator() 返回在此 collection 的元素上進(jìn)行迭代的迭代器茴晋。?

?? ??? ?Iterator<E> iterator() 返回在此 set 中的元素上進(jìn)行迭代的迭代器。 ? ? ?

?? ?(3)迭代器方法:

?? ??? ?boolean hasNext() 如果仍有元素可以迭代,則返回 true回窘。

?? ??? ?E next() 返回迭代的下一個元素诺擅。 ? ? ??

?? ??? ?void remove() 從迭代器指向的collection中移除迭代器返回的最后一個元素(可選操作)。

9.列表迭代器:ListIterator

?? ?(1)List集合特有的迭代器ListIterator是Iterator的子接口毫玖,在迭代時掀虎,不可以通過集合對象的方法操作集合中的元素,因為會發(fā)生ConcurrentModificationException(當(dāng)方法檢測到對象的并發(fā)修改付枫,但不允許這種修改時烹玉,拋出此異常)

?? ?(2)Iterator方法有限,只能對元素進(jìn)行判斷阐滩、取出和刪除的操作ListIterator可以對元素進(jìn)行添加和修改動作等二打。

?? ?(3)獲取列表迭代器方法:

?? ??? ?ListIterator<E> listIterator() 返回此列表元素的列表迭代器(按適當(dāng)順序)。?

?? ??? ?ListIterator<E> listIterator(int index)?

?? ??? ??? ?返回此列表中的元素的列表迭代器(按適當(dāng)順序)掂榔,從列表中指定位置開始继效。?

?? ?(4)列表迭代器方法:

?? ??? ?void add(E e) 將指定的元素插入列表(可選操作)症杏。

?? ??? ?boolean hasPrevious() ?如果以逆向遍歷列表,列表迭代器有多個元素瑞信,則返回 true厉颤。?

?? ??? ?int nextIndex() 返回對 next 的后續(xù)調(diào)用所返回元素的索引。 ? ? ? ??

?? ??? ?E previous() 返回列表中的前一個元素凡简。 ?? ? ?

?? ??? ?int previousIndex() 返回對 previous 的后續(xù)調(diào)用所返回元素的索引逼友。 ?? ? ?

?? ??? ?void set(E e) 用指定元素替換 next 或 previous 返回的最后一個元素(可選操作)。?

10.堆棧和隊列

?? ?堆棧:先進(jìn)后出秤涩,比如杯子里的水

?? ?隊列:先進(jìn)先出帜乞,比如水管的水

11.集合類各種容器的使用注意細(xì)節(jié):

?? ?(1)迭代器:

?? ??? ?**迭代器的next方法是自動向下取元素,要避免出現(xiàn)NoSuchElementException筐眷。也就是在迭代循環(huán)中調(diào)用一次next方法一次就要hasNext判斷一次黎烈,比如語句sop(it.next()+"..."+it.next())會發(fā)生上述異常。

?? ??? ?**迭代器的next方法返回值類型是Object匀谣,所以要記得類型轉(zhuǎn)換,應(yīng)用泛型后就不用強轉(zhuǎn)

?? ?(2)List集合:

?? ??? ?**List集合里面的元素因為是帶角標(biāo)照棋,所以List集合里面的元素都是有序的,另外List集合可以包含重復(fù)元素振定,也可以包含null必怜。??

?? ??? ?**List集合有迭代器Iterator,還有一個特有迭代器列表ListIterator

?? ??? ?**List集合中判斷元素是否相同都是用equals方法后频,無論contains梳庆、remove都依賴equals方法比如往ArrayList集合里面存放學(xué)生,同名同年齡視為同一個人卑惜,此時就需要在學(xué)生類復(fù)寫Object類里面的equals方法(非常重要8嘀础!露久!要注意8住!)

?? ?(3)Set集合:

?? ??? ?**Set接口里面存放的是元素是無序的毫痕,不可以有重復(fù)元素征峦,可以包含null

?? ??? ?**Set集合只有一種取出方式,就是迭代器Iterator

?? ??? ?**Set集合功能和Collection是一致的消请,沒有特殊方法

?? ? ? ?|--->HashSet:

?? ??? ?**集合里面存放的元素是無序的栏笆,唯一的

?? ??? ?**底層數(shù)據(jù)結(jié)構(gòu)是哈希表,哈希表結(jié)構(gòu)的數(shù)據(jù)都是無序的臊泰,哈希表結(jié)構(gòu)的操作效率都高效

?? ??? ?**線程不同步

?? ??? ?**保證元素唯一性的原理是:通過復(fù)寫hashCode和equals方法

?? ??? ??? ?****如果兩元素的hashCode值相同蛉加,則繼續(xù)判斷兩元素equals是否為真

?? ??? ??? ?****如果兩元素的hashCode值不同,則不會調(diào)用equals方法。

?? ??? ?**當(dāng)我們往HashSet集合存放自定義的元素時(比如學(xué)生對象)针饥,通常都要復(fù)寫hashCode和equals方法厂抽,

?? ??? ? ?而且hashCode和equals方法不通過我們調(diào)用,HashSet集合底層內(nèi)部自己調(diào)用丁眼,自己拿元素去比較

?? ? ? ?|--->TreeSet

?? ??? ?**TreeSet集合可以對存放的元素進(jìn)行排序筷凤,彌補了Set集合元素?zé)o序的缺點,且元素是唯一的

?? ??? ?**底層數(shù)據(jù)結(jié)構(gòu)是二叉樹户盯,二叉樹結(jié)構(gòu)都是有序的

?? ??? ?**線程不同步

?? ??? ?**TreeSet集合要求往集合里存放的元素自身具備比較性嵌施,否則會報錯

?? ??? ?**TreeSet集合保證元素唯一性的依據(jù)是:通過compareTo或者compare方法中的來保證元素的唯一性饲化。

?? ??? ??? ?TreeSet排序的第一種方式:讓元素自身具備比較性莽鸭,定義元素類實現(xiàn)Compareble接口,覆蓋compare方法吃靠,此方式是元素的自然順序硫眨。

?? ??? ??? ?TreeSet排序的第二種方式:讓集合具備比較性

?? ??? ??? ??? ??? ??? ?當(dāng)元素自身不具備比較性或者具備的比較性不是

?? ??? ??? ??? ??? ??? ?我們所需要的比較性時,此時就需要讓集合具備自定義的比較性巢块。

?? ??? ??? ??? ??? ??? ?那如何讓集合自身具備比較性呢礁阁?

?? ??? ??? ??? ??? ??? ?可在集合初始化時,就讓集合具備比較方式族奢。

?? ??? ??? ??? ??? ??? ?即定義一個類姥闭,實現(xiàn)Comparator接口,覆蓋compare方法越走。

?? ??? ??? ?注:

?? ??? ??? ?**判斷元素唯一時棚品,當(dāng)主要條件一樣時,判斷次要條件

?? ??? ??? ?**兩種排序方式都在時廊敌,以比較器為主M堋!骡澈!

?? ?(4)Map集合:

?? ??? ?|--Hashtable

?? ??? ??? ?底層是哈希表結(jié)構(gòu)

?? ??? ??? ?線程安全的锅纺,并且鍵和值不能為null。

?? ??? ?|--HashMap

?? ??? ??? ?底層是哈希表結(jié)構(gòu)

?? ??? ??? ?線程不安全的肋殴,鍵和值可以為null囤锉。

?? ??? ??? ?|--LinkedHashMap

?? ??? ??? ??? ?底層是鏈表和哈希表

?? ??? ??? ??? ?線程不安全

?? ??? ?|--TreeMap

?? ??? ??? ?底層是二叉樹

?? ??? ??? ?線程不安全的

12.如果你想將一組對象按一定順序存取,在不考慮并發(fā)訪問的情況下會使用____C_____ ,?

?? ?反之則會使用____A_____护锤;如果你想存儲一組無序但唯一的對象官地,你會使用___B______ ;?

?? ?如果你想按關(guān)鍵字對對象進(jìn)行存取,在不考慮并發(fā)訪問的情況下會使用___D______ ,反之則會使用_____E____蔽豺。

A. Vector

B. HashSet

C. ArrayList

D. HashMap

E. Hashtable

13.泛型:

?? ?(1)為什么會出現(xiàn)泛型区丑?

?? ??? ?因為集合存放的數(shù)據(jù)類型不固定,故往集合里面存放元素時,存在安全隱患沧侥,如果在定義集合時可霎,可以想定義數(shù)組一樣指定數(shù)據(jù)類型,那么就可以解決該類安全問題宴杀。 JDK1.5后出現(xiàn)了泛型癣朗,用于解決集合框架的安全問題。泛型是一個類型安全機制旺罢。

?? ?(2)泛型定義格式:通過<>來定義要操作的引用數(shù)據(jù)類型

?? ??? ?ArrayList<String> al = new ArrayList<String>;

?? ?(3)泛型的好處:

?? ??? ?**將運行時期出現(xiàn)的ClassCastException(類型轉(zhuǎn)換異常)問題轉(zhuǎn)移到編譯時期旷余;

?? ??? ?**避免了強制轉(zhuǎn)換的麻煩

?? ?(4)什么時候定義泛型?

?? ??? ?泛型在集合框架中很常見扁达,只要見到<>就要定義泛型正卧。其實<>就是用來接收類型的。當(dāng)使用集合時跪解,將集合中要存儲的數(shù)據(jù)類型作為參數(shù)傳遞到<>中即可

?? ?(5)泛型的形式

?? ??? ?**泛型類:即自定義泛型類

?? ??? ??? ?A:當(dāng)類中要操作的引用數(shù)據(jù)類型不確定時炉旷,早起定義Object來完成擴展,現(xiàn)在定義泛型來完成

?? ??? ??? ?B:局限性:泛型類定義的泛型叉讥,在整個類中有效窘行,如果該泛型類的方法被調(diào)用,當(dāng)泛型類的對象明確要操作的類型后图仓,所有要操作的類型就被固定罐盔。

?? ??? ?**泛型方法:泛型放在返回值前面,修飾符的后面

?? ??? ??? ?A:為了避免泛型類的局限性救崔,讓不同方法可以操作不同的類型惶看,而且類型還不確定,則可以將泛型定義在方法上

?? ??? ??? ?B:特殊之處:靜態(tài)方法不可以反問類上定義的泛型如果靜態(tài)方法操作的應(yīng)用數(shù)據(jù)類型不確定帚豪,可以講泛型定義在靜態(tài)方法上

?? ??? ?**泛型接口:當(dāng)泛型定義在接口上時碳竟,則子類中要指定實現(xiàn)接口類型,同時還可以子類也可以定義為泛型類

?? ?(6)泛型的高級應(yīng)用:狸臣?通配符

?? ??? ?**當(dāng)指定兩種泛型的集合莹桅,則迭代時也要定義兩種泛型的迭代器,麻煩烛亦,此時可通過將迭代器的泛型改為诈泼?,如Iterator<?> it=al.iterator();

?? ??? ?**兩種泛型限定

?? ??? ??? ?向上限定: ? extends E ?;E可以接收E類型或者E的子類

?? ??? ??? ?向下限定: ? super E ?;E可以接收E類型或者E的父類

14.高級for循環(huán)

?? ?(1)JDK1.5新特性煤禽,代替迭代器使用時的不爽铐达,簡化書寫,底層原理是迭代器凡是支持迭代器的都支持高級for循環(huán),高級for循環(huán)檬果,只用于集合和數(shù)組的遍歷瓮孙,集合只能用Collection不能用Map集合,只能把Map集合轉(zhuǎn)化成Set集合唐断,才能用for循環(huán)。

?? ?(2)格式

?? ??? ?for(數(shù)據(jù)類型 變量名:被遍歷的集合(Collection)或者數(shù)組)

?? ??? ?{

?? ??? ?}

? ? ? ? (3)局限性:

?? ??? ?必須要有遍歷的目標(biāo)

?? ??? ?對集合或者數(shù)組進(jìn)行遍歷時杭抠,只能獲取集合元素脸甘,不能對集合元素進(jìn)行操作

?? ??? ?迭代器除了遍歷,還可以進(jìn)行remove操作集合中的元素

?? ??? ?列表迭代器還可以在遍歷過程中進(jìn)行增刪改查的操作

?? ?(4)傳統(tǒng)for循環(huán)和高級for循環(huán)的區(qū)別

?? ??? ?高級for循環(huán)有一個局限性偏灿,就是必須要有遍歷的目標(biāo)(集合或者數(shù)組)

?? ??? ?遍歷數(shù)組時建議使用傳統(tǒng)for循環(huán)丹诀,因為可以定義角標(biāo),比如打印100次helloworld時用傳統(tǒng)for循環(huán)方便

15.可變參數(shù)

?? ?(1)數(shù)組的可變參數(shù)

?? ??? ?格式:

?? ??? ??? ?int... arr

?? ?(3)方法的可變參數(shù)

?? ??? ?格式:

?? ??? ??? ?public static void show(String str翁垂,int... arr)

?? ??? ??? ?{

?? ??? ??? ?}

?? ??? ?注意:可變參數(shù)一定要放在參數(shù)列表的最后面

16.靜態(tài)導(dǎo)入:

?? ?**import static java.util.Arrays.* ?導(dǎo)入的是Arrays這個類中所有的靜態(tài)方法

?? ?**當(dāng)類名重名時铆遭,需要制定具體的報名

?? ?**當(dāng)方法重名時,需要制定具體所屬的對象或者類

17.Collections類:

?? ?(1)此類完全由在 collection 上進(jìn)行操作或返回 collection 的靜態(tài)方法組成沿猜。

?? ?(2)靜態(tài)方法摘要:

?? ??? ?static <T> boolean addAll(Collection<? super T> c, T... elements) 將所有指定元素添加到指定 collection 中枚荣。

?? ??? ?static <T> void fill(List<? super T> list, T obj) 使用指定元素替換指定列表中的所有元素。

?? ??? ?static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) 使用另一個值替換列表中出現(xiàn)的所有某一指定值邢疙。?

?? ??? ?static void reverse(List<?> list) 反轉(zhuǎn)指定列表中元素的順序棍弄。?

?? ??? ?static <T> Comparator<T> ?reverseOrder()? 返回一個比較器,它強行逆轉(zhuǎn)實現(xiàn)了 Comparable 接口的對象 collection 的自然順序

?? ??? ?static <T> Comparator<T> reverseOrder(Comparator<T> cmp) 返回一個比較器疟游,它強行逆轉(zhuǎn)指定比較器的順序。?

?? ?(3)Collections類特牛的方法:

?? ??? ?集合有一個共同的缺點痕支,那就是線程不安全颁虐,被多線程操作時,容易出現(xiàn)問題卧须,雖然可以自己加鎖

?? ??? ?但是麻煩另绩。Collections提供特牛的方法,就是給它一個不同步的集合花嘶,它返回一個同步的安全的集合

?? ??? ?static <T> Collection<T> synchronizedCollection(Collection<T> c) 返回指定 collection 支持的同步(線程安全的)collection笋籽。?

?? ??? ?static <T> List<T> ?synchronizedList(List<T> list) 返回指定列表支持的同步(線程安全的)列表。?

?? ??? ?static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) 返回由指定映射支持的同步(線程安全的)映射椭员。?

?? ??? ?static <T> Set<T> synchronizedSet(Set<T> s) 返回指定 set 支持的同步(線程安全的)set车海。?

?? ??? ?static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)返回指定有序映射支持的同步(線程安全的)有序映射。?

?? ??? ?static <T> SortedSet<T> ?synchronizedSortedSet(SortedSet<T> s)返回指定有序 set 支持的同步(線程安全的)有序 set隘击。?

18.Arrays類:

?? ?此類包含用來操作數(shù)組(比如排序和搜索)的各種方法侍芝。里面都是靜態(tài)方法。

?? ?如果指定數(shù)組引用為 null埋同,則此類中的方法都會拋出 NullPointerException州叠。

?? ?(1)靜態(tài)方法摘要:

?? ??? ?static <T> List<T> asList(T... a)

?? ??? ??? ?返回一個受指定數(shù)組支持的固定大小的列表。

?? ??? ?注意:

?? ??? ??? ?A:該方法將一個數(shù)組變成集合后凶赁,不可以使用集合的增刪方法咧栗,因為數(shù)組的長度是固定的逆甜!如果增刪,則發(fā)生UnsupportedOprationException(不支持操作異常)

?? ??? ??? ?B:如果數(shù)組中的元素都是基本數(shù)據(jù)類型致板,則該數(shù)組變成集合時忆绰,會將該數(shù)組作為集合的一個元素出入集合

?? ??? ??? ?C:如果數(shù)組中的元素都是對象,如String可岂,那么數(shù)組變成集合后错敢,數(shù)組中的元素就直接轉(zhuǎn)成集合中的元素

19、數(shù)組變集合以及集合變數(shù)組的對比:

?? ?(1)數(shù)組變集合:

?? ??? ?方法:static <T> List<T> asList(T... a) 返回一個受指定數(shù)組支持的固定大小的列表。

?? ??? ?好處:可以使用集合的思想和方法操作數(shù)組中的元素嫁佳,數(shù)組是一個對象香府,但是數(shù)組中的功能很少

?? ?(2)集合變數(shù)組:

?? ??? ?方法:Collction中的toArray方法

?? ??? ?好處:可以限定對集合元素的操作,防止對集合的元素進(jìn)行增刪亚享,因為數(shù)組長度是固定的。

20.Collections類和Arrays類的使用绘面。(重點)

?? ?A:Collections

?? ??? ?排序

?? ??? ?二分查找

?? ??? ?發(fā)轉(zhuǎn)

?? ?B:Arrays

?? ??? ?把數(shù)組變成字符串輸出

?? ??? ?排序

?? ??? ?二分查找

21.System:

?? ?(1)描述系統(tǒng)信息的類

?? ?(2)該類沒有構(gòu)造方法欺税,該類的方法和屬性都是靜態(tài)的

?? ?(3)字段摘要:

?? ??? ?static InputStream in ?“標(biāo)準(zhǔn)”輸入流。 ??

?? ??? ?static PrintStream out ?“標(biāo)準(zhǔn)”輸出流揭璃。 ? ? ? ??

?? ?(4)方法摘要:

?? ??? ?static void exit(int status) 終止當(dāng)前正在運行的 Java 虛擬機晚凿。?

?? ??? ?static void gc() 運行垃圾回收器。

?? ??? ?static Properties getProperties() ?確定當(dāng)前的系統(tǒng)屬性 ? ? ? ? ?

?? ??? ?static String getProperty(String key) 獲取指定鍵指示的系統(tǒng)屬性瘦馍。 ? ??

?? ??? ?static String getProperty(String key, String def) 獲取用指定鍵描述的系統(tǒng)屬性歼秽。?

?? ??? ?static void setIn(InputStream in) 重新分配“標(biāo)準(zhǔn)”輸入流。 ? ? ? ? ??

?? ??? ?static void setOut(PrintStream out) 重新分配“標(biāo)準(zhǔn)”輸出流情组。?

?? ??? ?static void setProperties(Properties props) 將系統(tǒng)屬性設(shè)置為 Properties 參數(shù)燥筷。 ? ? ? ? ??

?? ??? ?static String setProperty(String key, String value) 設(shè)置指定鍵指示的系統(tǒng)屬性。

22.Runtime:

?? ?(1)每個 Java 應(yīng)用程序都有一個 Runtime 類實例院崇,使應(yīng)用程序能夠與其運行的環(huán)境相連接肆氓。

?? ? ? 可以通過 getRuntime 方法獲取當(dāng)前運行時。 應(yīng)用程序不能創(chuàng)建自己的 Runtime 類實例底瓣。

?? ?(2)該類沒有構(gòu)造函數(shù)谢揪,也就是它不能直接創(chuàng)建對象,但是它里里面的方法又不是靜態(tài)的

?? ? ? 濒持,故它一定有一個方法返回本類對象

?? ?(3)故該類是單例設(shè)計模式键耕,保證在內(nèi)存中只有一個對象

?? ?(4)方法摘要:

?? ??? ?Process exec(String command) 在單獨的進(jìn)程中執(zhí)行指定的字符串命令

?? ??? ?void gc() 運行垃圾回收器。

?? ??? ?static Runtime getRuntime() 返回與當(dāng)前 Java 應(yīng)用程序相關(guān)的運行時對象

?? ??? ?void exit(int status) 通過啟動虛擬機的關(guān)閉序列柑营,終止當(dāng)前正在運行的 Java 虛擬機

23.Date:

?? ?(1)Date接口表示特定的瞬間屈雄,精確到毫秒

?? ?(2)構(gòu)造方法

?? ??? ?Date() 分配 Date 對象并初始化此對象,以表示分配它的時間(精確到毫秒)官套。

?? ??? ?Date(long date) 分配Date對象并初始化此對象酒奶,以表示自從標(biāo)準(zhǔn)基準(zhǔn)時間(稱為“歷元(epoch)”蚁孔,

?? ??? ??? ? 即1970年1月1日00:00:00GMT)以來的指定毫秒數(shù)。

?? ?(3)方法摘要:

?? ??? ?int compareTo(Date anotherDate) 比較兩個日期的順序惋嚎。 ? ? ? ? ?

?? ??? ?boolean equals(Object obj) 比較兩個日期的相等性杠氢。

24.Calendar:

?? ?(1)直接已知子類: GregorianCalendar?

?? ?(2)構(gòu)造方法:

?? ??? ?protected ?Calendar() 構(gòu)造一個帶有默認(rèn)時區(qū)和語言環(huán)境的 Calendar。 ? ? ? ??

?? ??? ?protected ?Calendar(TimeZone zone, Locale aLocale) ?構(gòu)造一個帶有指定時區(qū)和語言環(huán)境的 Calendar另伍。 ? ? ? ??

?? ?(3)方法摘要:

?? ??? ?static Calendar getInstance() 使用默認(rèn)時區(qū)和語言環(huán)境獲得一個日歷鼻百。

25.枚舉

?? ??? ?**為什么要有枚舉?

?? ??? ??? ?問題:要定義星期幾或性別的變量摆尝,該怎么定義温艇?假設(shè)用1-7分別表示星期一到星期日,

?? ??? ??? ?但有人可能會寫成int weekday = 0;或即使使用常量方式也無法阻止意外堕汞。

?? ??? ??? ?枚舉就是要讓某個類型的變量的取值只能為若干個固定值中的一個勺爱,否則,編譯器就會報錯讯检。

?? ??? ??? ?枚舉可以讓編譯器在編譯時就可以控制源程序中填寫的非法值琐鲁,

?? ??? ??? ?普通變量的方式在開發(fā)階段無法實現(xiàn)這一目標(biāo)。

?? ??? ?**用普通類如何實現(xiàn)枚舉的功能人灼?定義一個Weekday類來模擬實現(xiàn):

?? ??? ??? ?步驟:

?? ??? ??? ??? ?*私有化構(gòu)造方法

?? ??? ??? ??? ?*每個元素分別用一個公有的靜態(tài)成員變量表示(public static final)

?? ??? ??? ??? ?*可以有若干公有方法或抽象方法围段。采用抽象方法定義nextDay就將大量的if.else語句

?? ??? ??? ??? ? 轉(zhuǎn)移成了一個個獨立的類。

?? ??? ?**枚舉的應(yīng)用:

?? ??? ??? ?舉例:定義一個Weekday的枚舉挡毅。

?? ??? ??? ?擴展:枚舉類的values,valueOf,name,toString,ordinal等方法

?? ??? ??? ? ? ? (記住蒜撮,講課時要先于自定義方法前介紹,講課更流暢)

?? ??? ??? ?總結(jié):枚舉是一種特殊的類跪呈,其中的每個元素都是該類的一個實例對象。?

?? ??? ??? ? ? ? ?例如可以調(diào)用WeekDay.SUN.getClass().getName和WeekDay.class.getName()取逾。

?? ??? ?**枚舉的高級應(yīng)用:

?? ??? ??? ?**枚舉就相當(dāng)于一個類耗绿,其中也可以定義構(gòu)造方法、成員變量砾隅、普通方法和抽象方法误阻。

?? ??? ??? ?**枚舉元素必須位于枚舉體中的最開始部分,枚舉元素列表的后要有分號與其他成員分隔晴埂。

?? ??? ??? ? ?把枚舉中的成員方法或變量等放在枚舉元素的前面究反,編譯器報告錯誤。

?? ??? ??? ?**帶構(gòu)造方法的枚舉

?? ??? ??? ? ?構(gòu)造方法必須定義成私有的

?? ??? ??? ? ?如果有多個構(gòu)造方法儒洛,該如何選擇哪個構(gòu)造方法精耐?

?? ??? ??? ? ?枚舉元素MON和MON()的效果一樣,都是調(diào)用默認(rèn)的構(gòu)造方法琅锻。

?? ??? ??? ?**帶方法的枚舉

?? ??? ??? ? ?定義枚舉TrafficLamp

?? ??? ??? ? ?實現(xiàn)普通的next方法

?? ??? ??? ? ?實現(xiàn)抽象的next方法:每個元素分別是由枚舉類的子類來生成的實例對象卦停,

?? ??? ??? ? ?這些子類采用類似內(nèi)部類的方式進(jìn)行定義向胡。增加上表示時間的構(gòu)造方法?? ? ?

?? ??? ??? ?**枚舉只有一個成員時,就可以作為一種單例的實現(xiàn)方式惊完。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末僵芹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子小槐,更是在濱河造成了極大的恐慌拇派,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凿跳,死亡現(xiàn)場離奇詭異件豌,居然都是意外死亡,警方通過查閱死者的電腦和手機拄显,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門苟径,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人躬审,你說我怎么就攤上這事棘街。” “怎么了承边?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵遭殉,是天一觀的道長。 經(jīng)常有香客問我博助,道長险污,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任富岳,我火速辦了婚禮蛔糯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窖式。我一直安慰自己蚁飒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布萝喘。 她就那樣靜靜地躺著淮逻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阁簸。 梳的紋絲不亂的頭發(fā)上爬早,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音启妹,去河邊找鬼筛严。 笑死,一個胖子當(dāng)著我的面吹牛翅溺,可吹牛的內(nèi)容都是我干的脑漫。 我是一名探鬼主播髓抑,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼优幸!你這毒婦竟也來了吨拍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤网杆,失蹤者是張志新(化名)和其女友劉穎羹饰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碳却,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡队秩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昼浦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馍资。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖关噪,靈堂內(nèi)的尸體忽然破棺而出鸟蟹,到底是詐尸還是另有隱情,我是刑警寧澤使兔,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布建钥,位于F島的核電站,受9級特大地震影響虐沥,放射性物質(zhì)發(fā)生泄漏熊经。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一欲险、第九天 我趴在偏房一處隱蔽的房頂上張望镐依。 院中可真熱鬧,春花似錦天试、人聲如沸馋吗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脚翘,卻和暖如春灼卢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背来农。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工鞋真, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沃于。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓涩咖,卻偏偏與公主長得像海诲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子檩互,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容