Java散亂(二衬横、集合,泛型终蒂,IO)

集合

Collection接口

  • Set接口(元素?zé)o序蜂林,不可重復(fù)的集合,無(wú)序性:針對(duì)的是元素在底層存儲(chǔ)的位置是無(wú)序的)

set存儲(chǔ)自定義類(lèi)拇泣,一定要重寫(xiě)equals()和hashcode()方法噪叙,當(dāng)向set中添加對(duì)象時(shí),首先調(diào)用此對(duì)象所在類(lèi)的hashCode()方法挫酿,計(jì)算此對(duì)象的哈希值构眯,此哈希值決定了此對(duì)象的set中的存儲(chǔ)位置。若此位置之前沒(méi)有對(duì)象存儲(chǔ)早龟,則這個(gè)對(duì)象直接存儲(chǔ)到此位置惫霸,若此位置已有對(duì)象存儲(chǔ),再通過(guò)equals()比較兩個(gè)對(duì)象是否相同,如果相同葱弟,后一個(gè)對(duì)象就不能再添加進(jìn)來(lái)壹店。

  • HashSet

    時(shí)HashMap的一個(gè)特別的實(shí)現(xiàn)

  • LinkedHashSet

    使用鏈表維護(hù)了一個(gè)添加進(jìn)集合中的順序,遍歷集合元素是芝加,是按照添加時(shí)的順序遍歷的硅卢。插入性能略低于HashSet,但是在迭代訪問(wèn)Set里面的全部元素時(shí)有很好的性能。

  • TreeSet
    • 添加的元素必須時(shí)同一個(gè)類(lèi)的(其他例如,list,HashSet等都是可以添加任意類(lèi)型的)
    • 可以按照添加進(jìn)集合的元素的指定的順序遍歷藏杖,例如String将塑,包裝類(lèi)等默認(rèn)按照從小到大的順序遍歷。
    • 當(dāng)自定義類(lèi)沒(méi)有實(shí)現(xiàn)Comparable接口時(shí)蝌麸,當(dāng)向TreeSet添加該類(lèi)對(duì)應(yīng)的對(duì)象時(shí)候点寥,會(huì)報(bào)錯(cuò),因?yàn)槔捶裕琓reeSet存儲(chǔ)必須有個(gè)順序,這個(gè)順序計(jì)算規(guī)則就是實(shí)現(xiàn)Comparable接口后敢辩,重寫(xiě)的compareTo()方法
  • List接口(元素有序,可重復(fù)的集合)
    • ArrayList

      底層是數(shù)據(jù)弟疆,增刪慢戚长,查找快
      - LinkedList
      > 底層是鏈表,增刪快怠苔,查找慢
      - Vector
      > 是線程安全的

Map接口(鍵值對(duì)集合)

  • HashMap:遍歷順序和添加順序不見(jiàn)得相同(可以null鍵和值)
  • LinkedHashMap:使用鏈表維護(hù)添加的順序,保證遍歷順序和添加順序相同
  • TreeMap:按照添加進(jìn)Map中的元素key的指定屬性進(jìn)行排序,key必須時(shí)同一個(gè)類(lèi)的對(duì)象
  • HashTable:線程安全(不可以null鍵和值)
  • Properties:常用來(lái)處理屬性文件,鍵和值都為String類(lèi)型(例如:jdbc.properties文件)

Collections工具類(lèi)(操作Map和Collection)

  • 排序操作(均為static方法)
    • reverse(List):反轉(zhuǎn)List中元素的順序
    • shuffle(List):對(duì)List集合元素進(jìn)行隨機(jī)排序
    • sort(List):根據(jù)元素的自然順序?qū)χ付ǖ腖ist集合按照升序排序
      -swap(List,int i,int j):將指定的List集合中的i處元素和j處元素互換
  • 查找 替換
    • Object max(Collection):根據(jù)元素的自然順序,返回給定集合中的最大元素
    • Object max(Collection,Comparator):根據(jù)Comparator指定的順序,返回給定集合中的最大元素
    • 類(lèi)似的有Object min(Collection)/Object min(Collection,Comparator)
    • int frequency(Collection,Object):返回指定集合中指定元素出現(xiàn)的次數(shù)
    • void copy(List dest,List src):將src內(nèi)容復(fù)制到dest
    • boolean replaceAll(List list,Object oldval,Object newval):使用新值替換list對(duì)象的所有舊值.
  • Collections類(lèi)中提供了多個(gè)synchronizedXXX()方法,該方法可使將指定集合包裝成線程同步的集合,從而解決線程安全問(wèn)題

    例如:Collections.syncchronizedList(list)

