亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java核心技術筆記-第13章

2019-11-06 06:42:02
字體:
來源:轉載
供稿:網友

集合

*視圖與包裝器 和 批操作 兩節沒怎么看

1.Collection 接口 中至少包含add和iterator方法,使用add方法時不允許添加已經存在的對象(添加失敗時add方法會返回false,否則返回true)。Iterator接口中包含next,hasNext, remove 方法。

2.實現了 Iterable接口 的集合才可以使用for each進行遍歷。而Collection接口擴展了Iterable接口,所以所有的標準類庫中的集合都可以使用for each來進行遍歷

3.應該認為java迭代器是位于兩個元素之間的位置。每次調用next方法,就越過一個元素,next方法會返回剛剛越過的那個元素。

4.Iteratornext方法和remove方法是相互依賴的。在調用remove方法之前必須先調用next方法。如:

Iterator<String> it = c.iterator(); //c在這里是一個集合it.next();it.remove(); //此時刪掉了剛剛越過的那個元素it.next(); //如果想要刪掉兩個相鄰的元素,也必須兩次調用next方法it.remove();

5.AbstractCollection實現了更多常用的方法,如contains方法(判斷依據是equals,不是==)。

6.標準庫中,以Map結尾的集合實現的是Map接口,而不是Collection接口。

7.具體的集合 (1)鏈表 [1]Java中的鏈表(LinkedList)都是雙向鏈表,每個結點存放著前一個和后一個結點的引用。 [2]鏈表與泛型集合的一個重要區別是鏈表是一個有序集合,每個對象的位置十分重要。 [3]依賴于位置的add方法(比如添加一個元素到某個具體的位置)由迭代器進行負責。插入時,迭代器位于哪個位置,就會將元素插入到哪個位置。 [4]上面提到的add方法存在于ListIterator接口中,這個接口中還包含PRevious和hasprevious方法,用來反向遍歷鏈表。 [5]在調用previous方法之后也可以調用Iterator的remove方法,刪除的是剛剛越過的那個結點。 [6]ListIterator中的add方法依賴于迭代器的位置,Iterator中的remove方法依賴于迭代器的狀態。 [7]一個迭代器在訪問集合時,如果發現集合被另一個迭代器修改了,就會拋出一個ConcurrentModificationException異常。但是僅限于添加、刪除元素的 結構性修改,即如果使用set修改則不會拋出異常 [8]LinkedList類提供了一個用于訪問某個特定元素的get方法,但是應該避免使用這個方法。同時也要避免使用以整數索引表示鏈表中位置的所有方法。(想要使用整數索引來訪問的話,完全可以用ArrayList,沒必要用LinkedList) [9]ListIterator中還包含nextIndex和previousIndex方法用來返回迭代器所在位置的下一個元素的索引和上一個元素的索引(注意迭代器是位于元素之間的) [10]list.ListIterator(n)將返回一個迭代器,這個迭代器指向索引為n的元素前面(左邊)的位置。但是效率比較低。 (2)數組列表(ArrayList):在不需要同步時使用ArrayList類,需要同步時(如兩個線程安全的訪問同一個對象)使用Vector類。 (3)散列集:使用散列碼來查找集合中的元素,但是無法控制元素出現的順序。 [1]使用數組來進行存儲,數組中的每個元素(稱為桶)又是一個鏈表,鏈表(桶)用來存放散列值相同(沖突)的元素。 [2]set類型(如HashSet)就是使用散列表實現的。其中的add方法會先檢查是否已經存在該對象。 [3]HashSet的contains方法已經被重寫,不必每個元素都查看,可以根據散列碼直接定位到對應的桶。(但是還是使用equals判斷是否已經存在) (4)樹集(TreeSet):可以對添加到里面的元素自動進行排序。 [1]將一個元素添加到樹集中,要比添加到散列集中慢,但是比添加到ArrayList或者LinkedList中要快。 [2]一般情況下,實現Comparable接口使用compareTo方法比較對象之間的大小。但是,有時,比如兩組TreeSet對象的比較標準不一樣(當然兩組是各自比較各自的),就不能使用Comparable了。這時,可以使用Comparator接口,將其傳遞給TreeSet的構造器,如:

