一谓传、集合
(一).set集合
- Set繼承于Collection接口艳狐,是一個不允許出現(xiàn)重復(fù)元素驹闰,并且無序的集合瘪菌,主要有HashSet和TreeSet兩大實現(xiàn)類。
在判斷重復(fù)元素的時候嘹朗,Set集合會調(diào)用hashCode()和equal()方法來實現(xiàn)师妙。
HashSet是哈希表結(jié)構(gòu),主要利用HashMap的key來存儲元素屹培,計算插入元素的hashCode來獲取元素在集合中的位置默穴;
TreeSet是紅黑樹結(jié)構(gòu)怔檩,每一個元素都是樹中的一個節(jié)點,插入的元素都會進(jìn)行排序蓄诽;
2.set常用方法
與List接口一樣薛训,set接口也提供了集合操作的基本方法。但與List不同的是仑氛,Set還提供了equals(object o)和hashCode(),供其子類重寫乙埃,以實現(xiàn)對集合中插入重復(fù)元素的處理;
2.1 HashSet
HashSet實現(xiàn)Set接口调衰,底層由HashMap(后面講解)來實現(xiàn)膊爪,為哈希表結(jié)構(gòu),新增元素相當(dāng)于HashMap的key嚎莉,value默認(rèn)為一個固定的Object米酬。在我看來,HashSet相當(dāng)于一個閹割版的HashMap;
當(dāng)有元素插入的時候趋箩,會計算元素的hashCode值赃额,將元素插入到哈希表對應(yīng)的位置中來;
它繼承于AbstractSet叫确,實現(xiàn)了Set, Cloneable, Serializable接口跳芳。
(1)HashSet繼承AbstractSet類,獲得了Set接口大部分的實現(xiàn)竹勉,減少了實現(xiàn)此接口所需的工作飞盆,實際上是又繼承了AbstractCollection類;
(2)HashSet實現(xiàn)了Set接口次乓,獲取Set接口的方法吓歇,可以自定義具體實現(xiàn),也可以繼承AbstractSet類中的實現(xiàn)票腰;
(3)HashSet實現(xiàn)Cloneable城看,得到了clone()方法,可以實現(xiàn)克隆功能杏慰;
(4)HashSet實現(xiàn)Serializable测柠,表示可以被序列化,通過序列化去傳輸缘滥,典型的應(yīng)用就是hessian協(xié)議轰胁。
具有如下特點:
不允許出現(xiàn)重復(fù)因素;
允許插入Null值朝扼;
元素?zé)o序(添加順序和遍歷順序不一致)软吐;
線程不安全,若2個線程同時操作HashSet吟税,必須通過代碼實現(xiàn)同步凹耙;
(二)Map集合
1.Map集合的特點:
1.1 將鍵映射到值的對象姿现、
1.2 key和value可以是任意的引用類型的數(shù)據(jù)
1.3 一個映射不能包含重復(fù)的鍵(map集合的key值不能重復(fù))
1.4 每個鍵最多可以映射到一個值(每個鍵值對只有一個key值,一個value值)
1.5 同樣的值可以對應(yīng)多個不同的鍵(不同的鍵值對可以擁有相同的value值)
2.Map集合的功能:
2.1 添加功能: put(K key,V value)將指定的值與該映射中的指定鍵相關(guān)聯(lián)
2.2 刪除功能:
remove(Object key)如果存在肖抱,從該map集合中刪除一個鍵的映射
void clear()從該map集合中刪除所有的映射
2.3 長度功能:int size()返回此地圖中鍵值映射的數(shù)量
(三)List集合
List中主要有ArrayList备典、LinkedList兩個實現(xiàn)類;Set中則是有HashSet實現(xiàn)類意述;而Queue是在JDK1.5后才出現(xiàn)的新集合提佣,主要以數(shù)組和鏈表兩種形式存在。
在Collection中荤崇,List集合是有序的拌屏,Developer可對其中每個元素的插入位置進(jìn)行精確地控制,可以通過索引來訪問元素术荤,遍歷元素倚喂。
在List集合中,我們常用到ArrayList和LinkedList這兩個類瓣戚。其中端圈,ArrayList底層通過數(shù)組實現(xiàn),隨著元素的增加而動態(tài)擴容子库。而LinkedList底層通過鏈表來實現(xiàn)舱权,隨著元素的增加不斷向鏈表的后端增加節(jié)點。ArrayList是Java集合框架中使用最多的一個類仑嗅,是一個數(shù)組隊列宴倍,線程不安全集合。它繼承于AbstractList仓技,實現(xiàn)List,RandomAccess, Cloneable, Serializable接口鸵贬。
(1)ArrayList實現(xiàn)List,得到了List集合框架基礎(chǔ)功能浑彰;
(2)ArrayList實現(xiàn)RandomAccess恭理,獲得了快速隨機訪問存儲元素的功能拯辙,RandomAccess是一個標(biāo)記接口郭变,沒有任何方法;
(3)ArrayList實現(xiàn)Cloneable涯保,得到了clone()方法诉濒,可以實現(xiàn)克隆功能;
(4)ArrayList實現(xiàn)Serializable夕春,表示可以被序列化未荒,通過序列化去傳輸,典型的應(yīng)用就是hessian協(xié)議及志。
- 它具有如下特點:
4.1 容量不固定片排,隨著容量的增加而動態(tài)擴容(閾值基本不會達(dá)到)
4.2 有序集合(插入的順序==輸出的順序)
4.3 插入的元素可以為null
4.4 增刪改查效率更高(相對于LinkedList來說)
4.5 線程不安全
二寨腔、常用類
(一)Object
- Java Object 類是所有類的父類,也就是說 Java 的所有類都繼承了 Object率寡,子類可以使用 Object 的所有方法迫卢,Object 類位于 java.lang 包中,編譯時會自動導(dǎo)入冶共,我們創(chuàng)建一個類時乾蛤,如果沒有明確繼承一個父類,那么它就會自動繼承 Object捅僵,成為 Object 的子類家卖。
2.Object常用方法
1 protected Object clone():創(chuàng)建并返回一個對象的拷貝
2 boolean equals(Object obj):比較兩個對象是否相等
3 protected void finalize():當(dāng) GC (垃圾回收器)確定不存在對該對象的有更多引用時,由對象的垃圾回收器調(diào)用此方法庙楚。
4 Class<?>getClass():獲取對象的運行時對象的類
5 int hashCode():獲取對象的 hash 值
6 String toString():返回對象的字符串表示形式
(二) String
字符串廣泛應(yīng)用 在 Java 編程中上荡,在 Java 中字符串屬于對象,Java 提供了 String 類來創(chuàng)建和操作字符串醋奠。
String常用方法
2.1 char charAt(int index):返回指定索引處的 char 值榛臼。
2.2 int compareTo(Object o):把這個字符串和另一個對象比較。
2.3 String concat(String str):將指定字符串連接到此字符串的結(jié)尾窜司。
2.4 boolean equals(Object anObject):將此字符串與指定的對象比較沛善。
2.5 int indexOf(String str):返回指定子字符串在此字符串中第一次出現(xiàn)處的索引。
(三) StringBuilder
StringBuilder是一個可變的字符串類塞祈,我們可以把它看成是一個容器金刁,這里的可變指的是StringBuilder對象中的內(nèi)容是可變的
StringBuilder常用方法
2.1 public StringBuilder append():添加數(shù)據(jù),返回對象本身
2.2 public StringBuilder reverse():返回相反的字符序列
2.3 public int length():返回長度
2.4 public String toString():把StringBuilder轉(zhuǎn)換為String類型
(四)StringBuffeer
StringBuffer 類可以比 String 類更高效地處理字符串议薪。
StringBuffer常用方法
2.1 public StringBuffer append(String s):將指定的字符串追加到此字符序列尤蛮。
2.2 public StringBuffer reverse():將此字符序列用其反轉(zhuǎn)形式取代。
2.3 public delete(int start, int end):移除此序列的子字符串中的字符斯议。
2.4 public insert(int offset, int i):將 int 參數(shù)的字符串表示形式插入此序列中产捞。
2.5 insert(int offset, String str):將 str 參數(shù)的字符串插入此序列中。
2.6 replace(int start, int end, String str):使用給定 String 中的字符替換此序列的子字符串中的字符哼御。
(五) System
System 類位于 java.lang 包坯临,代表當(dāng)前 Java程序的運行平臺,系統(tǒng)級的很多屬性和控制方法都放置在該類的內(nèi)部恋昼。由于該類的構(gòu)造方法是 private 的看靠,所以無法創(chuàng)建該類的對象,也就是無法實例化該類液肌。System 類提供了一些類變量和類方法挟炬,允許直接通過 System 類來調(diào)用這些類變量和類方法。
System常用方法
2.1 currentTimeMillis() 方法:該方法的作用是返回當(dāng)前的計算機時間,時間的格式為當(dāng)前計算機時間與 GMT 時間(格林尼治時間)1970 年 1 月 1 日 0 時 0 分 0 秒所差的毫秒數(shù)谤祖。一般用它來測試程序的執(zhí)行時間婿滓。
2.2 getProperty() 方法:該方法的作用是獲得系統(tǒng)中屬性名為 key 的屬性對應(yīng)的值。
2.3 arraycopy() 方法:該方法的作用是數(shù)組復(fù)制粥喜,即從指定源數(shù)組中復(fù)制一個數(shù)組空幻,復(fù)制從指定的位置開始,到目標(biāo)數(shù)組的指定位置結(jié)束容客。代碼示例:
public class System_arrayCopy {
public static void main(String[] args) {
char[] srcArray = {'A','B','C','D'};
char[] destArray = {'E','F','G','H'};
System.arraycopy(srcArray,1,destArray,1,2);
System.out.println("源數(shù)組:");
for(int i = 0;i < srcArray.length;i++) {
System.out.println(srcArray[i]);
}
System.out.println("目標(biāo)數(shù)組:");
for(int j = 0;j < destArray.length;j++) {
System.out.println(destArray[j]);
}
}
}
源數(shù)組:
A
B
C
D
目標(biāo)數(shù)組:
E
B
C
H
(六)Data
java.util.Data類秕铛,表示特定的瞬間。精確到毫秒缩挑。
Date常用方法
2.1 public String format(Data data):將Data對象格式化為字符串但两。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
把Date對象轉(zhuǎn)換成String
*/
public class Demo03DateFormatMethod {
public static void main(String[] args) {
Date date = new Date();
// 創(chuàng)建日期格式化對象,在獲取格式化對象時可以指定風(fēng)格
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = df.format(date);
System.out.println(str); // 2022年6月29日
}
}
2.2 public Data parse(String source):將字符串解析為Data對象。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
把String轉(zhuǎn)換成Date對象
*/
public class Demo04DateFormatMethod {
public static void main(String[] args) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = "2022年6月29日";
Date date = df.parse(str);
System.out.println(date);
}
}