泛型

解決元素存儲(chǔ)的安全性問(wèn)題(任何類(lèi)型都可以添加到集合中同廉,類(lèi)型不安全)
解決獲取數(shù)據(jù)元素時(shí),需要類(lèi)型強(qiáng)制轉(zhuǎn)換的問(wèn)題

注解Annotation

  • JDK內(nèi)置的基本注解類(lèi)型(3個(gè))
    • Override:限定重寫(xiě)父類(lèi)方法,該注釋只能用于
    • Deprecated:用于表示某個(gè)程序元素(類(lèi)恤溶,方法等)已過(guò)時(shí)
    • SupperessWarnings:抑制編譯器警告
  • 其他還有自定義注解和元注解乓诽,不常用

File

  • File的API
File f=new File("E.java");
File f1=new File("C:/Users/Administrator/Desktop/C.java");
boolean flag=f.renameTo(f1);
說(shuō)明:修改文件名,其實(shí)時(shí)剪切文件并改名咒程,要求:f必須存在而f1必須不存在
  • 文件流
    • 字節(jié)流
    • FileInputStream
    • FileOutputStream
    • 字符流
    • FileReader
    • FileWriter
  • 緩沖流
    • BufferedInputStream
    • BufferedOutputStream(寫(xiě)完之后要加上flush())
    • BufferedReader(除了通用的read()之外還有readLine())
    • BufferedWriter(寫(xiě)完之后要加上flush())

    如果針對(duì)兩個(gè)輸出的緩沖流不手動(dòng)flush鸠天,則在緩沖區(qū)滿了之后會(huì)自動(dòng)刷到文件中,但是此時(shí)總會(huì)在遺失最后一次的緩沖區(qū)未滿的內(nèi)容帐姻。所以每次讀取都要手動(dòng)調(diào)用flush()

  • 轉(zhuǎn)換流(字節(jié)流和字符流之間的相互轉(zhuǎn)換)

字節(jié)流中數(shù)據(jù)都是字符時(shí)稠集,轉(zhuǎn)成字符流操作更高效
- InputStreamReader
- OutputStreamWriter

  • 打印流(可以打印到對(duì)應(yīng)文件中)
    • PrintStream 字節(jié)流
    • PrintWriter 字符流
  • 數(shù)據(jù)流

為了方便操作基本數(shù)據(jù)類(lèi)型的數(shù)據(jù)(讀寫(xiě)),套接在InputStream和OutputStream上
- DataInputStream
- DataOutputStream

  • 對(duì)象流(涉及序列化反序列化)
    • ObjectInputStream

      反序列化:用ObjectInputStream類(lèi)從IO流中恢復(fù)該java對(duì)象
      - ObjectOutputStream
      > 序列化:用ObjectOutputStream類(lèi)將一個(gè)java對(duì)象寫(xiě)入IO流中

  • 隨機(jī)存取文件流

程序可以直接跳到文件的任意地方來(lái)讀饥瓷、寫(xiě)文件

  • RandomAccessFile
  • long getFilePointer():獲取文件記錄指針的當(dāng)前位置
  • void seek(long pos):將文件記錄指針定位到pos位置
  • 構(gòu)造器
  • public RandomAccessFile(File file,String mode)
  • public RandomAccessFile(String name,String mode)

r:只讀方式打開(kāi)剥纷,rw:打開(kāi)以便讀取和寫(xiě)入(是使用buffer的,只有cache滿的或者使用RandomAccessFile.close()關(guān)閉流的時(shí)候兒才真正的寫(xiě)到文件),rwd:打開(kāi)以便讀取和寫(xiě)入呢铆,同步文件內(nèi)容的更新(每個(gè)更新都會(huì)同步)晦鞋,rws:打開(kāi)以便讀取和寫(xiě)入,同步文件內(nèi)容和元數(shù)據(jù)的更新。
readline:讀取的內(nèi)容會(huì)忽略換行符

