Java基礎(chǔ)總結(jié)大全(三)

四晓猛、集合框架

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

(1)多個字符組成的一個序列链快,叫字符串翩伪。
生活中很多數(shù)據(jù)的描述都采用的是字符串的微猖。而且我們還會對其進行操作。
所以缘屹,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");
Strign 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)處的索引,從指定的索引處開始進行反向搜索卷要。
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是小寫@砂省L饭!!)
返回一個新字符串宛蚓,它是此字符串的一個子字符串,包含頭不包含尾激捏。
C:轉(zhuǎn)換
***** byte[] getBytes():(很常用!)從字符串到字節(jié)數(shù)組的方法
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
將字符從此字符串復(fù)制到目標字符數(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)換成大寫
*** 字符串的連接
String concat(String str):將指定字符串連接到此字符串的結(jié)尾。
D:替換
String replace(char oldChar, char newChar):用新字符替換舊字符(替換所有)
String replace(String target, String replacement):用新的子串換舊串
E:分割
String[] split(String regex):根據(jù)指定的字符串把一個字符串分割成一個字符串數(shù)組
F:
String trim():去除字符串的前后空格
G:
int compareTo(String anotherString)
按字典順序比較兩個字符串任连。
int compareToIgnoreCase(String str)
按字典順序比較兩個字符串蚤吹,不考慮大小寫。
(5)練習(xí)
1:模擬登錄,給三次機會,并提示還有幾次.
默認的用戶名和密碼為admin随抠。 區(qū)分大小寫裁着。
自己從鍵盤輸入用戶名和密碼。

2:給定一個字符串統(tǒng)計,統(tǒng)計大寫字母,小寫字母,數(shù)字出現(xiàn)的個數(shù).
***注意:不包括特殊字符
從鍵盤輸入一個不包含特殊字符的字符串(只有26個字母和0-9組成)暮刃。

3:給定一個字符串,把它變成首字母大寫,其他字母小寫的字符串.
從鍵盤輸入一個字符串跨算,全部26個字母組成的。

4:子串在整串中出現(xiàn)的次數(shù)椭懊。
也就是說:獲取一個字符串中,指定的字串在該字符串中出現(xiàn)的次數(shù).
例如:
"nbasdnbafllgnbahjnbakqqqqlnba" 在這個字符串中,多有個nba.

5:對字符串中字符進行自然順序排序步势。
"basckd"-->"abcdks"

先留做思考內(nèi)容:
6:兩個字符串的最大相同子串氧猬。
兩個字符串的最大相同子串。
比如:
"sadabcdfghjkl"
werabcdtyu"

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:用于和字符串進行相互轉(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();
以二進制(基數(shù) 2)無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式。
Integer.toOctalString();
以八進制(基數(shù) 8)無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式譬胎。
Integer.toHexString();
以十六進制(基數(shù) 16)無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式差牛。
static int Integer.parseInt(String s) 將字符串參數(shù)作為有符號的十進制整數(shù)進行解析,
字符串必須是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ù)進行
解析時從指定的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();
6、集合框架:

(1)為什么出現(xiàn)集合類苟翻?
面向?qū)ο髮κ挛锏捏w現(xiàn)都是以對象的形式韵卤,為了方便對多個對象的操作,就對對象進行存儲崇猫。
集合就是存儲對象最常用的一種方式.
(2)數(shù)組和集合都是容器沈条,兩者有何不同?
**數(shù)組長度固定诅炉,而集合長度是可變的
**數(shù)組值可以存儲對象蜡歹,還可以存儲基本數(shù)據(jù)類型;而集合只能存儲對象
**數(shù)組存儲數(shù)據(jù)類型是固定的屋厘,而集合存儲的數(shù)據(jù)類型不固定
(3)集合類的特點:
集合只能存儲對象
集合的長度是可變的
集合可以存儲不同類型的對象
(4)集合類框架(重要!T露汗洒!要分清幾種容器間的區(qū)別):
**Collection:頂層接口
|--->List:列表,元素是有序的(元素帶角標索引)景鼠,可以有重復(fù)元素,可以有null元素仲翎。
|--->ArrayList(JDK1.2):底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組數(shù)據(jù)結(jié)構(gòu),特點是查詢速度快(因為帶角標)铛漓,
但是增刪速度稍慢,因為當元素多時溯香,增刪一個元素則所有元素的角標都得改變
線程不同步。默認長度是10浓恶,當超過長度時玫坛,按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).特點是查詢和增刪速度都很慢树肃。
默認長度是10蒸矛,當超過長度時,按100%延長集合長度。
線程同步胸嘴。
(Vector功能跟ArrayList功能一模一樣雏掠,已被ArrayList替代)

