黑馬程式設計師—13—java基礎:有關集合類的學習筆記和心得體會
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">java培訓</a>、期待與您交流! ----------
1. 為什麼出現集合類?
面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,就對物件進行儲存,集合就是儲存物件最常用的一種方式。
2. 陣列和集合類同是容器,有何不同?
陣列雖然也可以儲存物件,但長度是固定的,集合長度是可變的,陣列中可以儲存基本
3. 集合類的特點:
集合只用於儲存物件,集合長度是可變的,集合可以儲存不同型別的物件。
集合類求長度用:size();
什麼是迭代器?
其實就是集合的取出元素的方式。
例子:
Class A
{
Public static void main(String[] args)
{
ArrayList a1 = new ArrayList();//建立一個集合容器,使用Collection介面的子 //類,ArrayList
a1.add(“java01”);
a1.add(“java02”);
a1.add(“java03”);
a1.add(
Sop(“size:”+a1.size());//獲取集合長度
Sop(a1);//列印集合
a1.remove(“java02”);
a1.clear();//清空集合。
sop.(“java03是否存在”+a1.coontains(“java03”));
ArrayList a2 = new ArrayList();
a2.add(“java01”);
a2.add(“java02”);
a2.add(“java05”);
a2.add(“java06”);
a1.retainAll(a2);//取交集,a1中只會保留和a2中相同的元素。
}
public static void method_get()
{
ArrayList a1 = new ArrayList();
a1.add(“java01”);
a1.add(“java02”);
a1.add(“java03”);
a1.add(“java04”);
Iterator it = a1.iterator();//獲取迭代器,用於取出集合中的元素。
while(it.hasNext())//只要裡面有資料,則返回true,繼續迴圈
{
sop(it.next());
}
/*就把取出方式定義在集合的內部,這樣取出方式就可以直接訪問集合的元素,那麼取出方式就被定義成了內部類,把容器抽取共性,內部類都符合規則Iterator,取物件通過方法Iterator()*/
}
Public static void sop(Object obj)
{
System.out.println(obj);
}
}
4.4.1 Add方法的引數型別是Object,以便於接收任意型別物件。
4.2集合中儲存的都是物件的引用(地址)
5. Collection
List:元素是有序的,元素可以重複,因為該集合體繫有索引。
ArrayList:底層的資料結構使用的是陣列結構,特點:查詢速度很快,但是增刪稍慢,執行緒不同步。
LinkList:底層使用的是連結串列資料結構,特點:增刪速度很快,查詢稍慢,
Vector:底層是陣列資料結構,執行緒同步。被ArrayList替代了
Set:元素是無序的,元素不可以重複。
List:特有方法,凡是可以操作角標的方法都是該體系特有的方法。
增:add(index,element);
addAll(index,Collextion);
刪:remove(index)
改:set(index,element)
查:get(index);
subList(from,to)
ListIterator();
6. List集合特有的迭代器,ListIterator是Iterator的子介面。在迭代時,不可以通過集合對象的方法操作集合中的元素,因為會發生同步異常,所以,在迭代時,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能對元素進行判斷,取出,刪除的操作,如果想要其他的操作如新增,修改等,就需要使用其子介面,ListIterator,該介面只能通過List集合的ListIterator方法獲取。
例子:ListIterator li = a1.ListIterator();
while(li.hasNext())
{
Object obj = Li.next();
if(obj.equals(“java02”))
{
li.add(“java02”);
li.set(“java006”);
}
}
例hasNext()判斷後面有沒元素
hasPrevious()判斷前面有沒元素
7. 列舉就是Vector特有的取出方式,發現列舉和迭代很像,其實列舉和迭代是一樣的,因為列舉的名稱以及方法的名稱都過長,所以被迭代器取代了。
8. LinkedList:特有方法:
addFirst();
addLast();
getFirst();
getLast();//獲取元素,但不刪除
removeFirst();//獲取元素,但刪除
removeLast();//如果元素為空,會出現空元素異常
在jdk1.6出現了替代方法。
offerFirst()
offerLast()
peekFirst()
peekLast()
pollfirst()
pollLast()//同上功能一樣但是如果空時返回null
9. Set集合的功能和Collection是一致的
HashSet:底層資料結構是雜湊表
HashSet是如何保證元素唯一行的呢?
是通過袁術的兩個方法,hashCode和equals來完成。如果元素的HashCode值相同,才會判斷equals是否true,如果元素的hashCode值不同,不會呼叫equals。
注意:對於判斷元素是否存在,以及刪除等操作,依賴的方法是元素的hashCode和equals方法
TreeSer:
10. 學習心得和體會
掌握集合類的用法以及什麼時候和什麼地方用集合類;
陣列和集合類同是容器,他們的區別
陣列雖然也可以儲存物件,但長度是固定的,集合長度是可變的,陣列中可以儲存基本資料型別,集合只能儲存物件。
熟悉陣列和集合類用法上的不同,把它們熟練的應用到我的程式碼之中。