一拌屏、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();
}