JAVA基礎(五)

集合的由來?

面向?qū)ο笳Z言對事務的體現(xiàn)都是以對象的形式,所以為了方便對多個對象的操作款票,JAVA就提供了集合類

集合和數(shù)組的區(qū)別?

數(shù)組 集合
長度固定 長度可變
存儲基本數(shù)據(jù)類型 只可以存儲對象

Collection集合的功能概述?

Collection表示一組對象控硼,這些對象也成為collection元素。
一些collection允許有重復的元素徽职,另一些不允許有重復的元素象颖。
一些collection是有序的,另一些是無序的姆钉。

Collection集合存儲字符串并遍歷?(迭代器)

public static void collectiontest() {
Collection<String> col=new ArrayList();
col.add("eee");
col.add("cvv");
col.add("nvj");
Iterator it = col.iterator(); //迭代器
while(it.hasNext()) {
String s =(String) it.next();
System.out.println(s);
}

Collection集合存儲自定義對象并遍歷?(迭代器)

public static class Person{
        private String name;

        public Person() {
            super();
        }
        public Person(String name) {
            super();
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Collection c=new ArrayList();
        Person p1=new Person("呵呵噠");
        Person p2=new Person("萌萌噠");
        c.add(p1);
        c.add(p2);
        Iterator It=c.iterator();
        while(It.hasNext()) {
            Person s=(Person)It.next();
            System.out.println(s.getName());
        }

List集合的特有功能?

List是有序的collection说订。可以對列表中每個元素的插入位置進行精確地控制潮瓶。用戶可以根據(jù)元素的證書索引訪問元素陶冷,并搜索列表中的元素。

List接口成員方法

void add(int index,E element)//添加元素
E remove(int index)//刪除元素
E get(int index)//獲得元素
E set(int index,E element)//修改元素
ListIterator listIterator()//迭代器
boolean hasPrevious()//ListIterator的方法毯辅,用于反向遍歷鏈表,與hasNaxt()方法相同
E previous()//ListIterator的方法埂伦,用于反向遍歷鏈表,與next()方法相同返回越過的對象
ConcurrentModificationException//在每個迭代器的方法開始處檢查自己改寫操作的計數(shù)值是否與集合的改寫操作計數(shù)值一致思恐;如果不一致沾谜,拋出ConcurrentModificationException

List集合存儲字符串并遍歷?(迭代器和普通for)

public static void ListTest() {
    List list=new ArrayList();
    list.add("呵呵呵");
    list.add("好累啊");
    list.add("努力吧");
    for(int i=0;i<list.size();i++) {
        System.out.println("這是for循環(huán)的:"+list.get(i));
    }
    ListIterator litor=list.listIterator();
    while(litor.hasNext()) {
        String s=(String)litor.next();
        System.out.println("這是ListIterator的:"+s);
    }
}

并發(fā)修改異常出現(xiàn)的原因?解決方案?

A: 出現(xiàn)的現(xiàn)象
迭代器遍歷集合,集合修改集合元素
B: 原因
迭代器是依賴于集合的胀莹,而集合的改變迭代器并不知道基跑。
C: 解決方案
a:迭代器遍歷,迭代器修改(ListIterator)
元素添加在剛才迭代的位置
b:集合遍歷描焰,集合修改(size()和get())
元素添加在集合的末尾

常見的數(shù)據(jù)結構的特點?

棧:Stack<T> 后進先出媳否。
隊列:Queue<T> 先進先出。隊列在聲明的時候可以是泛型荆秦。
數(shù)組:只合適查詢比較頻繁篱竭,增刪較少的情況,對于int類型數(shù)據(jù)步绸,默認初始值為1;
鏈表:單鏈表和雙鏈表掺逼,LinkedList list=new LinkedList(),出了頭結點,每個節(jié)點包含一個數(shù)據(jù)域和一個指針域靡努,除了頭坪圾、尾節(jié)點晓折,每個節(jié)點的指針指向下一個節(jié)點惑朦。

List集合的子類特點

ArrayList:底層數(shù)據(jù)結構是數(shù)組兽泄,查詢快,增刪慢漾月。線程不安全病梢,效率高。
Vector:底層數(shù)據(jù)結構是數(shù)組梁肿,查詢快蜓陌,增刪慢。線程安全吩蔑,效率低钮热。特有addElement(E obj),E elementAt(int index),Enumeration element()三種方法。
LinkedList:底層數(shù)據(jù)結構是鏈表烛芬,查詢慢隧期,增刪快,線程不安全赘娄,效率高仆潮。特有addFirst(E e)、addLast(E e),getFirst()遣臼、getLast(),removeFirst()性置、removeLast() 6中方法。

LinkedList練習

A:LinkedList存儲字符串并遍歷
B:LinkedList存儲自定義對象并遍歷

public static void main(String[] args) {
    // TODO Auto-generated method stub
    LinkedList<String> lt=new LinkedList<String>();
    lt.add("String");
    lt.add("interstring");
    Oo oo=new Oo("不好玩","找工作好累");
    lt.add(oo.getIi());
    lt.add(oo.getMm());
    for(int i=0;i<lt.size();i++) {
        System.out.println(lt.get(i));
    }

}

泛型是什么?格式是?好處是?

  • 泛型是一種特殊的類型揍堰,它把指定類型的工作推遲到客戶端代碼聲明并實例化類或方法的時候進行鹏浅。
    也被稱作為參數(shù)化類型,可以把類型當作參數(shù)一樣傳遞過來屏歹,在傳遞過來之前并不明確隐砸,但在使用的時候就變得明確。

  • 格式:

  1. 泛型類
    public class 類名<泛型類型,……>
  2. 泛型方法
    public<泛型類型>返回類型 方法名(泛型類型)
  3. 泛型接口
    public interface 接口名<泛型類型1……>
  • 好處:
  1. 提高了程序的安全性
  2. 將運行期遇到的問題轉(zhuǎn)移到了編譯期
  3. 省去了類型強轉(zhuǎn)的麻煩

增強for的格式是?好處是?弊端是?

  • 作用:簡化數(shù)組和Collection集合的遍歷
  • 格式:
    for(元素類型變量 變量:數(shù)組或者Collection集合){
    使用變量即可西采,該變量就是元素
    }
  • 好處:簡化遍歷
  • 弊端:增強for的目標要判斷是否為null

靜態(tài)導入的格式是?注意事項是?

  • 格式:improt static 包名……類名.方法名;
  • 注意事項:
    方法必須是靜態(tài)
    如果有多個同名的靜態(tài)方法凰萨,必須加前綴

可變參數(shù)的作用是?格式是?注意事項是?

  • 作用:
    定義方法時候不知道該定義多少個參數(shù)
  • 格式:
    修飾符 返回值類型 方法名(數(shù)據(jù)類型…… 變量名){}
  • 注意事項:
    這里的變量其實是一個數(shù)組。
    如果一個方法有可變參數(shù)械馆,并且有多個參數(shù)胖眷,那么可變參數(shù)肯定是最后一個

用下列集合完成代碼

Collection
List
ArrayList
Vector
LinkedList

存儲字符串并遍歷
存儲自定義對象并遍歷

要求加入泛型,并有增強for遍歷霹崎。
public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedList<String> lt=new LinkedList<String>();
        Collection<String> l1=new ArrayList<String>();
        ArrayList<String> l2=new ArrayList<String>();
        Vector<String> l3=new Vector<String>();
        lt.add("String");
        lt.add("interstring");
        Oo oo=new Oo("不好玩","找工作好累");
        lt.add(oo.getIi());
        lt.add(oo.getMm());
        for(String s:lt) {
            System.out.println("LinkedList:"+s);
        }
        l1.addAll(lt);
        for(String s:l1) {
            System.out.println("Collection:"+s);
        }
        l2.addAll(l1);
        for(String s:l2) {
            System.out.println("ArrayList:"+s);
        }
        l3.addAll(l2);
        for(String s:l3) {
            System.out.println("LinkedLis:"+s);
        }
        
    }   
class Oo{
    public Oo(String ii, String mm) {
        super();
        this.ii = ii;
        this.mm = mm;
    }
    public String getIi() {
        return ii;
    }
    public void setIi(String ii) {
        this.ii = ii;
    }
    public String getMm() {
        return mm;
    }
    public void setMm(String mm) {
        this.mm = mm;
    }
    private String ii;
    private String mm;
}

Set接口

一個不包含重復元素的collection

HasSet類

不保證set的迭代順序珊搀,特別是它不保證該順序恒久不變。
底層數(shù)據(jù)結構是哈希表尾菇,元素是鏈表的數(shù)組境析。哈希表依賴于哈希值存儲囚枪。

LinkedHashSet類

元素有序唯一,由鏈表保證元素有序劳淆,由哈希表保證元素唯一链沼。

TreeSet

使用元素的自然順序?qū)υ剡M行排序,或者根據(jù)創(chuàng)建set時提供的Comparator進行排序沛鸵,
底層數(shù)據(jù)結構是紅黑樹

編寫一個程序括勺,獲取10個1至20的隨機數(shù),要求隨機數(shù)不能重復曲掰。

Random r=new Random();
        int h;
        TreeSet<Integer> tst=new TreeSet<Integer>();
        for(int i=0;tst.size()<10;i++) {
            h=r.nextInt(20);
                tst.add(h);//TreeSet不允許重復元素疾捍,所有不需要判斷重復
        }
        for(Integer m:tst) {
            System.out.println(m);
        }

什么是異常

異常就是Java程序在運行過程中出現(xiàn)的錯誤   

異常的分類

異常分為三類
  • Error //編譯時異常,運行時候可以不顯示處理
  • Exception //編譯時異常
  • RuntimeExeption //所有RuntimeExeption都成為運行時異常栏妖,必須顯示處理

如何處理異常

  • JVM默認把異常的名稱乱豆,錯誤原因以及一場出現(xiàn)的位置等信息輸出在控制臺

  • 程序停止運行

  • 異常的進行過程:
    列如:jvm發(fā)現(xiàn)運算是已經(jīng)違反了數(shù)學運算規(guī)則,java將這種常見的問題進行描述,并封裝成了對象叫做ArithmeticException
    當除0運算發(fā)生后,jvm將該問題打包成了一個異常對象.
    并將對象拋給調(diào)用者main函數(shù),new ArithmeticException("/by zero");

    main函數(shù)收到這個問題時,有兩種處理方式:
    1,自己將該問題處理,然后繼續(xù)運行
    2,自己沒有針對的處理方式,只有交給調(diào)用main的jvm來處理
    jvm有一個默認的異常處理機制,就將該異常進行處理.并將該異常的名稱,異常的信息.異常出現(xiàn)的位置打印在了控制臺上
    同時將程序停止運行

  • 異常處理方案

  1. try……catch……finally
    其中try用于檢測異常,catch用于捕獲異常吊趾,finally使用結束資源

  2. throw宛裕、throws、Throwable

throw throws Throwable
只用在方法體內(nèi) 用在方法聲明后面趾徽,跟的是異常類名 它是接口
只能拋出一個異常對象名 可以跟多個異常類名 getMessage()獲取異常信息续滋,返回字符串
拋出異常由方法體內(nèi)的語句處理 拋出異常由方法調(diào)用者來處理 printStackTrace()獲取異常類名和異常信息,以及異常位置孵奶,返回void
執(zhí)行throw則一定拋出了某種異常 throws表示出現(xiàn)異常的一種可能性疲酌,不一定發(fā)生 printStackTrace(PrintStram s)通常保存在文檔中
  1. 當異常發(fā)生時候,后續(xù)程序需要執(zhí)行就用try了袁,不需要就用throws

編譯時期異常和運行時期異常的區(qū)別

編譯時期異常朗恳,JAVA程序必須顯示處理,否則程序會發(fā)生錯誤载绿。
運行時期異常粥诫,JAVA程序無需顯示處理,也可以和編譯時期異常一樣處理崭庸。

finally關鍵字的特點

被finally控制的語句體一定會執(zhí)行
特殊情況:在執(zhí)行到finally之前jvm退出了怀浆。
  • 作用:用于釋放資源,在IO流操作和數(shù)據(jù)庫操作中會見到

finally相關的面試題

final,finally和finalize的區(qū)別
final用于修飾類和變量怕享,修飾過的類不能被繼承执赡,修飾過的變量就變成個常量
finally是異常處理中使用的。用于不管初步出現(xiàn)異常都必須處理的事情函筋,列如關閉連接沙合。
finalize是方法名,是JAVA的垃圾清理機制跌帐,用于清理對象內(nèi)存首懈,在垃圾收集器刪除對象之前調(diào)用绊率。

如果catch里面有return語句,請問finally的代碼還會執(zhí)行嗎?如果會究履,請問是在return前還是return后滤否。
會執(zhí)行,在return之前

File的構造方法

Public File(String pathname)
Public File(String parent,String child)
Public File(File parent,String child)

File的成員方法

  • 創(chuàng)建功能
    public boolean createNewFile()
    public boolean mkdir()
    public boolean mkdirs()
  • 刪除功能
    public boolean delete()
  • 重命名功能
    public boolean renameTo(File dest)
  • 判斷功能
    public boolean isDirectory()
    public boolean isFile()
    public boolean exists()
    public boolean canRead()
    public boolean canWrite()
    public boolean isHidden()
  • 基本獲取功能
    public String getAbsolutePath()
    public String getPath()
    public String getName()
    public long length()
    public long lastModified()
  • 高級獲取功能
    public String[] list()
    public File[] listFiles()

獲取指定目錄下指定后綴名的文件名稱

判斷E盤目錄下是否有后綴名為.jpg的文件挎袜,如果有顽聂,就輸出此文件名稱
File file=new File("E:\\");
        String[] arr=file.list();
        for(String s:arr) {
            if(s.endsWith(".jpg")) {
                System.out.println(s);
            }
        }
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肥惭,一起剝皮案震驚了整個濱河市盯仪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜜葱,老刑警劉巖全景,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牵囤,居然都是意外死亡爸黄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門揭鳞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炕贵,“玉大人,你說我怎么就攤上這事野崇〕瓶” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵乓梨,是天一觀的道長鳖轰。 經(jīng)常有香客問我,道長扶镀,這世上最難降的妖魔是什么蕴侣? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮臭觉,結果婚禮上昆雀,老公的妹妹穿的比我還像新娘。我一直安慰自己蝠筑,他們只是感情好狞膘,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菱肖,像睡著了一般客冈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稳强,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天场仲,我揣著相機與錄音和悦,去河邊找鬼。 笑死渠缕,一個胖子當著我的面吹牛鸽素,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亦鳞,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼馍忽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了燕差?” 一聲冷哼從身側(cè)響起遭笋,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徒探,沒想到半個月后瓦呼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡测暗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年央串,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碗啄。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡质和,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稚字,到底是詐尸還是另有隱情饲宿,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布尉共,位于F島的核電站褒傅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袄友。R本人自食惡果不足惜殿托,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剧蚣。 院中可真熱鬧支竹,春花似錦、人聲如沸鸠按。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽目尖。三九已至馒吴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饮戳。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工豪治, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扯罐。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓负拟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歹河。 傳聞我的和親對象是個殘疾皇子掩浙,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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

  • 一、基礎知識:1秸歧、JVM厨姚、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,378評論 0 4
  • 在經(jīng)過一次沒有準備的面試后,發(fā)現(xiàn)自己雖然寫了兩年的android代碼寥茫,基礎知識卻忘的差不多了遣蚀。這是程序員的大忌,沒...
    猿來如癡閱讀 2,839評論 3 10
  • Set 接口 前面我們學了 List 集合纱耻。我們知道 List 是一個有序的集合,可以根據(jù)元素的整數(shù)索引訪問元素险耀,...
    Anonymous___閱讀 435評論 1 0
  • 冬夜弄喘,要睡覺啦。莽莽套在她的睡袋里甩牺,乖乖躺在我身邊蘑志。最近她喜歡跟我睡一個被窩,我只能等她睡熟后贬派,才好把她挪到自己...
    xunbeinini閱讀 232評論 0 0
  • 重新拾起讀書的日子 庭外風帶來消息 講你的離別急但,臉色平和 我猜想,你昔日的樣子 我再一次為你寫詩 我明白此后不再為...
    惜遲閱讀 137評論 0 2