www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]本文主要關(guān)注Java編程中涉及到的各種集合類,以及它們的使用場(chǎng)景?1. Java集合類基本概念在編程中,常常需要集中存放多個(gè)數(shù)據(jù)。從傳統(tǒng)意義上講,數(shù)組是我們的一個(gè)很好的選擇,前提是我們事先已經(jīng)明確知道

本文主要關(guān)注Java編程中涉及到的各種集合類,以及它們的使用場(chǎng)景?

1. Java集合類基本概念

在編程中,常常需要集中存放多個(gè)數(shù)據(jù)。從傳統(tǒng)意義上講,數(shù)組是我們的一個(gè)很好的選擇,前提是我們事先已經(jīng)明確知道我們將要保存的對(duì)象的數(shù)量。一旦在數(shù)組初始化時(shí)指定了這個(gè)數(shù)組長(zhǎng)度,這個(gè)數(shù)組長(zhǎng)度就是不可變的,如果我們需要保存一個(gè)可以動(dòng)態(tài)增長(zhǎng)的數(shù)據(jù)(在編譯時(shí)無(wú)法確定具體的數(shù)量),java的集合類就是一個(gè)很好的設(shè)計(jì)方案了。

集合類主要負(fù)責(zé)保存、盛裝其他數(shù)據(jù),因此集合類也被稱為容器類。所以的集合類都位于java.util包下,后來(lái)為了處理多線程環(huán)境下的并發(fā)安全問(wèn)題,java5還在java.util.concurrent包下提供了一些多線程支持的集合類。

在學(xué)習(xí)Java中的集合類的API、編程原理的時(shí)候,我們一定要明白,"集合"是一個(gè)很古老的數(shù)學(xué)概念,它遠(yuǎn)遠(yuǎn)早于Java的出現(xiàn)。從數(shù)學(xué)概念的角度來(lái)理解集合能幫助我們更好的理解編程中什么時(shí)候該使用什么類型的集合類。

Java容器類類庫(kù)的用途是"保存對(duì)象",并將其劃分為兩個(gè)不同的概念:

1)?Collection
一組"對(duì)立"的元素,通常這些元素都服從某種規(guī)則
?  1.1)?List必須保持元素特定的順序
?  1.2)?Set不能有重復(fù)元素
?  1.3)?Queue保持一個(gè)隊(duì)列(先進(jìn)先出)的順序
2)?Map
一組成對(duì)的"鍵值對(duì)"對(duì)象

Collection和Map的區(qū)別在于容器中每個(gè)位置保存的元素個(gè)數(shù):

1)?Collection?每個(gè)位置只能保存一個(gè)元素(對(duì)象)
2)?Map保存的是"鍵值對(duì)",就像一個(gè)小型數(shù)據(jù)庫(kù)。我們可以通過(guò)"鍵"找到該鍵對(duì)應(yīng)的"值"

2. Java集合類架構(gòu)層次關(guān)系

1.?Interface?Iterable
迭代器接口,這是Collection類的父接口。實(shí)現(xiàn)這個(gè)Iterable接口的對(duì)象允許使用foreach進(jìn)行遍歷,也就是說(shuō),所有的Collection集合對(duì)象都具有"foreach可遍歷性"。這個(gè)Iterable接口只
有一個(gè)方法:?iterator()。它返回一個(gè)代表當(dāng)前集合對(duì)象的泛型

3. Java集合類的應(yīng)用場(chǎng)景代碼

學(xué)習(xí)了集合類的基本架構(gòu)框架之后,我們接著來(lái)學(xué)習(xí)它們各自的應(yīng)用場(chǎng)景、以及細(xì)節(jié)處的注意事項(xiàng)

0x1: Set

HashSet

import?java.util.*;?

//類A的equals方法總是返回true,但沒(méi)有重寫其hashCode()方法。不能保證當(dāng)前對(duì)象是HashSet中的唯一對(duì)象
class?A
{
????public?boolean?equals(Object?obj)
????{
????????return?true;
????}
}

//類B的hashCode()方法總是返回1,但沒(méi)有重寫其equals()方法。不能保證當(dāng)前對(duì)象是HashSet中的唯一對(duì)象
class?B
{
????public?int?hashCode()
????{
????????return?1;
????}
}

