大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 經(jīng)典Java基礎(chǔ)知識(shí)練習(xí)題

經(jīng)典Java基礎(chǔ)知識(shí)練習(xí)題

更新時(shí)間:2020-09-10 16:21:18 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2404次

創(chuàng)建一個(gè)Set集合,保存用戶輸入的數(shù)據(jù)

具體代碼實(shí)現(xiàn)如下面代碼中的testSet()方法。

知識(shí)點(diǎn):

Set集合的基本特征是元素不允許重復(fù)。HashSet不保存元素順序,LinkedHashSet用鏈表保持元素的插入順序,TreeSet可定制排序規(guī)則。

HashSet的底層是用HashMap實(shí)現(xiàn)的,即HashMap<key,value>中把所有value置為null,key就組成了一個(gè)Set

HashSet把元素的hashCode值作為地址索引來(lái)存儲(chǔ)元素,可以實(shí)現(xiàn)類似根據(jù)數(shù)組下標(biāo)索引查找元素的效果,這是HashSet訪問(wèn)速度快的原因

HashSet中如果兩個(gè)元素通過(guò)equals比較結(jié)果為true,但是兩個(gè)元素的hashCode不相等,即在兩個(gè)地方存放了值相等的兩個(gè)元素,HashSet將會(huì)出現(xiàn)各種奇怪問(wèn)題,不能正常工作。

基于上面第4點(diǎn),HashSet元素判斷兩個(gè)元素相等的標(biāo)準(zhǔn)是,不僅需要equals比較的結(jié)果為true,而且需要元素hashCode值相等,即不允許equals比較為true但是hashCode不想等的兩個(gè)元素存放在HashSet中。

HashSet中允許equals比較為false但是hashCode相等的兩個(gè)元素同時(shí)存在,這兩個(gè)元素將會(huì)被存放在同一個(gè)位置,并用鏈表維持兩個(gè)元素順序,但是這將嚴(yán)重影響HashSet的性能。

基于上面4.5.6點(diǎn),如果需要重寫一個(gè)HashSet的equals方法,一定也要重寫hashCode方法,原則是如果equals方法和equals方法使用共同的變量(成員變量)做計(jì)算,使得如果equals為true,hashCode結(jié)果值要相等。

LinkedHashSet底層多了一個(gè)鏈表結(jié)構(gòu)用來(lái)保存元素的插入順序(插入位置還是由hashCode決定的),遍歷LinkedHashSet時(shí)會(huì)自動(dòng)根據(jù)鏈表來(lái)遍歷

TreeSet的元素是有序的,有兩種排序規(guī)則,默認(rèn)是按自然排序(在元素中寫排序規(guī)則,元素必須實(shí)現(xiàn)了Comparable接口,且元素類型必須一樣),另一種是定制排序(由集合實(shí)現(xiàn)排序規(guī)則,需要集合關(guān)聯(lián)一個(gè)Comparator對(duì)象實(shí)現(xiàn))

JAVA中接收鍵盤輸入用System.in.read(),這個(gè)方法接收的是byte[]字節(jié),當(dāng)輸入結(jié)束(回車)時(shí)返回-1,但是這個(gè)方法會(huì)同時(shí)將r和n也接收。BufferedReader的readLine()方法可以讀取一行,適應(yīng)各種平臺(tái)的斷行規(guī)則(自動(dòng)去除換行符r,n等),但是BufferedReader只能讀取stream類型,System.in只能返回byte類型,因此需要用InputStreamReader做轉(zhuǎn)換。

創(chuàng)建一個(gè)List集合,隨意添加10個(gè)元素,然后通過(guò)索引為5處的元素,再取其中某個(gè)元素的索引,再刪除索引為3的元素

實(shí)現(xiàn)代碼如下面的testList()

知識(shí)點(diǎn),

List集合的基本特征是元素有序,可重復(fù),每個(gè)元素都有順序索引。因此List集合可以像數(shù)組一樣使用。

List集合有一個(gè)專用迭代器ListIterator,可以實(shí)現(xiàn)反向迭代。

ArrayList和Vector底層使用一個(gè)智能數(shù)組實(shí)現(xiàn),可動(dòng)態(tài)擴(kuò)展(ensureCapacity(int i)重新分類空間),

在java.util.Arrays的內(nèi)部也定義了一個(gè)ArrayList(通過(guò)asList()方法返回),但這是一個(gè)不可變定長(zhǎng)數(shù)組,不能增加,刪除數(shù)組元素,否則會(huì)拋出異常。

