java的數據結構
① java的數據結構你用過哪些Map與Set的本質區別是什麼
java中常見的數據結構有:
數組
集合類——Collection(list(ArrayList,LinkedList),set(HashSet))
List 是鏈表(介面),是可以允許出現重復值的。它的具體實現類:ArrayList和LinkedList
set 是集合(介面),不允許出現重復值。它的具體實現類HashMap
ArrayList 實現鏈表的內部結構是用數組(Array)。查找高效,修改低效
LinkedList 實現鏈表的內部結構是鏈表(Linked)。查找低效,修改高效
set是集合(介面),不允許出現重復值
Iterator迭代器
簡介:java提供的迭代器介面進行java collection的遍歷。Iterator模式是用於遍歷類的標准訪問方法
所有的繼承Coollection的集合類子類,都有Iterator()方法用於反饋迭代器,程序額可以獲取這個迭代器對象對Collection對象中的元素進行遍歷。
鍵值對容器 ——Map
Map是一種把鍵對象和值對象進行關聯的容器
指出:像set一樣,一個Map容器中的鍵對象不允許重復,這是為了保證查找結果的一致性。
② Java的各種數據結構要掌握到什麼程度最好
Java的數據結構包括了Set,List,Stack, Queue, Map等。對這些數據結構要掌握到熟練應用可以滿足開發工作的需 ,了解這些數據結構的特點及應用場景,熟練常用操作(增加、刪除、修改、查詢獲取)就可以了,後面可以在工作中逐步加深理解
③ JAVA數據結構有哪幾種
JAVA數據結構有以下幾種:
1、List:
List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似於數組下 >標)來訪問List中的元素,這類似於Java的數組。
2、Vector:
基於數組(Array)的List,其實就是封裝了數組所不具備的一些功能方便我們使用,所以它難易避免數組的限制,同時性能也不可能超越數組。
另外很重要的一點就是Vector是線程同步的(sychronized)的,這也是Vector和ArrayList 的一個的重要區別。
3、ArrayList:
同Vector一樣是一個基於數組上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是當運行到多線程環境中時,可需要自己在管理線程的同步問題。
4、LinkedList:
LinkedList不同於前面兩種List,它不是基於數組的,所以不受數組性能的限制。 它每一個節點(Node)都包含兩方面的內容:節點本身的數據(data),下一個節點的信息(nextNode)。
所以當對LinkedList做添加,刪除動作的時候就不用像基於數組的ArrayList一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了,這是LinkedList的優勢。
5、HashSet:
雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。
但是Set則是在 HashMap的基礎上來實現的,這就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項。
6、HashMap:
基於哈希表的 Map 介面的實現。此實現提供所有可選的映射操作,並允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證映射的順序,特別是它不保證該順序恆久不變。
7、HashTable:
Hashtable 是一個散列表,它存儲的內容是鍵值對(key-value)映射。Hashtable 繼承於Dictionary,實現了Map、Cloneable、java.io.Serializable介面。
Hashtable 的函數都是同步的,這意味著它是線程安全的。它的key、value都不可以為nul
④ 用java實現數據結構「棧
Java棧的實現
public
class
MyStack
{
//定義一個堆棧類
int[]
array;
//用int數組來保存數據,根據需要可以換類型
int
s_size;
//定義堆棧的寬度
public
MyStack(int
i){
//定義一個帶參數構造器
array=new
int[i];
//動態定義數組的長度
s_size=0;
//堆棧的默認寬度為0
}
public
MyStack(){
//默認構造器
this(50);
//默認構造器可容納50個元素
}
public
void
push(int
i){
//壓棧
array[this.s_size]=i;
this.s_size++;
}
public
int
pop(){
//從堆棧中取元素,從棧頂開始取
if(this.s_size!=0){
int
t=array[s_size-1];
//用中間變數保存棧頂的元素
array[s_size-1]=0;
//取完元素該位置設為0
s_size--;
//棧的大小減1
return
t;
//返回棧頂元素
}else{
System.out.println("This
stack
is
empty");
//當棧為空時顯示提示信息,返回0
return
0;
}
}
public
boolean
isEmpty(){
//判斷棧是否為空
return
this.s_size==0;
}
public
int
top(){
//從棧頂取值,功能和
pop()
方法一樣
if(!this.isEmpty()){
int
t=array[this.s_size-1];
array[this.s_size-1]=0;
this.s_size--;
return
t;
}else{
System.out.println("This
stack
is
empty!");
return
0;
}
}
public
void
printAll(){
//列印出堆棧中的所有元素的值,不是取出,元素依然在堆棧里
if(!this.isEmpty()){
for(int
i=this.s_size
-
1;i>=0;i--){
System.out.println(array[i]);
}
}
}
//下面是測試代碼
public
static
void
main(String[]
args){
MyStack
stack=new
MyStack();
stack.push(4);
stack.push(5);
stack.push(6);
stack.push(7);
//System.out.println(stack.isEmpty());
stack.printAll();
System.out.println("===========");
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.top());
}
}
⑤ java數據結構是什麼
數組(Array)
堆棧(Stack)
隊列(Queue)
鏈表(Linked List)
樹(Tree)
圖(Graph)
堆(Heap)
散列表(Hash)
這些是常見的數據結構