java Vector 怎么用一个Vector来给一个以维数组赋值呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Vector 怎么用一个Vector来给一个以维数组赋值呢?相关的知识,希望对你有一定的参考价值。

比如 Vector v = new Vector();
v.add(1);
v.add(2);
v.add(3);
v.add(4);
...
那么打印这个v时 得到的就是 1,2,3,4

我想知道怎么把v里的这几个元素赋值给一个数组 比如 一个short类型的一维数组

数据类型不一样 一个是基本类型 一个是对象 怎么转换呢

把Vector v里的这几个数 赋值个 short s[]这个数组 该怎么赋?
请java高手帮忙~万分感谢!
标题写错了 “一个以维数组” 应该是一维数组

请问short s[] = v.toArray() 这样可以等? 也就是说 v里的值已经赋给s了?
是不是该这么做
short s[] = new short[v.size];
s = v.toArray();
这样就行了?s里的值就是v中的1,2,3,4了?

我觉得short s[] = v.toArray() 等不了吧

兄弟你好,在说这个问题之前,我需要先说明楼上兄弟所说调用Vector的toArray();方法,确实,他是把Vector里的对象转换为了数组,但是那是Object类型的数组,返回的是Object对象,你依然是需要强转处理的。
你如果想把vector里存储的对象转换存储到short数组,那么有以下几种选择:
一,你的vector里存储的都是可以转变为short的数字字符串,如"1","22"等等。
二,你的vector里存储的都是short的封装类Short类型的对象。
三,你的vector里存储的都是可以转变为short类型的其他基本类型的封装类如Integer,Float等,但是你要保证这些范围都在32767 ~ -32768 。
Vector类里的toArray()方法是把当前这个vector里存储的对象按顺序放到一个Object类型的数组里面,很明显这不符合你的要求。
JAVA数据类型里面,short数值范围是 32767 ~ -32768
所以你如果想把vector里的数字或者数字字符串都转换到short数组里,你首先要保证你的数字范围在32767 ~ -32768
-----------------------------------------------
Vector v = new Vector();
v.add(1);
v.add(2);
v.add(3);
v.add(4);

你用这种写法将基本类型的数字添加到vector,说明你用的是jdk1.5或者1.6版本的。
jdk1.5以后引入了泛型能够自动将基本类型转换为对应的封装类,你这里添加的是int实际上他在存储的时候已经转换为了java.lang.Integer,所以你才可以这样写。
----------------------------------------------------
既然是转换为了Integer类型,那好办,你取的时候先按照Integer类型来取,然后转换为int,最后强制转换为short,并且创建一个与vector的size大小一致的数组来存储,代码如下:

public class TestArray

public static void main(String[] args)
Vector v = new Vector();
v.add(1);
v.add(2);
v.add(3);
v.add(4);

short []shortArray = new short[v.size()];
for(int i = 0 ; i < v.size();i++)
System.out.println("vector里存储的对象类型--->" + v.get(i).getClass().getName() + "index---->" + i);
Integer temp = (Integer)v.get(i);
shortArray[i] =(short) temp.intValue();



---------------------------------
另外一种方法就是调用toArray()方法然后再转换Object数组对象为Integer-int-short,这样是可行的,但是绕弯路了。
参考技术A 这是老的吧.现在要<e> 参考技术B Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

它有这样一个方法:
toArray()
返回一个数组,包含此向量中以恰当顺序存放的所有元素。

所以你可以short s[] = v.toArray()

建议你多看看API文档。。。当然我也是新手,才看的。不知道对不对,没试验
参考技术C 楼上兄弟分析的很透彻,我就不画蛇添足了

vector erase怎么用

参考技术A iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );
Erase elements

Removes from the vector container either a single element (position) or a range of elements ([first,last)).

This effectively reduces the vector size by the number of elements removed, calling each element's destructor before.

Because vectors keep an array format, erasing on positions other than the vector end also moves all the elements after the segment erased to their new positions, which may not be a method as efficient as erasing in other kinds of sequence containers (deque, list).

This invalidates all iterator and references to elements after position or first.

Parameters
All parameters are of member type iterator, which in vector containers are defined as a random access iterator type.

position
Iterator pointing to a single element to be removed from the vector.
first, last
Iterators specifying a range within the vector to be removed: [first,last). i.e., the range includes all the elements between first and last, including the element pointed by first but not the one pointed by last.

Return value
A random access iterator pointing to the new location of the element that followed the last element erased by the function call, which is the vector end if the operation erased the last element in the sequence.

Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// erasing from vector
#include <iostream>
#include <vector>
using namespace std;

int main ()

unsigned int i;
vector<unsigned int> myvector;

// set some values (from 1 to 10)
for (i=1; i<=10; i++) myvector.push_back(i);

// erase the 6th element
myvector.erase (myvector.begin()+5);

// erase the first 3 elements:
myvector.erase (myvector.begin(),myvector.begin()+3);

cout << "myvector contains:";
for (i=0; i<myvector.size(); i++)
cout << " " << myvector[i];
cout << endl;

return 0;


Output:

myvector contains: 4 5 7 8 9 10

Complexity
Linear on the number of elements erased (destructors) plus the number of elements after the last element deleted (moving).

参考资料:http://www.cplusplus.com/reference/stl/vector/erase/

参考技术B for(vector<int>::iterator iter=veci.begin(); iter!=veci.end(); )

if( *iter == 3)
iter = veci.erase(iter);
else
iter ++ ;

以上是关于java Vector 怎么用一个Vector来给一个以维数组赋值呢?的主要内容,如果未能解决你的问题,请参考以下文章

java中vector与C++中vector用法都有哪些区别?

C++vector怎么用

c++里vector怎么用?

java Vector

java 中vector 排序

c++ 用vector 定义二维数组