//類C的hashCode()方法總是返回2,且有重寫其equals()方法
class?C
{
????public?int?hashCode()
????{
????????return?2;
????}
????public?boolean?equals(Object?obj)
????{
????????return?true;
????}
}
public?class?HashSetTest
{
????public?static?void?main(String[]?args)?
????{
????????HashSet?books?=?new?HashSet();
????????//分別向books集合中添加兩個(gè)A對(duì)象,兩個(gè)B對(duì)象,兩個(gè)C對(duì)象
????????books.add(new?A());
????????books.add(new?A());

????????books.add(new?B());
????????books.add(new?B());

????????books.add(new?C());
????????books.add(new?C());
????????System.out.println(books);
????}
}

result:

[B@1,?B@1,?C@2,?A@3bc257,?A@785d65]

可以看到,如果兩個(gè)對(duì)象通過(guò)equals()方法比較返回true,但這兩個(gè)對(duì)象的hashCode()方法返回不同的hashCode值時(shí),這將導(dǎo)致HashSet會(huì)把這兩個(gè)對(duì)象保存在Hash表的不同位置,從而使對(duì)象可以添加成功,這就與Set集合的規(guī)則有些出入了。所以,我們要明確的是: equals()決定是否可以加入HashSet、而hashCode()決定存放的位置,它們兩者必須同時(shí)滿足才能允許一個(gè)新元素加入HashSet
但是要注意的是: 如果兩個(gè)對(duì)象的hashCode相同,但是它們的equlas返回值不同,HashSet會(huì)在這個(gè)位置用鏈?zhǔn)浇Y(jié)構(gòu)來(lái)保存多個(gè)對(duì)象。而HashSet訪問(wèn)集合元素時(shí)也是根據(jù)元素的HashCode值來(lái)快速定位的,這種鏈?zhǔn)浇Y(jié)構(gòu)會(huì)導(dǎo)致性能下降。

所以如果需要把某個(gè)類的對(duì)象保存到HashSet集合中,我們?cè)谥貙戇@個(gè)類的equlas()方法和hashCode()方法時(shí),應(yīng)該盡量保證兩個(gè)對(duì)象通過(guò)equals()方法比較返回true時(shí),它們的hashCode()方法返回值也相等

LinkedHashSet

import?java.util.*;?

public?class?LinkedHashSetTest
{
????public?static?void?main(String[]?args)?
????{
????????LinkedHashSet?books?=?new?LinkedHashSet();
????????books.add("Java");
????????books.add("LittleHann");
????????System.out.println(books);

????????//刪除?Java
??????books.remove("Java");
????????//重新添加?Java
????????books.add("Java");
????????System.out.println(books);
????}
}

元素的順序總是與添加順序一致,同時(shí)要明白的是,LinkedHashSetTest是HashSet的子類,因此它不允許集合元素重復(fù)

TreeSet

import?java.util.*;

public?class?TreeSetTest
{
????public?static?void?main(String[]?args)?
????{
????????TreeSet?nums?=?new?TreeSet();
????????//向TreeSet中添加四個(gè)Integer對(duì)象
????????nums.add(5);
????????nums.add(2);
????????nums.add(10);
????????nums.add(-9);

????????//輸出集合元素,看到集合元素已經(jīng)處于排序狀態(tài)
????????System.out.println(nums);

????????//輸出集合里的第一個(gè)元素
????????System.out.println(nums.first());

????????//輸出集合里的最后一個(gè)元素
????????System.out.println(nums.last());

????????//返回小于4的子集,不包含4
????????System.out.println(nums.headSet(4));

????????//返回大于5的子集,如果Set中包含5,子集中還包含5
????????System.out.println(nums.tailSet(5));

????????//返回大于等于-3,小于4的子集。
????????System.out.println(nums.subSet(-3?,?4));
????}
}

與HashSet集合采用hash算法來(lái)決定元素的存儲(chǔ)位置不同,TreeSet采用紅黑樹(shù)的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)集合元素。TreeSet支持兩種排序方式: 自然排序、定制排序
1. 自然排序:

TreeSet會(huì)調(diào)用集合元素的compareTo(Object obj)方法來(lái)比較元素之間的大小關(guān)系,然后將集合元素按升序排序,即自然排序。如果試圖把一個(gè)對(duì)象添加到TreeSet時(shí),則該對(duì)象的類必須實(shí)現(xiàn)Comparable接口,否則程序會(huì)拋出異常。

