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
参考文章: