Vector
动态数组,与ArrayList相似,区别在于:
1)Vector是同步访问的
2)Vector包含一些不属于集合框架的传统方法
3)Vector不需要指明类型,也就是说,里面可以同时放int和double
构造方法
- Vector()
默认大小为10 - Vector(int size)
- Vector(int size, int incr)
增量表示vector每次增加的元素数目。就是如果vector满了,再add的话,一次会增加incr个容量 - Vector(Collection c)
其他方法
添加元素
void add(int index, Object o)
boolean add(Object o) // 添加到末尾
boolean addAll(int index, Collection c) // 指定位置
boolean addAll(Collection c) //添加到末尾
void addElement(Object o) // 将指定对象添加到末尾
void insertElementAt(Object obj, int index)
// 将指定对象作为此向量中的组件插入到指定的 index 处
拷贝
Object clone()
void copyInto(Object[] anArray) // 将此向量的组件复制到指定数组
删除元素
void clear() // 移除所有
Object remove(Object o)
boolean removeAll(Collection c)
void removeAllElements() // 大小设置为0
// 从此向量中移除变量的第一个(索引最小的)匹配项。
boolean removeElement(Object obj)
void removeElementAt(int index)
// 删除范围[fromIndex, toIndex)
protected void removeRange(int fromIndex, int toIndex)
boolean retainAll(Collection c)
修改元素
Object set(int index, Object element)
void setElementAt(Object obj, int index)
判断
boolean contains(Object o)
boolean containsAll(Collection c)
boolean equals(Object o)
boolean isEmpty()
属性
int capacity() // 返回当前容量
Enumeration elements()
int hashCode()
int size() // 实际元素数目
索引
Object elementAt(int index)
Object get(int index)
Object firstElement()
Object lastElement()
int indexOf(Object o)
int indexOf(Object o, int index)
int lastIndexOf(Object o)
int lastIndexOf(Object o, int index)
List subList(int fromIndex, int toIndex)
修改容量
// 增加此向量的容量(如有必要),以确保其至少能够
// 保存最小容量参数指定的组件数。
void ensureCapacity(int minCapacity)
void setSize(int newSize)
// 调整容量使之等于向量当前大小
void trimToSize()
转换
Object[] toArray()
// 返回数组的运行时类型为指定数组的类型
Object[] toArray(Object[] a)
String toString()
遍历
Vector v = new Vector(3, 2);
v.addElement(new Integer(4));
v.addElement(new Double(6.08));
// 枚举
Enumeration vEnum = v.elements();
while(vEnum.hasMoreElements())
System.out.print(vEnum.nextElement() + " "); // next
Queue
初始化
Queue<Integer> q = new LinkedList<>();
常用函数
add()和offer()都是向队列中添加一个元素。一些队列有大小限制,如果队列已满,加入新项目的话,调用add()会抛出unchecked异常,调用offer()则会返回false
poll()和remove()都是从队列中删除第一个元素,如果队列为空,remove()会抛出异常,poll()则返回null
element()和peek()都是查询头部元素,队列为空时,element()抛出异常,peek()返回null
put : 添加新元素,如果队列满,阻塞
take : 移除并返回队列头部元素
例题
- 数据流中的移动平均值
给定一个整数数据流和一个窗口大小,根据该滑动窗口的大小,计算其所有整数的移动平均值。
示例:
MovingAverage m = new MovingAverage(3);
m.next(1) = 1
m.next(10) = (1 + 10) / 2
m.next(3) = (1 + 10 + 3) / 3
m.next(5) = (10 + 3 + 5) / 3
来自 https://leetcode-cn.com/problems/moving-average-from-data-stream/
解法:
class MovingAverage {
//private int sum;
private double sum;
private int s;
private Queue<Integer> q;
/** Initialize your data structure here. */
public MovingAverage(int size) {
q = new LinkedList<>();
sum = 0.0;
s = size;
}
public double next(int val) {
sum += val;
q.offer(val); // 添加元素
if (q.size() > s) {
sum -= q.remove();
}
return sum / q.size();
}
}
/**
* Your MovingAverage object will be instantiated and called as such:
* MovingAverage obj = new MovingAverage(size);
* double param_1 = obj.next(val);
*/
来自 https://leetcode-cn.com/problems/moving-average-from-data-stream/