當(dāng)把一個(gè)對(duì)象加入TreeSet集合中時(shí),TreeSet會(huì)調(diào)用該對(duì)象的compareTo(Object obj)方法與容器中的其他對(duì)象比較大小,然后根據(jù)紅黑樹(shù)結(jié)構(gòu)找到它的存儲(chǔ)位置。如果兩個(gè)對(duì)象通過(guò)compareTo(Object obj)方法比較相等,新對(duì)象將無(wú)法添加到TreeSet集合中(牢記Set是不允許重復(fù)的概念)。

注意: 當(dāng)需要把一個(gè)對(duì)象放入TreeSet中,重寫該對(duì)象對(duì)應(yīng)類的equals()方法時(shí),應(yīng)該保證該方法與compareTo(Object obj)方法有一致的結(jié)果,即如果兩個(gè)對(duì)象通過(guò)equals()方法比較返回true時(shí),這兩個(gè)對(duì)象通過(guò)compareTo(Object obj)方法比較結(jié)果應(yīng)該也為0(即相等)

看到這里,我們應(yīng)該明白:

1)?對(duì)與Set來(lái)說(shuō),它定義了equals()為唯一性判斷的標(biāo)準(zhǔn),而對(duì)于到了具體的實(shí)現(xiàn),HashSet、TreeSet來(lái)說(shuō),它們又會(huì)有自己特有的唯一性判斷標(biāo)準(zhǔn),只有同時(shí)滿足了才能判定為唯一性
2)?我們?cè)诓僮鬟@些集合類的時(shí)候,對(duì)和唯一性判斷有關(guān)的函數(shù)重寫要重點(diǎn)關(guān)注

?2. 定制排序

TreeSet的自然排序是根據(jù)集合元素的大小,TreeSet將它們以升序排序。如果我們需要實(shí)現(xiàn)定制排序,則可以通過(guò)Comparator接口的幫助(類似PHP中的array_map回調(diào)處理函數(shù)的思想)。該接口里包含一個(gè)int compare(T o1, T o2)方法,該方法用于比較大小

import?java.util.*;

class?M
{
????int?age;
????public?M(int?age)
????{
????????this.age?=?age;
????}
????public?String?toString()
????{
????????return?"M[age:"?+?age?+?"]";
????}
}

public?class?TreeSetTest4
{
????public?static?void?main(String[]?args)?
????{
????????TreeSet?ts?=?new?TreeSet(new?Comparator()
????????{
????????????//根據(jù)M對(duì)象的age屬性來(lái)決定大小
????????????public?int?compare(Object?o1,?Object?o2)
????????????{
????????????????M?m1?=?(M)o1;
????????????????M?m2?=?(M)o2;
????????????????return?m1.age?>?m2.age???-1
????????????????????:?m1.age?<?m2.age???1?:?0;
????????????}
????????});????
????????ts.add(new?M(5));
????????ts.add(new?M(-3));
????????ts.add(new?M(9));
????????System.out.println(ts);
????}
}

看到這里,我們需要梳理一下關(guān)于排序的概念

1)?equals、compareTo決定的是怎么比的問(wèn)題,即用什么field進(jìn)行大小比較
2)?自然排序、定制排序、Comparator決定的是誰(shuí)大的問(wèn)題,即按什么順序(升序、降序)進(jìn)行排序
它們的關(guān)注點(diǎn)是不同的,一定要注意區(qū)分

EnumSet

import?java.util.*;

enum?Season
{
????SPRING,SUMMER,FALL,WINTER
}
public?class?EnumSetTest
{
????public?static?void?main(String[]?args)?
????{
????????//創(chuàng)建一個(gè)EnumSet集合,集合元素就是Season枚舉類的全部枚舉值
????????EnumSet?es1?=?EnumSet.allOf(Season.class);
????????//輸出[SPRING,SUMMER,FALL,WINTER]
????????System.out.println(es1);

????????//創(chuàng)建一個(gè)EnumSet空集合,指定其集合元素是Season類的枚舉值。
????????EnumSet?es2?=?EnumSet.noneOf(Season.class);?
????????//輸出[]
????????System.out.println(es2);?
????????//手動(dòng)添加兩個(gè)元素
????????es2.add(Season.WINTER);
????????es2.add(Season.SPRING);
????????//輸出[SPRING,WINTER]
????????System.out.println(es2);

????????//以指定枚舉值創(chuàng)建EnumSet集合
????????EnumSet?es3?=?EnumSet.of(Season.SUMMER?,?Season.WINTER);?
????????//輸出[SUMMER,WINTER]
????????System.out.println(es3);

????????EnumSet?es4?=?EnumSet.range(Season.SUMMER?,?Season.WINTER);?
????????//輸出[SUMMER,FALL,WINTER]
????????System.out.println(es4);

????????//新創(chuàng)建的EnumSet集合的元素和es4集合的元素有相同類型,
????????//es5的集合元素?+?es4集合元素?=?Season枚舉類的全部枚舉值
????????EnumSet?es5?=?EnumSet.complementOf(es4);?
????????//輸出[SPRING]
????????System.out.println(es5);
????}
}

以上就是Set集合類的編程應(yīng)用場(chǎng)景。那么應(yīng)該怎樣選擇何時(shí)使用這些集合類呢?

1)?HashSet的性能總是比TreeSet好(特別是最常用的添加、查詢?cè)氐炔僮?,因?yàn)門reeSet需要額外的紅黑樹(shù)算法來(lái)維護(hù)集合元素的次序。只有當(dāng)需要一個(gè)保持排序的Set時(shí),才應(yīng)該使用TreeSet,否則都應(yīng)該使用HashSet
2)?對(duì)于普通的插入、刪除操作,LinkedHashSet比HashSet要略慢一點(diǎn),這是由維護(hù)鏈表所帶來(lái)的開(kāi)銷造成的。不過(guò),因?yàn)橛辛随湵淼拇嬖冢闅vLinkedHashSet會(huì)更快
3)?EnumSet是所有Set實(shí)現(xiàn)類中性能最好的,但它只能保存同一個(gè)枚舉類的枚舉值作為集合元素
4)?HashSet、TreeSet、EnumSet都是"線程不安全"的,通常可以通過(guò)Collections工具類的synchronizedSortedSet方法來(lái)"包裝"該Set集合。
SortedSet?s?=?Collections.synchronizedSortedSet(new?TreeSet(...));

?

0x2: List

ArrayList

如果一開(kāi)始就知道ArrayList集合需要保存多少元素,則可以在創(chuàng)建它們時(shí)就指定initialCapacity大小,這樣可以減少重新分配的次數(shù),提供性能,ArrayList還提供了如下方法來(lái)重新分配Object[]數(shù)組

1)?ensureCapacity(int?minCapacity):?將ArrayList集合的Object[]數(shù)組長(zhǎng)度增加minCapacity
2)?trimToSize():?調(diào)整ArrayList集合的Object[]數(shù)組長(zhǎng)度為當(dāng)前元素的個(gè)數(shù)。程序可以通過(guò)此方法來(lái)減少ArrayList集合對(duì)象占用的內(nèi)存空間
import?java.util.*;

