3. List
1
.
Vector
的数据结构和工作原理
Vector
是基本数据结构一个可变数组,数组的元素可以是任意对象,当
Vector
初始创建时,会创建一个一定容量(Capacity)的(默认为
10
)数组对象,当添加的对象超过数组的容量时,
Vector
在内部会重新创建一个新的数组,再把原数组元素拷贝到新的数组里面,这样就完成了动态数组的功能。
Vector
的构造器有三种
1)
public
Vector(int initialCapacity, int capacityIncrement)
initialCapacity
是数组的初始化长度,
capacityIncrement
是当数组长度超过原长度时,数组长度增长的步长,
capacityIncrement
为
0
时,此种情况当数组长度超过原长度峰值时,此时数组长度变为原来的
2
倍。当数组长度变化,原有的数据和新的数组对象是通过
copy
来完成的。
2)
public
Vector(int initialCapacity)
3)
public
Vector()
Vector
默认构造器的数组的长度是
10
核心方法:
/**
*
核心方法之一:保证数组的容量,如果没有指定容量的增长的步长,则将原数组容量扩
*
大成原来的两倍,如果指定则按照增长的步长增加容量,并且取
minCapacity
和
*newCapacity
计算出来的最大值进行取值。计算出来的最终容量将作为新数组对象的尺
*
寸,并将原来数组的元素
copy
到新数组里面来。
*
*
@see
#ensureCapacity(int)
*/
private
void
ensureCapacityHelper(
int
minCapacity) {
int
oldCapacity =
elementData
.
length
;
if
(minCapacity > oldCapacity) {
Object[] oldData =
elementData
;
int
newCapacity = (
capacityIncrement
> 0) ?
(oldCapacity +
capacityIncrement
) : (oldCapacity * 2);
if
(newCapacity < minCapacity) {
newCapacity = minCapacity;
}
elementData
= Arrays.copyOf
(
elementData
, newCapacity);
}
}
2.Vector
使用时需要注意的问题
1) Vector
使用时,最好能够预期需要存放元素的个数,这样可以避免数组长度频繁的改变而引起数据的
copy
带来的开销,同时会引起内存大小的增加。
2
)使用
Vector
需要知道
Vector
是线程安全的。因此,在使用时,最好是考虑这个对象会不会因为多个线程访问该
Vector
对象,如果确认只有单个线程访问,则可以用
ArrayList
来代替
Vector
。
3.
Stack
有
Vector
可以轻松改造成
Stack
,栈的特点是先进后出,对于一个栈来说,主要方法包括,
push(E
e), pop, peek,empty
和
search(E
e).
public
class
Stack
<E>
extends
Vector<E> {
public
Stack(){
super
(10);
}
public
void
push(E e){
this
.add(e);
}
public
E pop(){
return
this
.remove(
this
.size()-1);
}
public
boolean
empty(){
return
this
.size()==0;
}
public int search(E e){
for (int i = 0; i < this.size(); i++) {
if(this.elementAt(i).equals(e)){
return i;
}else{
continue;
}
}
return -1;
}
}
分享到:
相关推荐
- `Vector`和`Stack`:这两个类是历史遗留下来的,现在一般建议使用`ArrayList`和`LinkedList`。 - **`Map`接口的实现**: - `HashMap`:基于哈希表的实现,提供了快速的键值对存储和检索。 - `TreeMap`:基于...
Java集合框架主要包括`Collection`、`Set`、`List`、`Queue`、`Deque`、`Map`等接口和它们的具体实现类如`ArrayList`、`LinkedList`、`Vector`、`Stack`、`HashSet`、`HashMap`等。下面将对这些核心概念和类进行深入...
`Collection`接口是最基础的接口之一,它是所有其他集合类的父接口。它定义了一些基本的操作方法,比如增加、删除元素等。 - **方法概述** - `boolean add(Object o)`:向集合中添加一个元素。 - `boolean remove...
集合框架还包含了一些辅助类,如Collections工具类,提供了集合的静态方法,如排序(sort)、填充(fill)和集合转换(toArray)等。Comparable和Comparator接口用于元素的比较,Comparable是元素自身比较,Comparator则...
通过以上总结,我们可以看到Java集合框架为Java开发者提供了极其丰富的工具箱,无论是处理简单的数据结构还是复杂的键值对映射,都有合适的选择。了解并熟练掌握这些概念和技术,对于提高编程效率和编写高质量的Java...
在Java编程中,集合类(Collections)是处理数据的重要工具,它们提供了灵活且高效的方式来存储、检索以及操作数据。Java集合框架主要包括两大类:`Collection`和`Map`。 #### Collection接口及其子接口 `...
在Java编程中,`java.util`包是一个非常重要的工具类库,它包含了处理各种常见任务的类和接口。这个包提供了丰富的数据结构和算法,如日期和时间...理解和熟练使用这些工具类对于任何Java开发者来说都是至关重要的。
在Java编程语言中,集合框架(Collection Framework)是处理数据结构的核心组件之一,它为开发人员提供了各种灵活且功能丰富的容器类,用于存储、检索和操作对象。Java集合框架由多个接口和实现这些接口的类组成,...
Java集合框架是Java API的核心组件之一,主要用于存储和操作对象。List集合是其中的一个重要接口,它代表了一个有序的、允许元素重复的序列。List接口扩展了Collection接口,提供了更丰富的操作方法,使得在处理序列...
Java集合框架与原有的数据结构(如`Dictionary`、`Vector`、`Stack`和`Properties`等)进行了良好的兼容,同时引入的新特性也为开发者提供了更加强大和灵活的工具。 #### 八、总结 Java集合框架为Java程序员提供了...
在现代编程语言中,集合框架是处理数据的重要工具之一,尤其是在面向对象的语言中,如Java。本文将详细介绍Java中的集合系统,并简要提及JavaScript中的集合概念,帮助读者理解这两种语言中集合的不同之处。 ### ...
5. **Arrays和Collections工具类** - **Arrays**:提供对数组的各种操作,如排序、复制、填充和转换为列表。 - **Collections**:针对集合的各种操作,如排序、填充、反转和同步化。 集合框架的设计使得开发者...
此外,Java集合框架还包括其他接口和类,如`Map`接口(`HashMap`、`TreeMap`、`LinkedHashMap`等实现)、`Queue`(`LinkedList`实现`Deque`,以及`PriorityQueue`等)、`Stack`(`Vector`的子类,实现后进先出的栈...
二、工具类 java.util.Collections类提供了许多静态方法,用于操作集合对象,如排序、反转、随机排列和搜索等。例如: - sort(List l):对List中的元素进行排序。 - shuffle(List l):将List中的元素随机排列。 - ...
在Java 2发布之前,Java提供了诸如`Dictionary`, `Vector`, `Stack`, 和`Properties`等特设类来存储和操作对象组。这些类虽然有用,但缺乏一个统一的核心主题,导致使用方式各异。为了解决这一问题,Java集合框架...
7. **实用工具类** `Collections` 类提供了大量静态方法,用于集合的排序、复制、查找、填充等操作。`Arrays` 类则提供了对数组的各种操作,包括排序和转换为集合。 8. **接口的扩展** `Iterable` 接口在Java 5中...
9. **Collections工具类** - `Collections`类提供了静态方法,用于操作集合,如排序、查找、填充、复制等。 10. **Comparable接口和equals()、hashCode()方法** - `Comparable`接口用于实现对象的自然排序,`...