TreeSet<Item> itemTreeSet = new TreeSet<>( new Comparator<Item>(){ //只是作為函數對象(沒有任何數據,只是作為比較方法的持有器),一般使用匿名內部類 public int compare(Item a, Item b){ String descrA = a.getDescription(); Stirng descrB = b.getDescription(); return descrA.compareTo(descrB); } });

(5)隊列(Queue)(尾部添加,頭部刪除)與雙端隊列(頭部尾部都可以添加刪除):ArrayDeque(循環數組隊列)和LinkedList(鏈表隊列)實現了Deque接口,且都提供了雙端隊列。(deque的意思就是雙端隊列) (6)優先級隊列(PriorityQueue):使用堆實現。與TreeSet一樣,既可以保存實現了Comparable接口的類對象,也可以保存在構造器中提供比較器的對象。 注意:優先級隊列不一定保證所有元素都是按序排列的,但是它能夠保證隊列的頭一定是最小的元素(調用PriorityQueue的remove方法時刪除的一定是最小的),這是TreeSet和PriorityQueue的區別 (7)映射表(Map) [1]HashMap和TreeMap實現了Map接口,在需要排序時使用TreeMap,不需要排序時使用HashMap。 [2]散列或者比較函數只能作用于鍵。 [3]put函數用來向map中添加鍵值對,如果對同一個鍵兩次調用put方法,第二個值就會取代第一個值,而put函數會返回第一個值。 [4]三個視圖:Set keySet()(既不是HashSet,也不是TreeSet) , Collection values() , Set

for(Map.Entry<String, Employee> entry : staff.entrySet()) //staff是一個HashMap對象 { String key = entry.getKey(); Employee value = entry.getValue(); ... }

(8)專用集與映射表集 [1]如果程序中對某個鍵的最后一次引用已經消亡,垃圾回收器此時卻不能夠回收該對象。(因為映射表對象是活動的,所以其中的所有桶也都是活動的,垃圾回收器不能回收活動的對象)WeakHashMap就是用來解決這一問題。 [2]LinkedHashSet和LinkedHashMap,使用鏈表將各個桶中的元素鏈接起來,最近一次操作的元素將被放在鏈表的尾部,也就是說,是按照元素的訪問次序來對元素進行排序。(對于最近最少使用原則非常有用,比如內存滿了,可以直接將頭部的元素刪掉,然后添加新的元素) [3]IdentityHashMap,鍵的散列值不使用hashCode方法,而是使用System.identityHashCode方法計算的,即根據對象的內存地址來計算散列碼。而且,在對對象進行比較時,使用==,而不是equals

8.(1)將數組轉化為一個集合: String[] values = …; HashSet staff = new HashSet<>(Arrays.asList(values)); //Arrays.asList方法返回一個包裝了普通數組的List包裝器 (2)將集合轉為一個數組: String[] values = (String[])staff.toArray(); //將會出錯,因為toArray方法返回的是一個重新構造的Object類型的數組,無法轉換為String類型 可以使用另一個toArray方法: String[]values = (String[])staff.toArray(new String[0]); //正確。這個toArray方法同樣也是返回一個Object類型的數組,但是在構造時是根據toArray方法參數的類型構造的,所以可以進行轉化

9.**Collection中包含靜態方法**sort和shuffle,還有binarySearch方法(先檢查要排序的集合是否實現了Randomaccess接口,如果實現了就采用二分查找,否則采用線性查找。另外,如果查找不到某個元素,方法將返回一個負值,這種情況下應該將鍵插入到-i-1的位置)

10.遺留的集合 (1)Hashtable(小寫t)與HashMap的作用一樣,他們擁有相同的接口。Hashtable和Vector的方法都是同步的,HashMap則不是。如果對同步性和遺留代碼沒有任何要求,那么就使用HashMap。 (2)Enumeration接口,包含兩個方法hasMoreElements和nextElement。另外,靜態方法Collection.enumeration方法將產生一個枚舉對象。

Enumeration<Employee> e = staff.elements();while(e.hasMoreElements()){ Employee ee = e.nextElement(); ...}

(3)屬性映射表(Properties類實現了Java的屬性映射表):[1]通常用于程序的特殊配置選項。[2]鍵和值都是字符串。[3]表可以保存到文件中,也可以從文件中加載。[4]使用一個默認的輔助表。 (4)Stack類包含pop和push方法。但是Stack類擴展為Vector類,可以讓棧使用不屬于棧操作的insert和remove方法(這點并不讓人滿意)。 (5)位集(BitSet):用于存放一個位序列,要比使用Boolean對象的ArrayList更加高效。get方法獲取某一位的狀態,set方法將某一位設置為true,clear方法將某一位設置為false


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美制服第一页| 亚洲日韩中文字幕在线播放| 国产一区二区在线免费视频| 深夜福利国产精品| 国产精品旅馆在线| 欧美一级淫片播放口| 亚洲欧美中文日韩在线| 精品久久久久久中文字幕一区奶水| 欧美日韩国产综合新一区| 欧美在线观看网站| 亚洲人成人99网站| 97精品一区二区视频在线观看| 久久久久成人网| 97在线免费观看| 另类视频在线观看| 欧美亚洲视频在线观看| 福利微拍一区二区| 55夜色66夜色国产精品视频| 亚洲国产成人91精品| 狠狠躁夜夜躁人人爽天天天天97| 久久精品99国产精品酒店日本| 韩国福利视频一区| 国产午夜一区二区| 久久综合伊人77777| 亚洲精品一区久久久久久| 亚洲欧美日韩天堂| 国产成人在线播放| 久久精品91久久香蕉加勒比| 红桃av永久久久| 成人激情黄色网| 91香蕉嫩草影院入口| 久久久99免费视频| 亚洲精品美女久久久| 欧美日韩第一视频| 欧美肥臀大乳一区二区免费视频| 欧美激情视频在线免费观看 欧美视频免费一| 日韩精品在线视频美女| 欧美性感美女h网站在线观看免费| 91精品啪aⅴ在线观看国产| 精品亚洲一区二区| 日韩美女视频在线观看| 欧美电影免费观看大全| 中文字幕国内精品| 国产中文日韩欧美| 亚洲福利在线视频| 精品偷拍一区二区三区在线看| 亚洲白拍色综合图区| 日韩经典中文字幕在线观看| 国产伊人精品在线| 美女精品久久久| 亚洲最大福利视频| 中文字幕亚洲无线码在线一区| 上原亚衣av一区二区三区| 国产精品xxx视频| 国产日本欧美一区二区三区在线| 国产美女扒开尿口久久久| 91免费视频国产| 成人两性免费视频| 亚洲精品视频在线观看视频| 精品亚洲永久免费精品| 久久精品视频中文字幕| 日韩在线视频网站| 国产成人久久久精品一区| 亚洲精品中文字幕有码专区| 欧美亚洲伦理www| 成人h视频在线观看播放| 国产中文欧美精品| 91人人爽人人爽人人精88v| 欧美伊久线香蕉线新在线| 色在人av网站天堂精品| 91av网站在线播放| 日韩欧美高清视频| 国产精品va在线播放我和闺蜜| 成人精品视频99在线观看免费| 日韩国产精品亚洲а∨天堂免| 精品久久久久久亚洲国产300| 久久人人看视频| 精品福利在线观看| 韩国三级电影久久久久久| 成人xvideos免费视频| 欧美大全免费观看电视剧大泉洋| 国产精品精品国产| 精品国产福利在线| 日韩成人激情在线| 97人人模人人爽人人喊中文字| 欧美日韩国产综合新一区| 日韩精品一二三四区| 欧美激情精品久久久久久久变态| 草民午夜欧美限制a级福利片| 97色在线观看免费视频| 国产精品国产三级国产专播精品人| 国产日韩中文在线| 精品视频久久久久久久| 日韩美女视频免费在线观看| 国产91久久婷婷一区二区| 国产亚洲精品久久久久久| 成人做爰www免费看视频网站| 国产精品99久久久久久白浆小说| 97国产suv精品一区二区62| 丰满岳妇乱一区二区三区| 中文字幕日韩欧美| 日韩av电影在线免费播放| 久久精品99久久久香蕉| 国产成人精品一区| 日韩美女激情视频| 伊人男人综合视频网| 97国产在线观看| 这里只有视频精品| 久久久亚洲网站| 精品国产乱码久久久久酒店| 日韩欧美亚洲国产一区| 亚洲另类欧美自拍| 狠狠干狠狠久久| 亚洲毛片一区二区| 国产精品久久久久久久久| 日韩在线观看免费高清完整版| 午夜精品久久久久久99热| 欧美激情乱人伦| 欧美激情一区二区三区成人| 国产亚洲精品美女久久久久| 久久国产精品久久久久久久久久| 国产精品直播网红| 日韩欧美黄色动漫| 国产99久久精品一区二区 夜夜躁日日躁| 欧美乱大交做爰xxxⅹ性3| 日韩性xxxx爱| 欧美日韩国产一区二区三区| 久久在线观看视频| 91亚洲精品一区| 成人黄色大片在线免费观看| 国产成人av在线播放| 国产欧美日韩中文字幕在线| 亚洲国产精品久久久久久| 精品一区二区三区四区| 国内精品久久久久伊人av| 精品国产欧美成人夜夜嗨| 午夜剧场成人观在线视频免费观看| 欧美成人性色生活仑片| 国产狼人综合免费视频| 色综合伊人色综合网站| 日韩中文字幕欧美| 欧美日在线观看| 国产999精品视频| 欧美精品久久久久久久| 777777777亚洲妇女| 亚洲一区二区日本| 欧美日韩精品国产| 欧美在线一区二区视频| 国产99久久精品一区二区| 欧美日韩国产丝袜美女| 97香蕉超级碰碰久久免费软件| 国内精久久久久久久久久人| 最新国产成人av网站网址麻豆| 欧美一级片久久久久久久| 中文日韩在线观看| 亚洲视频日韩精品| 姬川优奈aav一区二区| 亚洲摸下面视频| 狠狠躁18三区二区一区| 亚洲国产精品久久精品怡红院| 国产精品视频男人的天堂| 日本a级片电影一区二区| 成人两性免费视频| 国产欧美久久一区二区|