1. java vector 用法
你復制下,就可以運行了,其實沒什麼大錯誤,你沒有把JscrollPanel添加進JFrame所以!我重新修改了下,加上this.setTitle("測試");就可以設置標題了!
package chapter11.awt.menu;
import javax.swing.*;
import java.util.*;
//import java.sql.*;
//import java.awt.event.*;//控制項的監聽
/**
* JTable的使用
* @param args
*/
public class Test extends JFrame{
//rowData用來存放數據,columNames用來存放列名
Vector rowData = null;
Vector columnNames = null;
JTable jt = null;
JScrollPane jsp = null;//滾動條
//構造函數
@SuppressWarnings("unchecked")
public Test()
{
columnNames = new Vector();//初始化
//設置列名
columnNames.add("學號");
columnNames.add("姓名");
columnNames.add("性別");
columnNames.add("年齡");
columnNames.add("籍貫");
columnNames.add("系別");
rowData=new Vector();//初始化行數據 rowData可以存放多行
Vector hang=new Vector();//rowData可以存放多行
hang.add("001");
hang.add("張三");
hang.add("男");
hang.add("20");
hang.add("中國");
hang.add("信管");
//加入到rowData
rowData.add(hang);
//初始化JTabel
jt=new JTable(rowData,columnNames);
//初始化jsp JScrollPane
jsp=new JScrollPane(jt);
this.setTitle("測試");
this.add(jt);
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關閉時自動退出
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=new Test();
}
}
2. java中linkedlist遍歷為什麼要轉換成vector用while遍歷而不是直接用for循環遍歷
用vector遍歷效率高,線程安全,同時linkedlist集合的存值方式----鏈表的方式,也適合vector
3. java中vector是什麼
Vector 類可以實現可增長的對象數組。與數組一樣,它包含可以使用整數索引進行訪問的組件。但是,Vector 的大小可以根據需要增大或縮小,以適應創建 Vector 後進行添加或移除項的操作。 每個向量會試圖通過維護 capacity 和 capacityIncrement 來優化存儲管理。capacity 始終至少應與向量的大小相等;這個值通常比後者大些,因為隨著將組件添加到向量中,其存儲將按 capacityIncrement 的大小增加存儲塊。應用程序可以在插入大量組件前增加向量的容量;這樣就減少了增加的重分配的量。 由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失敗的:如果在迭代器創建後的任意時間從結構上修改了向量(通過迭代器自身的 remove 或 add 方法之外的任何其他方式),則迭代器將拋出 。因此,面對並發的修改,迭代器很快就完全失敗,而不是冒著在將來不確定的時間任意發生不確定行為的風險。Vector 的 elements 方法返回的 Enumeration 不是 快速失敗的。 注意,迭代器的快速失敗行為不能得到保證,一般來說,存在不同步的並發修改時,不可能作出任何堅決的保證。快速失敗迭代器盡最大努力拋出 。因此,編寫依賴於此異常的程序的方式是錯誤的,正確做法是:迭代器的快速失敗行為應該僅用於檢測 bug。
4. 為什麼java vector遍歷是線程不安全的
就算是線程安全也會出現下標越界啊 線程安全的概念是 不會允許一個數在同時間內重復 操作導致 數據丟失或者篡改 數組下標越界跟線程安全是沒有關系的
5. java中Vector,ArraryList和LinkedList的區別
List介面一共有三個實現類,分別是ArrayList、Vector和LinkedList。List用於存放多個元素,能夠維護元素的次序,並且允許元素的重復。3個具體實現類的相關區別如下:
1ArrayList是最常用的List實現類,內部是通過數組實現的,它允許對元素進行快速隨機訪問。數組的缺點是每個元素之間不能有間隔,當數組大小不滿足時需要增加存儲能力,就要講已經有數組的數據復制到新的存儲空間中。當從ArrayList的中間位置插入或者刪除元素時,需要對數組進行復制、移動、代價比較高。因此,它適合隨機查找和遍歷,不適合插入和刪除。
2Vector與ArrayList一樣,也是通過數組實現的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠寫Vector,避免多線程同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問ArrayList慢。
3LinkedList是用鏈表結構存儲數據的,很適合數據的動態插入和刪除,隨機訪問和遍歷速度比較慢。另外,他還提供了List介面中沒有定義的方法,專門用於操作表頭和表尾元素,可以當作堆棧、隊列和雙向隊列使用。
6. vector遍歷的問題
session.getAttribute(Constants.LOGIN_USER_KEY);
這句語句返回的是一個對象,原來放進去的是什麼對象,取出來就是什麼對象.如果原來放的是Vector,那麼這句(User)session.getAttribute(Constants.LOGIN_USER_KEY); 運行時就會報錯:ClassCastException,是類型轉換錯誤(除非原來放的是User才可以正確運行),就是說只能轉換成Vector.所以,一定要經過遍歷才行.
7. java 實現將Vector集合轉換成LinkedList後使用隊列遍歷方式進行遍歷 急。。。。。
ArrayList,LinkedList,Vestor這三個類都實現了java.util.List介面,但它們有各自不同的特性,主要如下:
一、同步性
ArrayList,LinkedList是不同步的,而Vestor是的。所以如果要求線程安全的話,可以使用ArrayList或LinkedList,可以節省為同步而耗費開銷。但在多線程的情況下,有時候就不得不使用Vector了。當然,也可以通過一些辦法包裝ArrayList,LinkedList,使他們也達到同步,但效率可能會有所降低。
二、數據增長
從內部實現機制來講ArrayList和Vector都是使用Objec的數組形式來存儲的。當你向這兩種類型中增加元素的時候,如果元素的數目超出了內部數組目前的長度它們都需要擴展內部數組的長度,Vector預設情況下自動增長原來一倍的數組長度,ArrayList是原來的50%,所以最後你獲得的這個集合所佔的空間總是比你實際需要的要大。所以如果你要在集合中保存大量的數據那麼使用Vector有一些優勢,因為你可以通過設置集合的初始化大小來避免不必要的資源開銷。
三、檢索、插入、刪除對象的效率
ArrayList和Vector中,從指定的位置(用index)檢索一個對象,或在集合的末尾插入、刪除一個對象的時間是一樣的,可表示為O(1)。但是,如果在集合的其他位置增加或移除元素那麼花費的時間會呈線形增長:O(n-i),其中n代表集合中元素的個數,i代表元素增加或移除元素的索引位置。為什麼會這樣呢?以為在進行上述操作的時候集合中第i和第i個元素之後的所有元素都要執行(n-i)個對象的位移操作。
LinkedList中,在插入、刪除集合中任何位置的元素所花費的時間都是一樣的—O(1),但它在索引一個元素的時候比較慢,為O(i),其中i是索引的位置。
所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那麼使用Vector或ArrayList都可以。如果是對其它指定位置的插入、刪除操作,最好選擇LinkedList
參考文章: