java集合框架迭代器_黑馬程序員-java集合框架--list和迭代器

-----------android培訓、java培訓、java學習型技術博客、期待與您交流!------------

集合類

一數組和集合類容器,有何不同?

數組雖然可以存儲對象,但長度固定的,集合長度是可變的,

數組可以存儲基本數據類型,集合只能存儲對象。

二集合框架的構成:

1a13de6aabd8d7854b407934b7f5b189.jpe

為什么會出現這么多的容器?

因為每一個容器對暑促的存儲方式不同。

這個存儲方式稱之為:數據結構。

三集合類特點:

集合只能存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。

四什么是迭代器:

其實就是結合取出元素的方式

就是取出方式定義在集合內部

這樣取出方式就可以直接訪問集合內容的元素

那么取出的方式就定義成了內部類,二每一個容器的數據結構不同,所以取出的動作細節也不一樣,但是都有共性內容和判斷和取出,那么可以將共性抽取,

那么這些內部類都符合一個規則。該規則就是Iterator,如何獲取集合的取出對象呢?通過一個對外提供的方法。iterator();

Collection

|--List::  元素是有序的元素是可以重復的,因為該集合體系有索引。

|--Arraylist:底層的數據結構使用的是數組結構,特點查詢元素很快,但是增刪很慢

|--Linkllist: 底層使用的鏈表結構數據。特點:增刪速度很快,查詢稍慢。

|---Vector  :地城數組結構。線程同步。被ArrayList替代了.

|--Set: 元素是無序,元素不可以重復

|--HashSet:底層數據結構式哈希表

HashSet是如何保證元素唯一性的呢?

是通過元素的兩個方法.HashCode和equals 是否為true。

如果元素的HashCode的值相同,才會判斷equals是否為true。

如果元素的HashCode的值不同,不會調用equals。

注意,對於判斷元素是否存在,以及刪除操作(判斷唯一性)依賴的是元素的 HashCode和equals方法

|--TreeSet

List 特有方法,凡是可以用角標方法都是該體系特有的方法

增  Add(index,element); addAll(index,Collection);

刪  remove(index);

改  set(index)

查  get(index) ; subList(form,to);ListIterator ();

ListIterator

List 集合特有的迭代器。ListIterator 是Iterator的子接口

在迭代式中,不可以通過集合對象的方法操作集合的元素。因為會發生ConcurrentModificationException 異常

所以在迭代時,只能用迭代器的方法操作元素,可是Iterator方法方法是有限的

只能對元素進行判斷,取出,刪除的操作。

如果想要其他的操作如添加,修改等,就需要使用起接口,ListIterator。

該接口只能通過List的Iterator方法獲取

枚舉

枚舉就是Vector特有的取出方式,可以發現枚舉和迭代器很想。其實枚舉和迭代時一樣的。因為枚舉的名稱和以及方法的名稱都過長所以被迭代器取代了

Vector myvector=new Vector();

for(Enumeration e=myvector.elements();e.hasMoreElements();){

System.out.println(e.nextElement());

Arraylist

1 add方法的參數類型是Object,以便與接收任意類型對象。

2 集合中存儲的都是對象的引用(地址)

LinkList: 特有方法

addFirst();

addLast();

getFirst();

getLast();

獲取元素,但不刪除元素,如果集合中沒有元素,會出現NoSuckElementException

removeFirst();

removeLast();

獲取元素,但不刪除元素。如果集合中沒有元素,會出現NoSuchElementException

/*

使用LinkedList模擬一個堆棧或者隊列數據結構。

堆棧:先進后出 如同一個杯子。

隊列:先進先出 First in First out FIFO 如同一個水管。

*/

public class Tmp{

public static void main(String[] args)

{

LinkedList l=new LinkedList();

l.addFirst("java01");

l.addFirst("java02");

l.addFirst("java03");

l.addFirst("java04");

l.addFirst("java05");

//堆棧輸出

//stack(l);

//隊列輸出

queue(l);

}

//堆棧

public static void stack(LinkedList l){

while (!l.isEmpty()){

System.out.println(l.removeFirst());

}

}

//隊列

public static void queue(LinkedList l){

while(!l.isEmpty()){

System.out.println(l.removeLast());

}

}

}

在JDK1.6出現了地帶方法

offerFirst()

offerLast()

peekFirst();

peekLast();

獲取元素,但是元素被刪除,如果集合中沒有元素會返回null

poolFirst();

poolLast();

獲取元素,但是元素被刪除,如果集合中沒有元素會返回null

List結合判斷元素是否相同依據是元素的equals方法

set集合的功能和Collection一致的

for(Iterator it = a.iterator();it.hasNext();){//迭代器推薦方式

}

理解一:

不同對象的hashCode不同,但是有些類可能復寫了hashCode代碼,HashSet保證不能有相同的元素,所以每次add一個元素的時候,就會自動調用hashCode和equals方法(如果hashCode不同的則不調用)

理解二:

根據equals(Objectobj)來判斷兩個對象是否相等(並不會調用),如果相等則返回相同的HashCode值。

String 類的equals被復寫了所以只要字符串相等就會返回相同HashCode值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值