**List使用注意!
|--->ArrayList:
(1)當往ArrayList里面存入元素沒什么要求時劣像,即只要求有序就行時乡话;

(2)當往ArrayList里面存入元素要求不重復(fù)時,比如存入學(xué)生對象耳奕,當同名同姓時
視為同一個人绑青,則不往里面存儲。則定義學(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ù):compareTo方法return 0
TreeSet排序的第一種方式:讓元素自身具備比較性挺物,比如八種基本數(shù)據(jù)類型或則字符串,
實現(xiàn)Compareble接口,覆蓋compareTo方法飘弧,
此方式是元素的自然順序
TreeSet排序的第一種方式:當元素自身不具備比較性(比如存儲學(xué)生對象時)或者具備的
比較性不是我們所需要的比較性時(比如想字符串的長度排序),
此時就需要讓集合自身具備自定義的比較性识藤。
那如何讓集合自身具備比較性呢?可在集合初始化時次伶,
就讓集合具備比較方式痴昧。即定義一個類,
實現(xiàn)Comparator接口学少,覆蓋compare方法剪个。

**Set集合使用注意事項:
(1)HashSet:
通過new的方式往HashSet里面存的元素的hashCode都不同,但通常我們定義對象版确,
比如學(xué)生對象時扣囊,雖然是new的兩個學(xué)生對象,但是當他們name和age一樣時绒疗,我們認為是
同一個對象侵歇,所以為了保證元素的唯一性,我們通常在往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排序的第一種方式:讓集合具備比較性
當元素自身不具備比較性(比如存儲學(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集合中的鍵進行排序.
TreeMap排序的第一種方式:讓元素自身具備比較性汁蝶,比如八種基本數(shù)據(jù)類型或則字符串渐扮,
實現(xiàn)Compareble接口,覆蓋compareTo方法,
此方式是元素的自然順序
TreeMap排序的第一種方式:當元素自身不具備比較性(比如存儲學(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進行迭代的迭代器.迭代器取代了Enumeration齐饮。
迭代器和枚舉的區(qū)別:
迭代器允許調(diào)用者利用定義良好的語義在迭代期間從迭代器所指向的collection移除元素
方法名稱得到了改進,簡化書寫
**LisIterator:系列表迭代器笤昨,允許程序員按任一方向遍歷列表祖驱、迭代期間修改列表
**Comparable:此接口強行對實現(xiàn)它的每個類的對象進行整體自然排序。使元素具備比較性
**Comparator:強行對某個對象collection進行整體排序的比較函數(shù)瞒窒,使集合具備比較性
**Collections:此類完全由在 collection 上進行操作或返回 collection 的靜態(tài)方法組成捺僻。
**Arrays:此類包含用來操作數(shù)組(比如排序和搜索)的各種靜態(tài)方法

7、集合類各容器方法:
**接口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接口中的元素有如下特點(對角標的操作都是特有方法,因為有序):
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(): 返回按適當順序在列表的元素上進行迭代的迭代器。
ListIterator<E> listIterator(int index):返回列表中元素的列表迭代器(按適當順序),從列表的指定位置開始答捕。
|--->修改:(特有方法J旁俊!)
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凯砍,其標準容量增量為零。
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 實例的默認初始容量是 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 中元素進行迭代的迭代器。
boolean remove(Object o) 如果指定元素存在于此 set 中,則將其移除端铛。
int size() 返回此 set 中的元素的數(shù)量(set 的容量)泣矛。
(2)TreeSet:使用元素的自然順序?qū)υ剡M行排序,或者根據(jù)創(chuàng)建 set 時提供的 Comparator 進行排序.
|--->構(gòu)造方法:
TreeSet() 構(gòu)造一個新的空 set禾蚕,該set根據(jù)其元素的自然順序進行排序您朽。
TreeSet(Collection<? extends E> c)
構(gòu)造一個包含指定 collection 元素的新 TreeSet,它按照其元素的自然順序進行排序换淆。
TreeSet(Comparator<? super E> comparator) 構(gòu)造一個新的空 TreeSet哗总,它根據(jù)指定比較器進行排序。
|--->方法摘要:
添加:
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 中的元素上按升序進行迭代的迭代器。
E first() 返回此 set 中當前第一個(最低)元素逸雹。
E last() 返回此 set 中當前最后一個(最高)元素营搅。
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)的值(特有S谟巍!垫言!)贰剥。
8、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)迭代器的作用
因為每個集合中元素的取出方式都不一樣剪撬,于是就把元素的取出方式進行抽取摄乒,并定義在集合內(nèi)部,
這樣取出方式就可以直接訪問集合內(nèi)部的元素残黑;
而每個容器的數(shù)據(jù)結(jié)構(gòu)不同馍佑,所以取出動作的細節(jié)也不一樣,但是有共性內(nèi)容:判斷和取出梨水。
那么就將共性內(nèi)容進行抽取拭荤,從而形成了接口Iterater
(3)獲取迭代器的方法:
Iterator<E> iterator() 返回在此 collection 的元素上進行迭代的迭代器。
Iterator<E> iterator() 返回在此 set 中的元素上進行迭代的迭代器疫诽。
(3)迭代器方法:
boolean hasNext() 如果仍有元素可以迭代,則返回 true舅世。
E next() 返回迭代的下一個元素。
void remove() 從迭代器指向的collection中移除迭代器返回的最后一個元素(可選操作)奇徒。

9雏亚、列表迭代器:ListIterator

(1)List集合特有的迭代器ListIterator是Iterator的子接口,在迭代時摩钙,不可以通過集合對象的
方法操作集合中的元素罢低,因為會發(fā)生ConcurrentModificationException(當方法檢測到對象的并發(fā)修改,
但不允許這種修改時胖笛,拋出此異常)
(2)Iterator方法有限网持,只能對元素進行判斷、取出和刪除的操作
ListIterator可以對元素進行添加和修改動作等长踊。
(3)獲取列表迭代器方法:
ListIterator<E> listIterator() 返回此列表元素的列表迭代器(按適當順序)功舀。
ListIterator<E> listIterator(int index)
返回此列表中的元素的列表迭代器(按適當順序),從列表中指定位置開始身弊。
(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麦萤、堆棧和隊列

堆棧:先進后出鹿鳖,比如杯子里的水
隊列:先進先出扁眯,比如水管的水

11、集合類各種容器的使用注意細節(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集合里面的元素因為是帶角標,所以List集合里面的元素都是有序的歼疮,
另外List集合可以包含重復(fù)元素杂抽,也可以包含null。
**List集合有迭代器Iterator韩脏,還有一個特有迭代器列表ListIterator
**List集合中判斷元素是否相同都是用equals方法缩麸,無論contains、remove都依賴equals方法
比如往ArrayList集合里面存放學(xué)生赡矢,同名同年齡視為同一個人杭朱,此時就需要在學(xué)生類復(fù)寫Object類
里面的equals方法(非常重要!4瞪ⅰ弧械!要注意!空民!)
(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方法。
**當我們往HashSet集合存放自定義的元素時(比如學(xué)生對象)碍现,通常都要復(fù)寫hashCode和equals方法幅疼,
而且hashCode和equals方法不通過我們調(diào)用,HashSet集合底層內(nèi)部自己調(diào)用昼接,自己拿元素去比較
|--->TreeSet
**TreeSet集合可以對存放的元素進行排序爽篷,彌補了Set集合元素?zé)o序的缺點,且元素是唯一的
**底層數(shù)據(jù)結(jié)構(gòu)是二叉樹慢睡,二叉樹結(jié)構(gòu)都是有序的
**線程不同步
**TreeSet集合要求往集合里存放的元素自身具備比較性逐工,否則會報錯
**TreeSet集合保證元素唯一性的依據(jù)是:通過compareTo或者compare方法中的來保證元素的唯一性铡溪。
TreeSet排序的第一種方式:讓元素自身具備比較性,
定義元素類實現(xiàn)Compareble接口泪喊,覆蓋compare方法棕硫,
此方式是元素的自然順序。
TreeSet排序的第二種方式:讓集合具備比較性
當元素自身不具備比較性或者具備的比較性不是
我們所需要的比較性時袒啼,此時就需要讓集合具備自定義的比較性哈扮。
那如何讓集合自身具備比較性呢?
可在集合初始化時蚓再,就讓集合具備比較方式滑肉。
即定義一個類,實現(xiàn)Comparator接口对途,覆蓋compare方法赦邻。
注:
**判斷元素唯一時,當主要條件一樣時实檀,判斷次要條件
**兩種排序方式都在時惶洲,以比較器為主!I庞獭恬吕!
(4)Map集合:
|--Hashtable
底層是哈希表結(jié)構(gòu)
線程安全的,并且鍵和值不能為null须床。
|--HashMap
底層是哈希表結(jié)構(gòu)
線程不安全的铐料,鍵和值可以為null。
|--LinkedHashMap
底層是鏈表和哈希表
線程不安全
|--TreeMap
底層是二叉樹
線程不安全的

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

反之則會使用____A_____;如果你想存儲一組無序但唯一的對象族阅,你會使用___B______ ;
如果你想按關(guā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)什么時候定義泛型?
泛型在集合框架中很常見蚊俺,只要見到<>就要定義泛型懈涛。其實<>就是用來接收類型的。
當使用集合時泳猬,將集合中要存儲的數(shù)據(jù)類型作為參數(shù)傳遞到<>中即可
(5)泛型的形式
**泛型類:即自定義泛型類
A:當類中要操作的引用數(shù)據(jù)類型不確定時批钠,早起定義Object來完成擴展,現(xiàn)在定義泛型來完成
B:局限性:泛型類定義的泛型得封,在整個類中有效埋心,如果該泛型類的方法被調(diào)用,
當泛型類的對象明確要操作的類型后忙上,所有要操作的類型就被固定拷呆。
**泛型方法:泛型放在返回值前面,修飾符的后面
A:為了避免泛型類的局限性疫粥,讓不同方法可以操作不同的類型茬斧,而且類型還不確定,
則可以將泛型定義在方法上
B:特殊之處:靜態(tài)方法不可以反問類上定義的泛型
如果靜態(tài)方法操作的應(yīng)用數(shù)據(jù)類型不確定梗逮,可以講泛型定義在靜態(tài)方法上
**泛型接口:
當泛型定義在接口上時项秉,則子類中要指定實現(xiàn)接口類型,同時還可以子類也可以定義為泛型類
(6)泛型的高級應(yī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)局限性:
必須要有遍歷的目標
對集合或者數(shù)組進行遍歷時绽昼,只能獲取集合元素唯鸭,不能對集合元素進行操作
迭代器除了遍歷,還可以進行remove操作集合中的元素
列表迭代器還可以在遍歷過程中進行增刪改查的操作
(4)傳統(tǒng)for循環(huán)和高級for循環(huán)的區(qū)別
高級for循環(huán)有一個局限性硅确,就是必須要有遍歷的目標(集合或者數(shù)組)
遍歷數(shù)組時建議使用傳統(tǒng)for循環(huán)目溉,因為可以定義角標明肮,比如打印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)方法
**當類名重名時,需要制定具體的報名
**當方法重名時陷猫,需要制定具體所屬的對象或者類

17秫舌、Collections類:

(1)此類完全由在 collection 上進行操作或返回 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方法
好處:可以限定對集合元素的操作,防止對集合的元素進行增刪猜揪,因為數(shù)組長度是固定的惭墓。

20、Collections類和Arrays類的使用而姐。(重點)

A:Collections
排序
二分查找
發(fā)轉(zhuǎn)
B:Arrays
把數(shù)組變成字符串輸出
排序
二分查找

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腊凶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拴念,更是在濱河造成了極大的恐慌钧萍,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件政鼠,死亡現(xiàn)場離奇詭異风瘦,居然都是意外死亡,警方通過查閱死者的電腦和手機公般,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門万搔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人官帘,你說我怎么就攤上這事瞬雹。” “怎么了刽虹?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵酗捌,是天一觀的道長。 經(jīng)常有香客問我涌哲,道長胖缤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任阀圾,我火速辦了婚禮草姻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘稍刀。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布账月。 她就那樣靜靜地躺著综膀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪局齿。 梳的紋絲不亂的頭發(fā)上剧劝,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音抓歼,去河邊找鬼讥此。 笑死,一個胖子當著我的面吹牛谣妻,可吹牛的內(nèi)容都是我干的萄喳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蹋半,長吁一口氣:“原來是場噩夢啊……” “哼他巨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起减江,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤染突,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辈灼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體份企,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年巡莹,在試婚紗的時候發(fā)現(xiàn)自己被綠了司志。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖急但,靈堂內(nèi)的尸體忽然破棺而出肄渗,到底是詐尸還是另有隱情,我是刑警寧澤吧史,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站唠雕,受9級特大地震影響贸营,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岩睁,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一钞脂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捕儒,春花似錦冰啃、人聲如沸邓夕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焚刚。三九已至,卻和暖如春扇调,著一層夾襖步出監(jiān)牢的瞬間矿咕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工狼钮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碳柱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓熬芜,卻偏偏與公主長得像莲镣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子猛蔽,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355