- 枚举(Enumeration)
- 位集合(BitSet)
- 向量(Vector)
- 栈(Stack)
1.Enumeration(枚举)
- boolean hasMoreElements( ):测试是否有更多的元素
- Object nextElement( ):如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素
使用:
package com.day5;
import java.util.Enumeration;
import java.util.Vector;
/**
* @author SFJ
* @date 2019/11/11
* @time 22:24
**/
public class Test2 {
public static void main(String[] args) {
Enumeration<String>days;
Vector<String>dayNo = new Vector<String>();
dayNo.add("Sun");
dayNo.add("Mon");
dayNo.add("Tue");
dayNo.add("Wed");
dayNo.add("Thu");
dayNo.add("Fri");
dayNo.add("Sat");
days = dayNo.elements();
while (days.hasMoreElements())
{
System.out.println(days.nextElement());
}
}
}
2.BitSet(位集合)
一个Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。这和位向量(vector of bits)比较类似。
BitSet定义了两个构造方法。
1:构造方法(无参数)
BitSet()//创建默认对象
2:允许用户指定初始大小,所有位初始化为0
BitSet(int size)//数组的长度指定
使用:
package com.day5;
import java.util.BitSet;
/**
* @author SFJ
* @date 2019/11/11
* @time 23:02
**/
public class Test3 {
public static void main(String[] args) {
BitSet bits1 = new BitSet(16);
BitSet bits2 = new BitSet(16);
for(int i=0; i<16; i++) {
if((i%2) == 0) bits1.set(i);
if((i%3) != 0) bits2.set(i);
}
System.out.println("Initial pattern in bits1: ");
System.out.println(bits1);
System.out.println("\nInitial pattern in bits2: ");
System.out.println(bits2);
// AND bits
bits2.and(bits1);
System.out.println("\nbits2 AND bits1: ");
System.out.println(bits2);
// OR bits
bits2.or(bits1);
System.out.println("\nbits2 OR bits1: ");
System.out.println(bits2);
// XOR bits
bits2.xor(bits1);
System.out.println("\nbits2 XOR bits1: ");
System.out.println(bits2);
}
}
3.Vector(向量)
Vector类和数组相似,但是Vector的大小能根据需要动态的变化。和数组一样,Vector对象的元素也能通过索引访问。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。Vector 类实现了一个动态数组。和 ArrayList 很相似,还存在不同:
- Vector 同步访问
- Vector 包含了许多传统的方法,这些方法不属于集合框架
构造方法:
- 无参构造,默认值为10
Vector()
- 制定创建大小
Vector(int size)
- 指定大小,指定增量每次增加的元素个数
Vector(int size,int incr)
- 包含集合C元素向量
Vector(Collection c)
使用:
package com.day5;
import java.util.Enumeration;
import java.util.Vector;
/**
* @author SFJ
* @date 2019/11/11
* @time 23:12
**/
public class Test4
{
public static void main(String[] args) {
// initial size is 3, increment is 2
Vector v = new Vector(5, 2);
System.out.println("Initial size: " + v.size());
System.out.println("Initial capacity: " + v.capacity());
v.addElement(new Integer(1));
v.addElement(new Integer(2));
v.addElement(new Integer(3));
v.addElement(new Integer(4));
System.out.println("Capacity after additions: " + v.capacity());
v.addElement(new Double(2.23));
System.out.println("Current capacity: " +v.capacity());
v.addElement(new Double(5.764));
v.addElement(new Integer(7));
System.out.println("Current capacity: " +v.capacity());
v.addElement(new Float(3.4));
v.addElement(new Integer(10));
System.out.println("Current capacity: " + v.capacity());
v.addElement(new Integer(11));
v.addElement(new Integer(12));
System.out.println("First element: " +
(Integer)v.firstElement());
System.out.println("Last element: " +
(Integer)v.lastElement());
if(v.contains(new Integer(3)))
System.out.println("Vector contains 3.");
// enumerate the elements in the vector.
Enumeration vEnum = v.elements();
System.out.println("\nElements in vector:");
while(vEnum.hasMoreElements())
System.out.print(vEnum.nextElement() + " ");
System.out.println();
}
}
}
4.Stack(栈)
-
后进先出(LIFO),即对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部,从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出
Stack()
package com.day5; import java.util.Stack; /** * @author SFJ * @date 2019/11/11 * @time 23:24 **/ public class Test5 { public static void main(String[] args) { Stack<Integer> st = new Stack<Integer>(); System.out.println("stack: " + st); showpush(st, 1); showpush(st, 2); showpush(st, 3); showpop(st); showpop(st); showpop(st); showpop(st); } static void showpush(Stack<Integer> st, int a) { st.push(new Integer(a)); System.out.println("push(" + a + ")"); System.out.println("stack: " + st); } static void showpop(Stack<Integer> st) { System.out.print("pop:"); Integer a = (Integer) st.pop(); System.out.println(a); System.out.println("stack: " + st); } }