java基礎總結3

程序,進程,線程

程序:Program,是一個指令的集合

進程:Process,(正在執行中的程序)是一個靜態的概念

進程是程序的一次靜態態執行過程, 佔用特定的地址空間.

每個進程都是獨立的,由3部分組成cpu,data,code

缺點:內存的浪費,cpu的負擔

線程:是進程中一個“單一的連續控制流程”  (a single sThread,equential flow of control)/執行路徑

線程又被稱爲輕量級進程(lightweight process)

Threads run at the same time, independently of one another

一個進程可擁有多個並行的(concurrent)線程

一個進程中的線程共享相同的內存單元/內存地址空間à可以訪問相同的變量和對象,而且它們從同一堆中分配對象à通信、數據交換、同步操作

由於線程間的通信是在同一地址空間上進行的,所以不需要額外的通信機制,這就使得通信更簡便而且信息傳遞的速度也更快。

一個進程中至少有一個線程

 

ThreadRunnable

繼承Thread類方式的缺點:那就是如果我們的類已經從一個類繼承(如小程序必須繼承自 Applet 類),則無法再繼承 Thread

通過Runnable接口實現多線程

優點:可以同時實現繼承。實現Runnable接口方式要通用一些。

1)避免單繼承

2)方便共享資源 同一份資源 多個代理訪問

 

對象流 ObjectinputstreamObjectOutputstream

1、類必須實現Serializable接口

2、給類加個序列化編號,給類定義一個標記,     

      新的修改後的類還可以操作曾經序列化的對象

3、靜態是不能被序列化的,

     序列化只能對堆中的進行序列化 ,不能對“方

     法區”中的進行序列化

4、不需要序列化的字段前加 transient

 

Java流的分類

1

 

2

 

 

3功能不同

節點流:可以直接從數據源或目的地讀寫數據。

處理流(包裝流):不直接連接到數據源或目的地,是其他流進行封裝。目的主要是簡化操作和提高性能。

節點流和處理流的關係

節點流處於io操作的第一線,所有操作必須通過他們進行

處理流可以對其他流進行處量(提高效率或操作靈活性)

 

各種流適用

文本文件的讀寫

FileInputStreamFileOutputStream讀寫文本文件

BufferedReaderBufferedWriter讀寫文本文件

 

二進制文件的讀寫

使用DataInputStreamDataOutputStream讀寫二進制文件以及基本數據類型數據的讀寫

 

對象的讀寫

  使用ObjectInputStreamObjectOutputStream讀寫對象(序列化與反序列化)

 

集合

Collection 接口存儲一組不唯一,無序的對象

List 接口存儲一組不唯一,有序(插入順序)的對象

Set 接口存儲一組唯一,無序的對象

Map接口存儲一組鍵值對象,提供keyvalue的映射

 

List接口的實現類

凡是可以操作索引的方法都是該體系特有方法

ArrayList實現了長度可變的數組,在內存中分配連續的空間。

優點:遍歷元素和隨機訪問元素的效率比較高

缺點:添加和刪除需要大量移動元素效率低,按照內容查詢效率低

 

LinkedList採用鏈表存儲方式。

優點:插入、刪除元素時效率比較高

缺點:遍歷和隨機訪問元素效率低下

 

 

Iterator 接口

可以使用Iterator遍歷的本質是什麼?

實現Iterable接口

所有實現了Collection接口的容器類都有一個iterator方法用以返回一個實現了Iterator接口的對象。

所有的集合類均未提供相應的遍歷方法,而是把遍歷交給迭代器完成。迭代器爲集合而生,專門實現集合遍歷

 

Iterator對象稱作迭代器,用以方便的實現對容器內元素的遍歷操作。

Iterator接口定義了3個方法:

boolean hasNext();  //判斷是否有元素沒有被遍歷

Object next();      //返回遊標當前位置的元素並將遊標移動到下一個位置

void remove();      //刪除遊標左面的元素,在執行完next之後該

                    //操作只能執行一次

 

Set接口

Set接口存儲一組唯一,無序的對象(存入和取出的順序不一定一致)

