java學習(二十五)

1、HashSet和TreeSet的區別

  • 實現方式

HashSet:HashSet是哈希表實現的。

TreeSet:TreeSet是二差樹實現的。

  • 數據是否有序

HashSet:HashSet中的數據是無序的。

TreeSet:Treeset中的數據是自動排好序的。

  • 是否可以放入null值

HashSet:可以放入null,但只能放入一個null。 

TreeSet:不允許放入null值。

2、死鎖例子。

public class DeadLock implements Runnable{
        public static Object obj1 = new Object();
        public static Object obj2 = new Object();
        //標誌位
        public int flag = 1;

        @Override
        public void run() {
            if(flag==1){
                synchronized (obj1){
                    System.out.println("flag: "+ flag + ", 鎖住了資源obj1");
                    try{
                        Thread.sleep(1000);
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                    System.out.println("flag: "+ flag + ", 等待獲取資源obj2");
                    synchronized (obj2){
                        System.out.println("flag:" + ", 獲得資源obj2");
                    }
                }
            }else if(flag==2){
                synchronized (obj2){
                    System.out.println("flag: "+ flag + ", 鎖住了資源obj2");
                    try{
                        Thread.sleep(1000);
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                    System.out.println("flag: "+ flag + ", 等待獲取資源obj1");
                    synchronized (obj1){
                        System.out.println("flag:" + ", 獲得資源obj1");
                    }
                }
            }
        }
    public static void main(String[] args) {
        DeadLock lock1 = new DeadLock();
        DeadLock lock2 = new DeadLock();
        lock1.flag=1;
        lock2.flag=2;

        new Thread(lock1).start();
        new Thread(lock2).start();
    }
}

3、HashMap和TreeMap的區別

HashMap:數組方式存儲key/value,線程非安全,允許null作爲key和value,key不可以重複,value允許重複,不保證元素迭代順序是按照插入時的順序,key的hash值是先計算key的hashcode值,然後再進行計算,每次容量擴容會重新計算所以key的hash值,會消耗資源,要求key必須重寫equals和hashcode方法

TreeMap:基於紅黑二叉樹的NavigableMap的實現,線程非安全,不允許null,key不可以重複,value允許重複,存入TreeMap的元素應當實現Comparable接口或者實現Comparator接口,會按照排序後的順序迭代元素,兩個相比較的key不得拋出classCastException。主要用於存入元素的時候對元素進行自動排序,迭代輸出的時候就按排序順序輸出

4、線程有幾種狀態?

線程通常都有五種狀態,創建、就緒、運行、阻塞和死亡。

5、異常

Exception又包含了運行時異常(RuntimeException, 又叫非檢查異常)和非運行時異常(又叫檢查異常)

  • Error是程序無法處理了, 如果OutOfMemoryError、StackOverFlowError等等, 這些異常發生時, java虛擬機一般會終止線程。
  • 運行時異常都是RuntimeException類及其子類,如 NullPointerException、IndexOutOfBoundsException、ClassNotFoundException、IllegalArgumentException等, 這些異常是不檢查的異常, 是在程序運行的時候可能會發生的, 所以程序可以捕捉, 也可以不捕捉. 這些錯誤一般是由程序的邏輯錯誤引起的, 程序應該從邏輯角度去儘量避免。
  • 檢查異常是運行時異常以外的異常, 也是Exception及其子類, 這些異常從程序的角度來說是必須經過捕捉檢查處理的, 否則不能通過編譯. 如IOException、SQLException等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章