Vector是一個(gè)古老的集合實(shí)現(xiàn)類,Vector所擁有的功能ArrayList基本都有。但是Vector是一個(gè)線程安全類,性能上會(huì)比ArrayList稍低。另外Vector還有一個(gè)子類Stack,實(shí)現(xiàn)了棧結(jié)構(gòu)。

LinkedList是List的實(shí)現(xiàn)類,同時(shí)又是Deque的實(shí)現(xiàn)類,因此LinkedList同時(shí)具有ArrayList(隨機(jī)存取)和ArrayDeque(雙端隊(duì)列,棧)的功能。但是LinkedList的內(nèi)部實(shí)現(xiàn)完全不同,LinkedList內(nèi)部使用鏈表實(shí)現(xiàn),雖然也LinkedList表面上使用的是index索引數(shù)組方式的隨機(jī)訪問(wèn),但是內(nèi)部實(shí)現(xiàn)的時(shí)候使用index關(guān)聯(lián)了鏈表的順序,依然使用的是迭代訪問(wèn),所以性能上比ArrayList差。不過(guò)插入和刪除性能更好。

給定["a","b","a","b","c","a","b","c"]數(shù)組,使用Map的key保存字符串的元素,用value保存元素出現(xiàn)的次數(shù)

實(shí)現(xiàn)代碼如下面的testMap()

知識(shí)點(diǎn)

Map的基本特征是key不重復(fù)。key和set存在單向一對(duì)一關(guān)系。

Map接口中有兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu),一個(gè)是keySetp,用Set集合保存了所有key;一個(gè)是內(nèi)部類Entry,用來(lái)封裝key-value對(duì),每個(gè)元素對(duì)應(yīng)一個(gè)Entry對(duì)象,保存在Map的全局?jǐn)?shù)組transient Entry table[];中。

Map的entrySet()方法可以返回一個(gè)Entry對(duì)象組成的的Set集合的視圖。注意entrySet中并沒(méi)有使用一個(gè)Set對(duì)象來(lái)保存所有Entry集合,而是定義一個(gè)EntrySet內(nèi)部類,其中有個(gè)iterator()方法可以迭代訪問(wèn)map的所有Entry對(duì)象,調(diào)用EntrySet的iterator()方法就相當(dāng)于得到了Entry集合的視圖。

HashMap中,每次put進(jìn)一個(gè)新元素時(shí),都會(huì)在底層new一個(gè)Entry類來(lái)關(guān)聯(lián)key-value,并將Entry對(duì)象保存在Map的全局?jǐn)?shù)組transient Entry table[];中

由上面可知遍歷HashMap至少有四種方法。1)集合通用方法value=iterator.next。2)map常規(guī)方法value=map.get(key).3)遍歷entrySet集合。value=map.entrySet.getValue().4)遍歷values集合value=map.values...

HashMap和Hashtable的關(guān)系,可以類比HashSet跟Vector.Hashtable是一個(gè)古老的,線程安全的集合。

HashMap跟HashSet判斷元素是否相等的標(biāo)準(zhǔn)一樣,都是需要同時(shí)滿足equals為true,且元素hashCode值相等才認(rèn)為是相同元素。equals為true但hashCode不相等的兩個(gè)元素可以存入map中,但是不能正常工作;equals為false但hashCode相等會(huì)認(rèn)為是不同元素,存放在同一個(gè)地方,用鏈表關(guān)聯(lián)value,性能低。

LinkedHashMap跟linkedHashSet一樣,也用(雙向)鏈表維護(hù)元素的插入順序(key順序)。

以上三個(gè)練習(xí)題實(shí)現(xiàn)代碼如下

package?test;

import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.util.ArrayList;
import?java.util.HashMap;
import?java.util.HashSet;
import?java.util.Iterator;
import?java.util.LinkedHashSet;
import?java.util.LinkedList;
import?java.util.List;
import?java.util.Map;
import?java.util.Set;
import?java.util.TreeSet;

