Map與Set

一拌屏、Set接口的特點

使用HashSet存儲字符串并遍歷

Set<String> set = new HashSet<String>()诀豁;//父接口引用指向子類對象

//添加元素對象

set.add("hello");

set.add("world");

set.add("java");

//遍歷集合對象

//Colleaction三種:轉(zhuǎn)數(shù)組倦沧、迭代器蒸辆、foreach,List有四種间聊,由于List是有序的族购,多了一種索引壳贪,Set也是三種,Set沒有索引

1.轉(zhuǎn)數(shù)組

Object[] obj = set.toArray()寝杖;
for(int i = 0;i < obj.length;i++){
? System.out.println(obj[i]);
}

2.迭代器

Iterator<String> it = set.iterator();
while(it.hasNext()){
? String s = it.next();
? System.out.println(s);
}

3. 增強(qiáng)for

for(String s : set){
? System.out.println(s);
}

4.Set集合的特點:

(1)無序(存儲和讀取的順序有可能不一樣)

(2)不允許重復(fù)(要求元素唯一)

(3)沒有索引违施,因為沒有順序

5.HashSet中add()方法不能去重的原因:

HashSet()的add()方法,首先會使用當(dāng)前集合中的每個元素和新添加的元素進(jìn)行hash值比較

如果hash值不一樣瑟幕,直接添加新的元素

如果hash值一樣磕蒲,比價地址值或者使用equals方法進(jìn)行比較

比較結(jié)果一樣,則認(rèn)為是重復(fù)不添加

送油的比較結(jié)果不一樣則添加只盹。

由于創(chuàng)建自定義對象時辣往,傳的參數(shù)是地址值,每個地址值都不同殖卑,即使對象的屬性一致站削,也會添加進(jìn)LinkedList

6.重寫hashCode()和equals()方法實現(xiàn)HashSet存儲自定義對象去重

(1)根據(jù)新添加的元素的hashCode()返回值計算出hash值

(2)先比較hash值,hash值不一樣if語句結(jié)束

(3)如果hash值一樣孵稽,則比較地址或者使用equals方法進(jìn)行比較

(4)由此可以看出先重寫hashCode()使hash值一致许起,在重寫equals()比較對象中屬性值。

二肛冶、Collections

1.面試題:Collection和Collections的區(qū)別:

(1)Collection是集合體系的最頂層街氢,包含了集合體系的共性

(2)Collections是一個工具類方法都是用于操作Collection

2.Collections的常用方法

(1)static int binarySearch(List list, Object key)//使用二分查找指定元素在指定列表的索引位置,List是有序的

List<Integer> list = new ArrayList<Integer>()睦袖;
list.add(1);//JDK1.5特性自動裝箱
list.add(2);
list.add(3);
list.add(4);
int index = Colleaction.binarySearch(list,4);

(2)static void copy(List dest, List src):把源列表的數(shù)據(jù)覆蓋到目標(biāo)列表

List<String> src = new ArrayList<String>();
src.add("hello");
src.add("world");
src.add("java");
List<String> dest = new ArrayList<String>();
dest.add("");
dest.add("");
dest.add("");
Collections.copy(dest,src);

注意:目標(biāo)列表的長度至少等于源列表的長度

(3)static void fill(List list, Object obj):使用指定對象填充指定列表的所有元素

List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
Colleactions.fill(list,"android");

(4)static void reverse(List list)

List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
Colleactions.reverse(list);

(5)static void shuffle(List list):使用指定的隨機(jī)源對指定列表進(jìn)行置換

(6)static void sort(List list):根據(jù)元素的自然順序?qū)χ付斜戆瓷蜻M(jìn)行排序。

(7)static void swap(List list, int i, int j):在指定列表的指定位置處交換元素荣刑。

三馅笙、Map接口

為了提現(xiàn)有對應(yīng)關(guān)系的數(shù)據(jù)伦乔,Java提供了一種專門用于存儲對應(yīng)關(guān)系的集合。

Map<K董习,V>:將鍵映射到值的對象烈和。一個映射不能包含重復(fù)的鍵;每個鍵最多只能映射到一個值

1.Map和Collection 的區(qū)別

Map:是一個雙列集合皿淋,常用語處理有對應(yīng)關(guān)系的數(shù)據(jù)招刹,key是不可以重復(fù)的,稱之為夫妻集合

Colleaction:是單列集合窝趣,Collection有不同的字體系疯暑,有的允許重復(fù)有索引有序,有的不允許重復(fù)且無序哑舒,稱之為單身漢集合

2.Map的常用功能:

Map<String,String> map = new HashMap<String,String>();

(1)映射功能:

V put (K key,V value)//就是將key映射到value妇拯,如果key存在,則覆蓋value洗鸵,并將原來的value返回

System.out.println(map.put("001","zhangsan"));
System.out.println(map.put("001","wangwu"));
輸出:null? zhangsan

(2)獲取功能:

V get(Object key)