換行符消失問(wèn)題棺克,原內(nèi)容圖一悠垛,執(zhí)行后內(nèi)容圖二
File f1=new File("a.txt");
    RandomAccessFile ra=null;
    try {
        ra=new RandomAccessFile(f1, "rw");
        ra.seek(10);
        ra.write("csabcahc".getBytes());
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        if(ra!=null){
            try {
                ra.close();
            } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
說(shuō)明:因?yàn)镽andomAccessFile寫(xiě)內(nèi)容其實(shí)是覆蓋而不是插入,seek之后娜谊,第一行寫(xiě)入了"csabcahc"
這些字符确买,自動(dòng)會(huì)向后,會(huì)覆蓋掉本來(lái)第一行的換行符纱皆,導(dǎo)致第二行擠上來(lái)湾趾。
解決方案:使用字符讀取的方式,先讀取seek之后的內(nèi)容(可以用StringBuffer存儲(chǔ))派草,然后寫(xiě)"csabcahc"搀缠,然后把讀取的內(nèi)容在從sb中在寫(xiě)入到文件中(之所以不用readline,是因?yàn)闀?huì)忽略換行符近迁,而sb作用就是可以保留換行符)胡嘿。
圖一.png
圖二.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市钳踊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勿侯,老刑警劉巖拓瞪,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異助琐,居然都是意外死亡祭埂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛆橡,“玉大人舌界,你說(shuō)我怎么就攤上這事√┭荩” “怎么了呻拌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)睦焕。 經(jīng)常有香客問(wèn)我藐握,道長(zhǎng),這世上最難降的妖魔是什么垃喊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任猾普,我火速辦了婚禮,結(jié)果婚禮上本谜,老公的妹妹穿的比我還像新娘初家。我一直安慰自己,他們只是感情好乌助,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布溜在。 她就那樣靜靜地躺著,像睡著了一般眷茁。 火紅的嫁衣襯著肌膚如雪炕泳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天上祈,我揣著相機(jī)與錄音培遵,去河邊找鬼。 笑死登刺,一個(gè)胖子當(dāng)著我的面吹牛籽腕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纸俭,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼皇耗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了揍很?” 一聲冷哼從身側(cè)響起郎楼,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窒悔,沒(méi)想到半個(gè)月后呜袁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡简珠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年阶界,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膘融,死狀恐怖芙粱,靈堂內(nèi)的尸體忽然破棺而出祸轮,到底是詐尸還是另有隱情唉锌,我是刑警寧澤厂僧,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布儡毕,位于F島的核電站颂跨,受9級(jí)特大地震影響跨释,放射性物質(zhì)發(fā)生泄漏官地。R本人自食惡果不足惜缔俄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一疗绣、第九天 我趴在偏房一處隱蔽的房頂上張望线召。 院中可真熱鬧,春花似錦多矮、人聲如沸缓淹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讯壶。三九已至,卻和暖如春湾盗,著一層夾襖步出監(jiān)牢的瞬間伏蚊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工格粪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躏吊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓帐萎,卻偏偏與公主長(zhǎng)得像比伏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疆导,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一赁项、基礎(chǔ)知識(shí):1、JVM澈段、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,379評(píng)論 0 4
  • 一败富、集合入門(mén)總結(jié) 集合框架: Java中的集合框架大類(lèi)可分為Collection和Map悔醋;兩者的區(qū)別: 1、Col...
    程序員歐陽(yáng)閱讀 11,560評(píng)論 2 61
  • Java集合類(lèi)可用于存儲(chǔ)數(shù)量不等的對(duì)象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊(duì)列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,942評(píng)論 0 13
  • mongodb命令行操作 開(kāi)啟mongodb假設(shè)希望a文件夾是存放數(shù)據(jù)庫(kù)的地方a文件夾下面新建一個(gè)存放數(shù)據(jù)的文件夾...
    親愛(ài)的孟良閱讀 352評(píng)論 0 0
  • 上一章 下一章 首頁(yè) 靜飛說(shuō)囤耳,紹峰一定有他的苦衷。紹峰是很愛(ài)她的,就像她愛(ài)紹峰一樣充择。雖然他倆在一起的時(shí)間有限德玫,...
    GentleC閱讀 228評(píng)論 0 1