public?class?ListTest
{
????public?static?void?main(String[]?args)?
????{
????????List?books?=?new?ArrayList();
????????//向books集合中添加三個(gè)元素
????????books.add(new?String("輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)"));
????????books.add(new?String("瘋狂Java講義"));
????????books.add(new?String("瘋狂Android講義"));
????????System.out.println(books);

????????//將新字符串對(duì)象插入在第二個(gè)位置
????????books.add(1?,?new?String("瘋狂Ajax講義"));
????????for?(int?i?=?0?;?i?<?books.size()?;?i++?)
????????{
????????????System.out.println(books.get(i));
????????}

????????//刪除第三個(gè)元素
????????books.remove(2);
????????System.out.println(books);

????????//判斷指定元素在List集合中位置:輸出1,表明位于第二位
????????System.out.println(books.indexOf(new?String("瘋狂Ajax講義")));??//①
????????//將第二個(gè)元素替換成新的字符串對(duì)象
????????books.set(1,?new?String("LittleHann"));
????????System.out.println(books);

????????//將books集合的第二個(gè)元素(包括)
????????//到第三個(gè)元素(不包括)截取成子集合
????????System.out.println(books.subList(1?,?2));
????}

Stack

注意Stack的后進(jìn)先出的特點(diǎn)

import?java.util.*;

public?class?VectorTest
{
????public?static?void?main(String[]?args)?
????{
????????Stack?v?=?new?Stack();
????????//依次將三個(gè)元素push入"棧"
????????v.push("瘋狂Java講義");
????????v.push("輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)");
????????v.push("瘋狂Android講義");

????????//輸出:[瘋狂Java講義,?輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)?,?瘋狂Android講義]
????????System.out.println(v);

????????//訪問(wèn)第一個(gè)元素,但并不將其pop出"棧",輸出:瘋狂Android講義
????????System.out.println(v.peek());

????????//依然輸出:[瘋狂Java講義,?輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)?,?瘋狂Android講義]
????????System.out.println(v);

????????//pop出第一個(gè)元素,輸出:瘋狂Android講義
????????System.out.println(v.pop());

????????//輸出:[瘋狂Java講義,?輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)]
????????System.out.println(v);
????}
}

LinkedList

import?java.util.*;

public?class?LinkedListTest
{
????public?static?void?main(String[]?args)?
????{
????????LinkedList?books?=?new?LinkedList();

????????//將字符串元素加入隊(duì)列的尾部(雙端隊(duì)列)
????????books.offer("瘋狂Java講義");

????????//將一個(gè)字符串元素加入棧的頂部(雙端隊(duì)列)
????????books.push("輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)");

????????//將字符串元素添加到隊(duì)列的頭(相當(dāng)于棧的頂部)
????????books.offerFirst("瘋狂Android講義");

????????for?(int?i?=?0;?i?<?books.size()?;?i++?)
????????{
????????????System.out.println(books.get(i));
????????}

????????//訪問(wèn)、并不刪除棧頂?shù)脑?????????System.out.println(books.peekFirst());
????????//訪問(wèn)、并不刪除隊(duì)列的最后一個(gè)元素
????????System.out.println(books.peekLast());
????????//將棧頂?shù)脑貜棾?棧"
????????System.out.println(books.pop());
????????//下面輸出將看到隊(duì)列中第一個(gè)元素被刪除
????????System.out.println(books);
????????//訪問(wèn)、并刪除隊(duì)列的最后一個(gè)元素
????????System.out.println(books.pollLast());
????????//下面輸出將看到隊(duì)列中只剩下中間一個(gè)元素:
????????//輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)
????????System.out.println(books);
????}
}

從代碼中我們可以看到,LinkedList同時(shí)表現(xiàn)出了雙端隊(duì)列、棧的用法。功能非常強(qiáng)大

?

0x3:?Queue

PriorityQueue

import?java.util.*;

public?class?PriorityQueueTest
{
????public?static?void?main(String[]?args)?
????{
????????PriorityQueue?pq?=?new?PriorityQueue();
????????//下面代碼依次向pq中加入四個(gè)元素
????????pq.offer(6);
????????pq.offer(-3);
????????pq.offer(9);
????????pq.offer(0);

????????//輸出pq隊(duì)列,并不是按元素的加入順序排列,
????????//而是按元素的大小順序排列,輸出[-3,?0,?9,?6]
????????System.out.println(pq);
????????//訪問(wèn)隊(duì)列第一個(gè)元素,其實(shí)就是隊(duì)列中最小的元素:-3
????????System.out.println(pq.poll());
????}
}

PriorityQueue不允許插入null元素,它還需要對(duì)隊(duì)列元素進(jìn)行排序,PriorityQueue的元素有兩種排序方式

1)?自然排序:
采用自然順序的PriorityQueue集合中的元素對(duì)象都必須實(shí)現(xiàn)了Comparable接口,而且應(yīng)該是同一個(gè)類的多個(gè)實(shí)例,否則可能導(dǎo)致ClassCastException異常
2)?定制排序
創(chuàng)建PriorityQueue隊(duì)列時(shí),傳入一個(gè)Comparator對(duì)象,該對(duì)象負(fù)責(zé)對(duì)隊(duì)列中的所有元素進(jìn)行排序
關(guān)于自然排序、定制排序的原理和之前說(shuō)的TreeSet類似

?ArrayDeque

import?java.util.*;

