類:1.java.lang.Object
2.java.lang.String
3.java.lang.System
4.java.io.file
5.java.io.FileInputStream
包:1.java.lang包
2.java.io包
3.java.swt包
4.java.util包
5.java.sql包
接口:1.java.util.List<E>
2.java.util.Map<E>
3.java.util.Iterator<E>
4.java.sql.CallableStatement
5.java.lang.Comparable<T>
數組和鏈表的區別:
數組結構:
數組結構在通過索引進行查詢數據時效率比較高,而對於數組插入和刪除操作,則效率會比較低,在第一個位置進行插入數據,其余數據就需要依次向后移動,而第一個數據進行刪除,則需要所有數據全部向前移,這樣的話,就會推出第二種結構,鏈表結構。
簡單的鏈表:為了保證數據插入和刪除,不會影響其他數據的移動,保證線性開銷,所以就引出了鏈接。每個表都不會連續進行存儲。
鏈表是由一系列節點組成的,每個節點都會有一個鏈點,這就是next鏈,而next鏈則會執行下一個node的引用,所以我們在插入或者刪除的時候,需要該表鏈表next鏈的指向地址即可,每個節點不需要內存進行連續存儲,這樣會減小刪除和插入的線性開銷。
鏈表結構主要分為兩種鏈表,單向鏈表和雙向鏈表 ,即單向鏈表只有一個next鏈,而雙向鏈表會有next鏈和pre鏈。
實現ArrayList:(ArrayList其實是對數組的動態擴充)
package com.baoqiang.list;
import java.util.Iterator;
public class MyArrayList<E> implements Iterable<E>{
private static final int DEFAULT_CAPACITY = 10;
private int theSize;
private E[] theItems;
public E set(int index, E newVal){
if(index < 0 || index >= size()){
throw new ArrayIndexOutOfBoundsException();
}
E old = theItems[index];
theItems[index] = newVal;
return old;
}
public E get(int index){
if(index <0 || index >= size()){
throw new ArrayIndexOutOfBoundsException();
}
return theItems[index];
}
public boolean isEmpty(){
return size() == 0;
}
public void trimToSize(){
ensureCapacity(theSize);
}
public void clear(){
theSize = 0;
theItems = (E[]) new Object[DEFAULT_CAPACITY];
}
public void ensureCapacity(int newCapacity){
if(newCapacity < theSize){
return;
}
E[] old = theItems;
theItems = (E[]) new Object[newCapacity];
for(int i=0; i<size(); i++){
theItems[i] = old[i];
}
}
public int size(){
return theSize;
}
public void add(E newVal){
add(size(),newVal);
}
public void add(int index,E newVal){
if(theItems.length == size()){
ensureCapacity(size()*2+1);
}
for(int i=theSize; i>index; i--){
theItems[i] = theItems[i-1];
}
theItems[index] = newVal;
theSize ++;
}
public E remove(int index){
E old = theItems[index];
for(int i=index;i<size();i++){
theItems[index] = theItems[index+1];
}
theSize--;
return old;
}
public Iterator<E> iterator() {
return new Iterator<E>(){
private int current = 0;
public boolean hasNext() {
return current < size();
}
public E next() {
if(!hasNext()){
throw new java.util.NoSuchElementException();
}
return theItems[current++];
}
public void remove() {
MyArrayList.this.remove(--current);
}
};
}
}
java中常用的數據結構:
數據結構:
①數組 (Array)
在程序設計中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數
據元素的集合稱為數組。在C語言中, 數組屬於構造數據類型。一個數組可以分解為多個數組元素,這些數組
元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分為數值數組、字符數組、指
針數組、結構數組等各種類別。
②棧 (Stack)
棧是只能在某一端插入和刪除的特殊線性表。它按照先進后出的原則存儲數據,先進入的數據被壓入棧底,最后
的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最后一個數據被第一個讀出來)。
③隊列 (Queue)
一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作。進行
插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列中沒有元素時,稱為空隊列。
④鏈表 (Linked List)
一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。
鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:
一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。
⑤樹 (Tree)
樹是包含n(n>0)個結點的有窮集合K,且在K中定義了一個關系N,N滿足 以下條件:
(1)有且僅有一個結點 k0,他對於關系N來說沒有前驅,稱K0為樹的根結點。簡稱為根(root)
(2)除K0外,k中的每個結點,對於關系N來說有且僅有一個前驅。
(3)K中各結點,對關系N來說可以有m個后繼(m>=0)。
⑥堆 (Heap)
在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指
二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。
⑦圖 (Graph)
圖是由結點的有窮集合V和邊的集合E組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,
邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關系。
⑧散列表 (Hash)
若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱
這個對應關系f為散列函數(Hash function),按這個思想建立的表為散列表。