Set<K> keySet()

Collection<V> values()

int size()

System.out.println(map.size());//返回對應(yīng)關(guān)系的個數(shù)
輸出結(jié)果:2
System.out.println(map.get("001"));//根據(jù)指定的key返回對應(yīng)的value
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","wangwu"));
Set<String> keys = map.keySet();
for(String key : keys){
? System.out.println(key);
}
輸出結(jié)果:001
? ? ? ? ? ? ? 002
? ? ? ? ? ? ? 003
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","lisi"));
Colleaction<String> values = map.values();
for(String value : values){
? System.out.println(value);
}
輸出結(jié)果:zhangsan
? ? ? ? ? ? ? lisi
? ? ? ? ? ? ? lisi

(3)判斷功能

boolean containsKey(Object key)

boolean containsValue(Object value)

boolean isEmpty()

System.out.println(map.containsKey("001"));
輸出結(jié)果:true
System.out.println(map.containsVaule("zhangsan"));
輸出結(jié)果:false
System.out.println(map.isEmpty());
輸出結(jié)果:false

(4)刪除功能

void clear()

v remove(Object key)

map.clear();//清空所有的對應(yīng)關(guān)系
System.out.println(map.remove("001"));//根據(jù)指定的key刪除對應(yīng)關(guān)系越锈,并返回key所對應(yīng)的值,如果沒有刪除成功返回null
輸出結(jié)果:wangwu

(4)遍歷功能:

Map的第一種遍歷方式:

先找到所有的key膘滨,遍歷所有的key甘凭,獲取每一個key,去找key對應(yīng)的value

map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","wangwu"));
Set<String> keys = map.keySet();
for(String key : keys){
? String value = map.get(key);
}

Map的第二種遍歷方式:

Set<Map.Entry<K,V>> entrySet()

Entry是Map中的內(nèi)部類

Set<Map.Entry<String,String>> entrys = map.entrySet();
for(Map.Entry<String,String> entry: entrys){
String key = entry.getKey();?
String value = entry.getValue();
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末火邓,一起剝皮案震驚了整個濱河市丹弱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贡翘,老刑警劉巖蹈矮,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸣驱,居然都是意外死亡泛鸟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門踊东,熙熙樓的掌柜王于貴愁眉苦臉地迎上來北滥,“玉大人,你說我怎么就攤上這事闸翅≡儆螅” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵坚冀,是天一觀的道長济赎。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么司训? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任构捡,我火速辦了婚禮,結(jié)果婚禮上壳猜,老公的妹妹穿的比我還像新娘勾徽。我一直安慰自己,他們只是感情好统扳,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布喘帚。 她就那樣靜靜地躺著,像睡著了一般咒钟。 火紅的嫁衣襯著肌膚如雪吹由。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天盯腌,我揣著相機(jī)與錄音溉知,去河邊找鬼。 笑死腕够,一個胖子當(dāng)著我的面吹牛级乍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帚湘,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玫荣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了大诸?” 一聲冷哼從身側(cè)響起捅厂,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎资柔,沒想到半個月后焙贷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡贿堰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年辙芍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羹与。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡故硅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纵搁,到底是詐尸還是另有隱情吃衅,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布腾誉,位于F島的核電站徘层,受9級特大地震影響峻呕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惑灵,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一山上、第九天 我趴在偏房一處隱蔽的房頂上張望眼耀。 院中可真熱鬧英支,春花似錦、人聲如沸哮伟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楞黄。三九已至池凄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鬼廓,已是汗流浹背肿仑。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留碎税,地道東北人尤慰。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像雷蹂,于是被迫代替她去往敵國和親伟端。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 四匪煌、集合框架 1:String類:字符串(重點) (1)多個字符組成的一個序列责蝠,叫字符串。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 752評論 0 2
  • 時間都去哪啦 001 綜合素質(zhì)是人與人本質(zhì)的區(qū)別 綜合素質(zhì)是你讀過的書萎庭、吃過的飯霜医、去過的地方、說過的話驳规、判斷力……...
    黃豆芽小姐姐閱讀 156評論 0 1
  • 成長本身就是一個知易行難的詞語肴敛,在這里我不想說這本書里寫了什么,學(xué)到了什么达舒。我只想回顧一下這段時候我自己成長了哪...
    落雨清音閱讀 1,916評論 1 2
  • 兩個人異地戀值朋,男生會是不是給女生買零食,買的原因各式各樣巩搏,想討女孩子歡心昨登,當(dāng)作一個禮物,不在身邊的補(bǔ)償贯底,哄生氣的女...
    孤獨旅行箱閱讀 143評論 0 0
  • 不學(xué)心理學(xué)丰辣,不知道人本身有多主觀撒强,多自戀,習(xí)慣否定笙什、不接納他人飘哨,有功了,是自己的琐凭,事情辦砸了芽隆,都是他人的錯,說話辦...
    一束茉莉閱讀 162評論 0 0