public?class?ArrayDequeTest
{
????public?static?void?main(String[]?args)?
????{
????????ArrayDeque?stack?=?new?ArrayDeque();
????????//依次將三個(gè)元素push入"棧"
????????stack.push("瘋狂Java講義");
????????stack.push("輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)");
????????stack.push("瘋狂Android講義");

????????//輸出:[瘋狂Java講義,?輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)?,?瘋狂Android講義]
????????System.out.println(stack);

????????//訪問(wèn)第一個(gè)元素,但并不將其pop出"棧",輸出:瘋狂Android講義
????????System.out.println(stack.peek());

????????//依然輸出:[瘋狂Java講義,?輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)?,?瘋狂Android講義]
????????System.out.println(stack);

????????//pop出第一個(gè)元素,輸出:瘋狂Android講義
????????System.out.println(stack.pop());

????????//輸出:[瘋狂Java講義,?輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)]
????????System.out.println(stack);
????}
}

以上就是List集合類的編程應(yīng)用場(chǎng)景。我們來(lái)梳理一下思路

1.?java提供的List就是一個(gè)"線性表接口",ArrayList(基于數(shù)組的線性表)、LinkedList(基于鏈的線性表)是線性表的兩種典型實(shí)現(xiàn)
2.?Queue代表了隊(duì)列,Deque代表了雙端隊(duì)列(既可以作為隊(duì)列使用、也可以作為棧使用)
3.?因?yàn)閿?shù)組以一塊連續(xù)內(nèi)存來(lái)保存所有的數(shù)組元素,所以數(shù)組在隨機(jī)訪問(wèn)時(shí)性能最好。所以的內(nèi)部以數(shù)組作為底層實(shí)現(xiàn)的集合在隨機(jī)訪問(wèn)時(shí)性能最好。
4.?內(nèi)部以鏈表作為底層實(shí)現(xiàn)的集合在執(zhí)行插入、刪除操作時(shí)有很好的性能
5.?進(jìn)行迭代操作時(shí),以鏈表作為底層實(shí)現(xiàn)的集合比以數(shù)組作為底層實(shí)現(xiàn)的集合性能好

我們之前說(shuō)過(guò),Collection接口繼承了Iterable接口,也就是說(shuō),我們以上學(xué)習(xí)到的所有的Collection集合類都具有"可遍歷性"

Iterable接口也是java集合框架的成員,它隱藏了各種Collection實(shí)現(xiàn)類的底層細(xì)節(jié),向應(yīng)用程序提供了遍歷Collection集合元素的統(tǒng)一編程接口:

1)?boolean?hasNext():?是否還有下一個(gè)未遍歷過(guò)的元素
2)?Object?next():?返回集合里的下一個(gè)元素
3)?void?remove():?刪除集合里上一次next方法返回的元素

iterator實(shí)現(xiàn)遍歷:

import?java.util.*;

public?class?IteratorTest
{
????public?static?void?main(String[]?args)?
????{
????????//創(chuàng)建一個(gè)集合
????????Collection?books?=?new?HashSet();
????????books.add("輕量級(jí)Java?EE企業(yè)應(yīng)用實(shí)戰(zhàn)");
????????books.add("瘋狂Java講義");
????????books.add("瘋狂Android講義");


????????//獲取books集合對(duì)應(yīng)的迭代器
????????Iterator?it?=?books.iterator();
????????while(it.hasNext())
????????{
????????????//it.next()方法返回的數(shù)據(jù)類型是Object類型,
????????????//需要強(qiáng)制類型轉(zhuǎn)換
????????????String?book?=?(String)it.next();
????????????System.out.println(book);
????????????if?(book.equals("瘋狂Java講義"))
????????????{
????????????????//從集合中刪除上一次next方法返回的元素
????????????????it.remove();
????????????}
????????????//對(duì)book變量賦值,不會(huì)改變集合元素本身
????????????book?=?"測(cè)試字符串";????
????????}
????????System.out.println(books);
????}
}

<p style="margin:10px auto;padding-top

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

納祥科技推出太陽(yáng)能+Type-C雙充電自行車前燈方案,方案核心模塊包含太陽(yáng)能板、單片機(jī)、三極管、3顆LED燈珠與1200mAh電池,通過(guò)低功耗單片機(jī)與三極管驅(qū)動(dòng),支持強(qiáng)光/弱光/爆閃3種模式,高流明遠(yuǎn)射程,適配多種車型

關(guān)鍵字: 方案開(kāi)發(fā) 電子方案 自行車前燈方案 納祥科技

慕尼黑2025年9月11日 /美通社/ -- 當(dāng)?shù)貢r(shí)間9月9日,賽力斯動(dòng)力在德國(guó)慕尼黑國(guó)際車展期間舉辦技術(shù)發(fā)布與交流會(huì),正式在海外市場(chǎng)推出全新一代賽力斯超級(jí)增程、高效發(fā)動(dòng)機(jī)和新一代分布式電驅(qū)動(dòng)系統(tǒng),同時(shí)與來(lái)自全球的汽車產(chǎn)...

關(guān)鍵字: 慕尼黑 分布式 發(fā)動(dòng)機(jī) 新能源汽車

慕尼黑2025年9月11日 /美通社/ -- 高端智能電動(dòng)汽車品牌問(wèn)界(AITO)在2025年德國(guó)國(guó)際汽車及智慧出行博覽會(huì)(IAA MOBILITY)上,正式發(fā)布了其最新全球產(chǎn)品陣容——專為中東市場(chǎng)深度本地化打造的AIT...

關(guān)鍵字: AI 智能駕駛 測(cè)試 生態(tài)系統(tǒng)

舍弗勒首次為中國(guó)頭部車企大規(guī)模生產(chǎn)高壓逆變磚 天津工廠一年內(nèi)完成量產(chǎn)準(zhǔn)備,逆變器模塊性能參數(shù)顯著提升 與合作伙伴羅姆半導(dǎo)體共研尖端碳化硅技術(shù),效率更高、性能更優(yōu) 模塊化可擴(kuò)展設(shè)計(jì)使逆變磚易于集成,可廣泛...

關(guān)鍵字: 逆變 高壓 逆變器 集成

舍弗勒以"專注驅(qū)動(dòng)技術(shù)的科技公司"為主題亮相IAA MOBILITY 2025(B3館B40展臺(tái)) 合并緯湃科技后首次亮相IAA MOBILITY,展示拓展后的汽車產(chǎn)品組合 憑借在軟件、...

關(guān)鍵字: 電氣 軟件 驅(qū)動(dòng)技術(shù) BSP

拉斯維加斯2025年9月11日 /美通社/ -- 在9月8日至11日舉辦的RE+ 2025展會(huì)上,全球綜合儲(chǔ)能解決方案供應(yīng)商德賽電池(Desay Battery)全面展示了其創(chuàng)新成果,并宣布與深圳市華寶新能源股份有限公司...

關(guān)鍵字: 電池 電芯 人工智能 鋰電

香港2025年 9月12日 /美通社/ -- 全球領(lǐng)先的互聯(lián)網(wǎng)社區(qū)創(chuàng)建者 - 網(wǎng)龍網(wǎng)絡(luò)控股有限公司 ("網(wǎng)龍"或"本公司",香港交易所股票代碼:777)欣然宣布,其子公司My...

關(guān)鍵字: AI 遠(yuǎn)程控制 控制技術(shù) BSP

慕尼黑2025年9月12日 /美通社/ -- 慕尼黑當(dāng)?shù)貢r(shí)間9月10日,在2025德國(guó)國(guó)際汽車及智慧出行博覽會(huì)(IAA MOBILITY)上,國(guó)際獨(dú)立第三方檢測(cè)、檢驗(yàn)和認(rèn)證機(jī)...

關(guān)鍵字: 測(cè)試 慕尼黑 模型 HUBER

上海2025年9月12日 /美通社/ -- 近日,國(guó)際獨(dú)立第三方檢測(cè)、檢驗(yàn)和認(rèn)證機(jī)構(gòu)德國(guó)萊茵TÜV大中華區(qū)(簡(jiǎn)稱"TÜV萊茵")為上海...

關(guān)鍵字: 測(cè)試 信息安全 安全管理 開(kāi)關(guān)

廣州2025年9月12日 /美通社/ -- 9月11日,由國(guó)際獨(dú)立第三方檢測(cè)、檢驗(yàn)和認(rèn)證機(jī)構(gòu)德國(guó)萊茵TÜV大中華區(qū)(簡(jiǎn)稱"TÜV萊茵"...

關(guān)鍵字: 數(shù)字化 供應(yīng)鏈 控制 電子
關(guān)閉