一窥岩、集合概述
Java是一種面向對象語言,如果我們要針對多個對象進行操作宰缤,就必須對多個對象進行存儲颂翼。而數(shù)組長度固定,不能滿足變化的要求慨灭。所以朦乏,java提供了集合。
特點
1.????????長度可以發(fā)生改變
2.????????只能存儲對象
3.????????可以存儲多種類型對象
與數(shù)組區(qū)別
數(shù)組
集合
長度
固定
可變
存儲元素
基本類型/引用類型
引用類型
元素類型的一致性
必須一致
可以不一致
集合作為一個容器呻疹,可以存儲多個元素,但是由于數(shù)據(jù)結構的不同筹陵,java提供了多種集合類刽锤。將集合類中共性的功能,不斷向上抽取朦佩,最終形成了集合體系結構并思。
數(shù)據(jù)結構:數(shù)據(jù)存儲的方式
Java中集合類的關系圖
集合體系導圖(用鼠標拖動圖片可看大圖或右擊圖片選擇在新標簽頁中打開圖片(I))
Collection是最基本的集合接口语稠,一個Collection代表一組Object宋彼,即Collection的元素(Elements)。一些Collection允許相同的元素而另一些不行仙畦。一些能排序而另一些不行输涕,于是衍生出兩個子類接口List和Set。
A:添加功能
boolean add(Object obj):向集合中添加一個元素
boolean addAll(Collection c):向集合中添加一個集合的元素议泵。
B:刪除功能
void clear():刪除集合中的所有元素占贫。
boolean remove(Object obj):從集合中刪除指定的元素
boolean removeAll(Collection c):從集合中刪除一個指定的集合元素桃熄。
C:判斷功能
boolean isEmpty():判斷集合是否為空先口。
boolean contains(Object obj):判斷集合中是否存在指定的元素型奥。
boolean containsAll(Collection c):判斷集合中是否存在指定的一個集合中的元素。
D:遍歷功能
Iterator iterator():就是用來獲取集合中每一個元素碉京。
E:長度功能
int size():獲取集合中的元素個數(shù)
F:交集功能
boolean retainAll(Collection c):判斷兩個集合中是否有相同的元素厢汹。???
G:把集合轉換成數(shù)組
Object[] toArray():把集合變成數(shù)組。
List接口下的集合元素存儲有序谐宙,可以重復烫葬。
A:添加功能
void add(int index, Object obj):在指定位置添加元素
B:刪除功能
Object remove(int index):根據(jù)指定索引刪除元素,并把刪除的元素返回凡蜻。
C:修改功能
Object set(int index, Object obj):把指定索引位置的元素修改為指定的值搭综,返回修改前的值。
D:獲取功能
int indexOf(Object o):返回指定元素在集合中第一次出現(xiàn)的索引
Object get(int index):獲取指定位置的元素
ListIterator listIterator():列表迭代器
E:截取功能
List subList(int fromIndex, int toIndex):截取集合划栓。
Set接口下的元素無序兑巾,不可以重復。其下面分為HashSet和TreeSet忠荞。
底層數(shù)據(jù)結構是哈希表蒋歌,線程不安全,效率高委煤。
保證唯一性依賴兩個方法:hashCode()和equals()堂油。
順序:
判斷hashCode()值是否相同。
相同:繼續(xù)走equals(),看返回值
如果true:就不添加到集合碧绞。
如果false:就添加到集合府框。
不同:就添加到集合。
底層數(shù)據(jù)結構是二叉樹头遭,線程不安全寓免,效率高。
保證元素唯一性的方法時根據(jù)返回值是否是0计维。
保證排序的兩種方式:
自然排序(元素具備比較性):實現(xiàn)Comparable接口
比較器排序(集合具備比較性):實現(xiàn)Comparator接口
四.迭代器的使用
1袜香、通過集合對象獲取迭代器對象。
2鲫惶、通過迭代器對象判斷蜈首。
3、通過迭代器對象獲取欠母。
由于多種集合的數(shù)據(jù)結構不同欢策,所以存儲方式不同,所以赏淌,取出方式也不同踩寇。
這個時候,我們就把判斷和獲取功能定義在了一個接口中六水,將來俺孙,遍歷哪種集合的時候辣卒,只要該集合內部實現(xiàn)這個接口即可。
[java]view plaincopy
publicinterfaceIterator
{
publicabstractbooleanhasNext();
publicabstractObject?next();
}
publicinterfaceCollection
{
publicabstractIterator?iterator();
}
publicinterfaceListextendsCollection
{
...
}
publicclassArrayListimplementsList
{
publicIterator?iterator()
{
returnnew?Itr();
}
privateclassItrimplementsIterator
{
publicboolean?hasNext(){...}
publicObject?next(){...}
}
}
[java]view plaincopy
Collection?c?=newArrayList();
c.add("hello");
c.add("world");
c.add("java");
Iterator?it?=?c.iterator();
while(it.hasNext())
{
String?s?=?(String)it.next();
System.out.println(s);
}
[java]view plaincopy
Collection?c=newArrayList();
Student?s1=newStudent("林青霞",26);
c.add("s1");
Iterator?it=c.iterator();
while(it.hasNext())
{
String?s=(String)it.next();
System.out.println(s);
}
所以List的遍歷方式共有三種
1、Iterator迭代器
2场靴、ListIterator迭代器
3啡莉、普通for+get()
map是一個鍵值對形式的集合。它的元素都是有鍵和值組成旨剥。Map的鍵(key)是唯一的,值(value)可以重復咧欣。
A:添加功能
V put(K key ,V value) :當key在集合中不存在是,添加元素;當key存在時替換元素
B:判斷功能
boolean containsKey (Object key) :判斷指定的鍵是否在集合中存在
Boolean containsValue(Object value):判斷指定的值是否在集合中存在
Boolean isEmpty() :判斷集合是否為空
C:刪除功能
Void clear():清除所有鍵值對數(shù)據(jù)
D:獲取功能
Object get (Object key) :根據(jù)鍵獲取值
Set keyset(): 所有鍵的集合
Collectionvalues() :所有值的集合
E:長度功能
Int size()
Map包括HashMap、HashTable和TreeMap轨帜。其中该押,HashTable已基本被HashMap取代,這里不做討論阵谚。
(注:HashMap支持null , HashTable不支持null )
Map遍歷的兩種方式:(導圖上面已有蚕礼,這里直接上代碼了)
[java]view plaincopy
publicstaticvoidmain(String[]?args)?{
Map?map?=newHashMap();
map.put("二陽",23);
map.put("二崢",24);
map.put("二光",25);
Set?keys=map.keySet();//把鍵其中起來,存入到set集合中.
for(String?key:keys){//遍歷鍵集合,獲取每一個鍵梢什。增強for
Integer?value=map.get(key);//讓鍵去找值?get(Object?key)
System.out.println(key+"***"+value);
}
}
[java]view plaincopy
publicstaticvoidmain(String[]?args)?{
Map?map?=newHashMap();
map.put("二陽",23);
map.put("二崢",24);
map.put("二光",25);
Set>?set=map.entrySet();//獲取鍵值對集合奠蹬。Set<>?entrySet()
for(Map.Entry?me:set){//遍歷鍵值對集合,獲取到每一個鍵值對嗡午。增強for囤躁,迭代器
String?key=me.getKey();//通過鍵值對獲取鍵getKey()
Integer?value=me.getValue();//通過鍵值對獲取值getValue()
System.out.println(key+"***"+value);
}
}