操作數據的方法與List類似,Set接口不存在get()方法

 

offerFirst(Object obj) offerLast(Object obj)

pollFirst() pollLast()

peekFirst() peekLast()

link.getFirst();  //將元素移除後再取元素

 

HashSet: 採用Hashtable哈希表存儲結構

優點:添加速度快,查詢速度快,刪除速度快

缺點:無序

LinkedHashSet  採用哈希表存儲結構,同時使用鏈表維護次序

有序(添加順序)

TreeSet 採用二叉樹(紅黑樹)的存儲結構

優點:有序(排序後的升序)查詢速度比List快(按照內容查詢)

缺點:查詢速度沒有HashSet

 

HashSet是如何保證元素的唯一性的呢?

 

:是通過元素的兩個方法,hashCodeequals方法來完成

如果元素的HashCode值相同,纔會判斷equals是否爲true

如果元素的hashCode值不同,不會調用equals方法

 

爲什麼需要泛型

解決數據類型操作不統一產生的異常

使用泛型可以更好的去保護數據類型

 

 

Map

特點key-value映射

HashMap Key無序 唯一(Set Value無序 不唯一(Collection)

LinkedHashMap 有序的HashMap 速度快

TreeMap 有序 速度沒有hash

問題:SetMap有關係嗎?

採用了相同的數據結構,只用於mapkey存儲數據,以上是Set

 

增 put(key,value)

遍歷 keySet() entrySet() values()

 

 

Collections工具類

CollectionsCollection不同,前者是集合的操作類,後者是集合接口

Collections提供的靜態方法

addAll():批量添加

sort():排序

binarySearch():二分查找

fill():替換

shuffle():隨機排序

reverse():逆續

 

集合和數組的比較

數組不是面向對象的,存在明顯的缺陷,集合彌補了數組的一些缺點,比數組更靈活更實用,可大大提高軟件的開發效率,而且不同的集合框架類可適用不同場合。具體如下:

1:數組能存放基本數據類型和對象,而集合類中只能存放對象。

2:數組容易固定無法動態改變,集合類容量動態改變。

3:數組無法判斷其中實際存有多少元素,length只告訴了數組的容量,而集合的size()可以確切知道元素的個數

4:集合有多種實現方式和不同適用場合,不像數組僅採用順序表方式

5:集合以類的形式存在,具有封裝、繼承、多態等類的特性,通過簡單的方法和屬性即可實現各種複雜操作,大大提高了軟件的開發效率。

 

CollectionCollections的區別

CollectionJava提供的集合接口,存儲一組不唯 一,無序的對象。它有兩個子接口ListSet

 

Java還有一個Collections類,專門用來操作集合類,它提供了一系列的靜態方法實現對各種集合的搜索、排序、線程安全化等操作。

 

ArrayListLinkedList的聯繫和區別

 

ArrayList實現了長度可變的數組,在內存中分配連續空間。遍歷元素和隨機訪問元素效率比較高。

 

 

 

LinkedList採用鏈表存儲方式。插入、刪除元素效率比較高

 

VectorArrayList的聯繫和區別

實現原理相同,功能相同,都是長度可變的數組結構,很多時候可以互用

兩者的主要區別如下

Vector是早期的JDK接口,ArrayList是替代Vector的新接口

Vector線程安全,ArrayList重速度輕安全,線程非安全

長度需要增長時,Vector默認增長一倍,ArrayList增長50% (1.5+1)

 

HashMapHashtable的聯繫和區別

實現原理相同,功能相同,底層都是哈希表結構,查詢速度快,在很多情況下可以互用

兩者的主要區別如下

Hashtable是早期的JDK提供的接口,HashMap是新版的JDK提供的接口

Hashtable繼承Dictionary類,HashMap實現Map接口

Hashtable是線程安全,HashMap線程非安全

Hashtable不允許null值,HashMap允許null

 

JDK1.5的新特性有哪些?

泛型

Foreach

自動拆/裝箱

枚舉

可變參數

靜態導入

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章