class?A?{
????public?int?count;
????public?A(int?count)?{
????????this.count?=?count;
????}

????public?boolean?equals(Object?obj){
????????if?(this?==?obj)?{
????????????return?true;
????????}
????????if?(obj?!=?null?&&?obj.getClass()?==?A.class)?{
????????????A?r?=?(A)obj;
????????????return?r.count?==?this.count;
????????}
????????return?false;
????}

????public?int?hashCode()?{
????????return?this.count;
????}

????public?String?toString()?{
????????return?this.count+"";
????}

}
public?class?TestCollection?{
????//練習(xí)一:創(chuàng)建一個(gè)Set集合,保存用戶輸入的數(shù)據(jù)
????public?static?void?testSet()?throws?Exception?{
????????/*
?????????*?LinkdedHashSet可以保持插入順序
?????????*?Set?set?=?new?LinkedHashSet();
?????????*/

????????/*
?????????*?TreeSet需要實(shí)現(xiàn)排序規(guī)則,自然排序的元素是要元素實(shí)現(xiàn)Comparable接口,定制排序是要集合關(guān)聯(lián)Comparator對(duì)象
?????????*?Set?set?=?new?TreeSet();
?????????*/

????????//HashSet無(wú)序,不重復(fù)
????????Set?set?=?new?HashSet();
????????int?keyIn;
????????int?num?=?0;

????????while?(?num++?<?2)?{
????????????/*
?????????????*?Scanner可以方便將鍵盤輸入轉(zhuǎn)換成各種類型
?????????????*?Scanner?sc?=?new?Scanner(System.in);
?????????????*?keyIn?=?sc.nextInt();
?????????????*/

????????????/*
?????????????*?BufferedReader的readLine()方法可以讀取一行,可以適應(yīng)各種平臺(tái)的斷行規(guī)則
?????????????*?但是BufferedReader只能讀取stream類型,System.in只能返回byte類型,因此需要用InputStreamReader做轉(zhuǎn)換
?????????????*/
????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(System.in));
????????????keyIn?=?Integer.parseInt(br.readLine());
????????????set.add(new?A(keyIn));
????????}
????????System.out.println(set);
????}
????//練習(xí)二
????public?static?void?testList()?{
????????List?list?=?new?LinkedList();
????????//List?list?=?new?ArrayList();
????????for?(int?i=0;?i<10;?i++)?{
????????????list.add(new?A(i));
????????}
????????list.add(new?A(5));
????????System.out.println(list);
????????System.out.println(list.get(5));
????????//這里雖然用的是new?A(6),但是在list中仍然可以找到這個(gè)元素,原因是在上面的class?A中重寫了equal和hashCode方法
????????System.out.println(list.indexOf(new?A(6)));
????????System.out.println(list.remove(3));
????????System.out.println(list);
????}
????//練習(xí)三
????public?static?void?testMap()?{
????????String[]?str?=?new?String[]?{"a","b","a","b","c","a","b","c"};
????????Map?map?=?new?HashMap();
????????Set?set?=?new?LinkedHashSet();
????????for?(int?i?=?0;?i?<?str.length;?i++)?{
????????????set.add(str[i]);
????????}

????????String?key;
????????Iterator?it?=?set.iterator();
????????while?(it.hasNext())?{
????????????int?val?=?0;
????????????key?=?(String)it.next();
????????????for?(int?i?=?0;?i?<?str.length;?i++)?{
????????????????if?(str[i]?==?key)?val++;
????????????}
????????????map.put(key,?val);
????????}

????????System.out.println(map);
????}

????public?static?void?main(String[]?args)?throws?Exception?{
????????//TestCollection.testSet();
????????TestCollection.testList();
????????//TestCollection.testMap();
????}
}

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“經(jīng)典Java基礎(chǔ)知識(shí)練習(xí)題”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 精品乱人伦一区二区三区 | 综合热久久| 老司机午夜视频在线观看 | 最新国产三级久久 | 欧美高清免费精品国产自 | 欧美日韩不卡视频 | 久久艹在线 | 亚洲国产色综合有声小说 | 国产日产欧美精品一区二区三区 | 一级日本强免费 | 成人青草亚洲国产 | 超高清欧美videos360 | a毛片免费全部在线播放毛 a毛片免费在线观看 | 一本色道久久88加勒比—综合 | 在线观看黄色网 | 婷婷在线视频观看 | 综合网伊人 | 国产成人高清在线观看播放 | 欧美一区二区三区在线可观看 | 久草视频免费在线播放 | 97色老99久久九九爱精品 | 国产免费三a在线 | 国产视频a | 99热精品6 | 亚洲国产一成人久久精品 | 日韩专区亚洲国产精品 | 欧美日本在线一区二区三区 | 亚洲精品国产成人99久久 | 国产高清国内精品福利 | 亚洲国产一区二区三区 | 欧美在线91 | 欧美日韩国产成人综合在线影院 | 99国产精品欧美久久久久久影院 | 国产精品一区久久 | 日韩香蕉视频 | 99在线视频精品 | 一级毛片在线播放免费 | 日韩中文字幕在线不卡 | 亚洲加勒比久久88色综合1 | 伊人狼人视频 | 99国产福利视频在线观看 |