열거(Enumeration) 인터페이스 자체는 데이터 구조는 아니지만, 다른 데이터 구조의 범주에서 널리 사용됩니다. Enumeration 인터페이스는 데이터 구조에서 연속적인 요소를 검색하는 방법을 정의합니다. 예를 들어 열거형은 여러 요소가 포함된 데이터 구조의 다음 요소를 가져오는 데 사용되는 nextElement라는 메서드를 정의합니다.
이 전통적인 인터페이스는 Iterator로 대체되었습니다. 열거형이 폐기되지는 않았지만 최신 코드에서는 거의 사용되지 않습니다. 그럼에도 불구하고 일부 API 클래스 외에도 Vector, Properties 등의 전통적인 클래스에서 정의한 메서드에 사용되며, 응용 프로그램에서도 널리 사용됩니다. 다음 표에는 Enumeration에서 선언된 일부 메서드가 요약되어 있습니다.
serial number | Methods and 설명 |
---|---|
1 | boolean hasMoreElements( ), 이 열거형에 더 많은 요소가 포함되어 있는지 테스트하세요 |
2 | 객체 nextElement (), 이 열거형 객체에 사용 가능한 요소가 하나 이상 있으면 이 열거형의 다음 요소를 반환합니다 |
BitSet 클래스는 개별적으로 설정하고 지울 수 있는 비트 또는 플래그 세트를 구현합니다. 이 클래스는 일련의 부울 값을 처리할 때 매우 유용합니다. 각 값에 "비트"를 할당한 다음 부울 값에 대해 작동하려면 비트를 적절하게 설정하거나 지우기만 하면 됩니다.
Bitset 클래스는 비트 값을 보유하는 특별한 유형의 배열을 만듭니다. BitSet의 배열 크기는 필요에 따라 증가합니다. 이는 비트 벡터와 유사합니다. 이는 전통적인 클래스이지만 Java 2에서는 완전히 재설계되었습니다.
BitSet은 두 가지 구성 방법을 정의합니다:
// 第一个构造方法创建一个默认的对象: public BitSet() // 第二个方法允许用户指定初始大小。所有位初始化为0 public BitSet(int nbits)
BitSet는 다음 표에 나열된 대로 Cloneable 인터페이스에 정의된 방법을 구현합니다.
일련 번호 | 방법 및 설명 |
---|---|
1 | 공허하고 (BitSet 세트), 이 대상 비트 세트와 매개변수 비트 세트 |
2 | void andNot(BitSet 세트)에 대해 논리 AND 연산을 수행하고, 이 BitSet의 모든 비트를 지우고, 해당 비트는 이미 지정된 BitSet 세트에 있습니다. |
3 | int 카디널리티( ), true로 설정된 이 BitSet의 비트 수를 반환 |
4 | voidclear( ), 이 BitSet의 모든 비트를 false로 설정 |
5 | voidclear(int index) , 지정된 인덱스의 비트를 false로 설정 |
6 | voidclear(int startIndex, int endIndex) , 지정된 startIndex(포함)를 지정된 toIndex(제외)로 설정 범위는 false로 설정됩니다 |
7 | Object clone(), 이 BitSet을 복사하고, 그것과 동일한 새 BitSet을 생성합니다 |
8 | boolean equals(Object bitSet), 이 객체를 지정된 비교와 비교합니다. 객체 |
9 | void Flip(int index) , 지정된 인덱스의 비트를 현재 값의 보수로 설정 |
10 | void Flip(int startIndex, int endIndex) , 각 비트를 지정된 fromIndex(포함)부터 지정된 toIndex(제외)까지의 범위는 현재 값의 보수로 설정됩니다 |
11 | boolean get(int index) , 지정된 인덱스의 비트 값을 반환 |
12 | BitSet get(int startIndex, int endIndex) 는 이 BitSet |
13 | int hashCode(에서 fromIndex(포함)에서 toIndex(제외) 범위의 비트로 구성된 새 BitSet을 반환합니다. ), 지정된 BitSet에 true로 설정된 비트가 있고 이 BitSet에서도 true로 설정된 경우 이 비트 세트 |
14 | boolean intersects(BitSet bitSet)의 해시 코드 값을 반환합니다. 그런 다음 true |
15 | boolean isEmpty( )를 반환하고, 이 BitSet에 true로 설정된 비트가 포함되어 있지 않으면 true |
16 | int 길이( )를 반환하고, 이 BitSet 논리 크기의 "를 반환합니다. ": BitSet에서 가장 높은 세트 비트에 1 |
17 | int nextClearBit(int startIndex)을 더한 인덱스, false로 설정된 첫 번째 비트의 인덱스를 반환합니다. 이는 인덱스의 지정된 시작 인덱스 또는 그 이후에 발생합니다. |
18 | int nextSetBit(int startIndex)는 true로 설정된 첫 번째 비트의 인덱스를 반환합니다. 이는 지정된 시작 인덱스 |
19 | void 또는 (BitSet bitSet)에서 또는 그 이후에 발생합니다. 이 비트 세트 및 비트 세트 매개변수에 대한 논리적 OR 연산 |
20 | void set(int index), 지정된 인덱스의 비트를 true로 설정 |
21 | void set(int index, boolean v) , 지정된 인덱스의 비트를 지정된 값으로 설정 |
22 | void set(int startIndex, int endIndex), 지정된 fromIndex(포함)를 지정된 toIndex(제외)로 설정 범위의 비트를 다음으로 설정 true |
23 | void set(int startIndex, int endIndex, boolean v), 지정된 fromIndex(포함)부터 지정된 toIndex(제외)까지 범위의 비트를 지정된 값 |
24로 설정합니다. | int size( )는 이 BitSet이 비트 값을 나타낼 때 실제로 사용된 공간의 비트 수를 반환합니다. |
25 | String toString( )은 이 비트 집합의 문자열 표현을 반환합니다. |
26 | void xor(BitSet bitSet), 이 비트 세트 및 비트 세트 매개변수에 대해 논리적 XOR 연산을 수행합니다 |
实例:
public class Test { public static void main(String args[]) throws IOException { 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%5) != 0) bits2.set(i); } System.out.println("位集合1初始模式: "); System.out.println(bits1); System.out.println("\n位集合2初始模式: "); System.out.println(bits2); // 对此目标位 set 和参数位 set 执行逻辑与操作 bits2.and(bits1); System.out.println("\n位集合2 与 位集合1 执行逻辑与操作 "); System.out.println(bits2); // 对此位 set 和位 set 参数执行逻辑或操作 bits2.or(bits1); System.out.println("\n位集合2 与 位集合1 执行逻辑或操作: "); System.out.println(bits2); // 对此位 set 和位 set 参数执行逻辑异或操作 bits2.xor(bits1); System.out.println("\n位集合2 与 位集合1 执行逻辑异或操作 "); System.out.println(bits2); } } // 程序编译运行结果如下: // 位集合1初始模式: // {0, 2, 4, 6, 8, 10, 12, 14} // 位集合2初始模式: // {1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14} // 位集合2 与 位集合1 执行逻辑与操作 // {2, 4, 6, 8, 12, 14} // 位集合2 与 位集合1 执行逻辑或操作: // {0, 2, 4, 6, 8, 10, 12, 14} // 位集合2 与 位集合1 执行逻辑异或操作 // {}
向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。和数组一样,Vector对象的元素也能通过索引访问。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。
Vector 与 ArrayList的区别:
Vector 是同步访问的,所以线程就会安全,但是同时也会带来弊端就是效率就会降低,但 Arraylist 恰恰相反,这也就导致Arraylist的效率比 Vector 高。
在进行扩容时,Vector 会增长为原来数组长的一倍,而 Arraylist 只会增长为原来的一半,所以Arraylist节约内存空间。
Vector 包含了许多传统的方法,这些方法不属于集合框架。
Vector 类支持 4 种构造方法:
// 第一种构造方法创建一个默认的向量,默认大小为 10 Vector() // 第二种构造方法创建指定大小的向量 Vector(int size) // 第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目 Vector(int size,int incr) // 第四种构造方法创建一个包含集合 c 元素的向量 Vector(Collection c)
除了从父类继承的方法外 Vector 还定义了以下方法:
일련번호 | 방법 및 설명 |
---|---|
1 | void add(int index, Object element) , 이 벡터의 지정된 위치에 지정된 요소를 삽입합니다 |
2 | boolean add(Object o) , 이 벡터의 끝에 지정된 요소를 추가합니다. |
3 | boolean addAll(Collection c) , 지정된 Collection의 모든 요소를 이 벡터의 끝에 추가하고 반복자가 반환한 순서대로 추가합니다. 지정된 컬렉션 요소 |
4 | boolean addAll(int index, Collection c) 의 지정된 컬렉션의 모든 요소를 지정된 위치 |
5 | void addElement(Object obj) 에 있는 이 벡터에 삽입합니다. 지정된 구성요소를 이 벡터의 끝에 추가하여 크기를 1 |
6 | int 용량()만큼 늘리고, 이 벡터의 현재 용량을 반환하고 |
7 | voidclear()를 제거합니다. 이 벡터의 모든 요소 |
8 | Object clone() , 벡터의 복사본을 반환 |
9 | boolean contain(Object elem) , 이 벡터에 지정된 요소 |
가 포함되어 있으면 true를 반환합니다. 10 | boolean containAll(컬렉션 c), 이 벡터에 지정된 Collection |
11 | void copyInto(Object[] anArray)의 모든 요소가 포함된 경우 true를 반환하고 이 벡터의 구성 요소를 지정된 배열 |
12 | Object elementAt(int index) , 지정된 인덱스에 있는 구성요소를 반환 |
13 | Enumeration elements() , 이 벡터 구성요소의 열거형을 반환 |
14 | void verifyCapacity( int minCapacity), 이 벡터의 용량을 늘려(필요한 경우) 최소 용량 매개변수 |
15 | boolean equals(Object o)에 지정된 구성요소 수 이상을 보유할 수 있는지 확인하고 지정된 객체를 비교합니다. 동등성을 위해 이 벡터에 |
16 | Object firstElement() 는 이 벡터의 첫 번째 구성 요소(인덱스 0의 항목)를 반환합니다. |
17 | Object get(int index) 은 해당 벡터의 요소를 반환합니다. 벡터의 지정된 위치 |
18 | int hashCode() , 이 벡터의 해시 코드 값을 반환 |
19 | int indexOf(Object elem) , 지정된 요소가 처음 나타나는 인덱스를 반환 이 벡터에서 이 벡터가 이 요소를 포함하지 않으면 -1 |
20 | int indexOf(Object elem, int index)를 반환하고 이 벡터에서 지정된 요소가 처음 나타나는 인덱스를 반환하고 검색합니다. 인덱스에서 앞으로 요소를 찾을 수 없으면 -1 |
21 | 을 반환합니다. insertElementAt(Object obj, int index), 지정된 개체를 지정된 인덱스에 있는 이 벡터의 구성 요소로 삽입합니다 |
22 | boolean isEmpty(), 이 벡터에 구성요소가 포함되어 있지 않은지 테스트합니다 |
23 | Object lastElement() , 이 벡터의 마지막 구성요소를 반환합니다. |
24 | int lastIndexOf(Object elem) , 반환 이 벡터에서 지정된 요소의 마지막 발생 의 인덱스입니다. 요소가 발견되지 않으면 -1 |
26 | 을 반환합니다. Object Remove(int index) , 이 벡터의 지정된 위치에서 요소를 제거합니다. |
27 | boolean Remove(Object o) , 제거 이 벡터에서 지정된 요소가 처음으로 나타나는 경우 벡터에 해당 요소가 포함되어 있지 않으면 해당 요소는 변경되지 않은 상태로 유지됩니다. , 지정된 Collection 요소 |
29 | void RemoveAllElements()에 포함된 모든 요소를 이 벡터에서 제거하고, 이 벡터에서 모든 구성 요소를 제거하고 크기를 0으로 설정합니다. |
30 | boolean RemoveElement(Object obj) , 이 벡터 A(가장 작은 인덱스) 일치에서 변수의 번째 항목을 제거합니다. |
31 | void RemoveElementAt(int index) , 지정된 인덱스에서 구성 요소를 제거합니다. |
32 | protected void RemoveRange(int fromIndex, int toIndex), 이 벡터에서 인덱스가 fromIndex(포함)와 toIndex(제외) 사이에 있는 모든 요소를 제거합니다. | 34
35 | |
36 | |
37 | |
38 | |
39 | |
40 | Object[] toArray(Object[] a) ,返回一个数组,包含此向量中以恰当顺序存放的所有元素;返回数组的运行时类型为指定数组的类型 |
41 | String toString() ,返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式 |
42 | void trimToSize() ,对此向量的容量进行微调,使其等于向量的当前大小 |
实例:
public class Test { public static void main(String args[]) throws IOException { // 初始大小为3,增量为2 Vector v = new Vector(3, 2); System.out.println("初始大小: " + v.size()); System.out.println("初始容量: " + v.capacity()); v.addElement(new Integer(1)); v.addElement(new Double(5.45)); v.addElement(new Double(6.08)); v.addElement(new Integer(7)); System.out.println("四次添加后的容量: " + v.capacity()); v.addElement(new Float(9.4)); System.out.println("当前容量: " + v.capacity()); v.addElement(new Integer(10)); System.out.println("当前容量: " + v.capacity()); System.out.println("第一元素: " + (Integer)v.firstElement()); System.out.println("最后一个元素: " + (Integer)v.lastElement()); v.addElement(new Integer(3)); // 向量包含3 if(v.contains(new Integer(3))) { System.out.println("向量包含 3"); } // 列举向量中的元素 Enumeration vEnum = v.elements(); System.out.println("\n向量中的元素:"); while(vEnum.hasMoreElements()) { System.out.print(vEnum.nextElement() + " "); } System.out.println(); } } // 程序编译运行结果如下: // 初始大小: 0 // 初始容量: 3 // 四次添加后的容量: 5 // 当前容量: 5 // 当前容量: 7 // 第一元素: 1 // 最后一个元素: 10 // 向量包含 3 // 向量中的元素: // 1 5.45 6.08 7 9.4 10 3
栈(Stack)实现了一个后进先出(LIFO)的数据结构。你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。
栈是Vector的一个子类,栈只定义了默认构造函数,用来创建一个空栈。栈除了包括由Vector定义的所有方法,也定义了自己的一些方法:
序号 | 方法及说明 |
---|---|
1 | boolean empty() ,测试栈是否为空 |
2 | Object peek( ) ,查看栈顶部的对象,但不从栈中移除它 |
3 | Object pop( ) ,移除栈顶部的对象,并作为此函数的值返回该对象 |
4 | Object push(Object element) ,把项压入堆栈顶部 |
5 | int search(Object element) ,返回对象在堆栈中的位置,以 1 为基数 |
字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。
Dictionary类已经过时了。在实际开发中,你可以实现 Map 接口来获取键/值的存储功能。
Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名。哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。
Hashtable是原始的java.util的一部分, 是一个Dictionary具体的实现 。然而,Java 2 重构的Hashtable实现了 Map 接口,因此,Hashtable 现在集成到了集合框架中。它和HashMap类很相似,但是它支持同步。
像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。
Hashtable定义了四个构造方法:
// 默认构造方法 public Hashtable() // 创建指定大小的哈希表 public Hashtable(int initialCapacity) // 创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例 // 填充比例必须介于0.0和1.0之间,它决定了哈希表在重新调整大小之前的充满程度 public Hashtable(int initialCapacity, float loadFactor) // 创建了一个以 t 中元素为初始化元素的哈希表,哈希表的容量被设置为 t 的两倍 public Hashtable(Map<? extends K, ? extends V> t)
Hashtable中除了从Map接口中定义的方法外,还定义了以下方法:
序号 | 方法及说明 |
---|---|
1 | void clear( ) ,将此哈希表清空,使其不包含任何键 |
2 | Object clone( ) ,创建此哈希表的浅表副本 |
3 | boolean contains(Object value) ,测试此映射表中是否存在与指定值关联的键 |
4 | boolean containsKey(Object key) ,测试指定对象是否为此哈希表中的键 |
5 | boolean containsValue(Object value) ,如果此 Hashtable 将一个或多个键映射到此值,则返回 true |
6 | Enumeration elements( ) ,返回此哈希表中的值的枚举 |
7 | Object get(Object key) ,返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null |
8 | boolean isEmpty( ) ,测试此哈希表是否没有键映射到值 |
9 | Enumeration keys( ) ,返回此哈希表中的键的枚举 |
10 | Object put(Object key, Object value) ,将指定 key 映射到此哈希表中的指定 value |
11 | void rehash( ) ,增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素 |
12 | Object remove(Object key) ,从哈希表中移除该键及其相应的值 |
13 | int size( ) ,返回此哈希表中的键的数量 |
14 | String toString( ) ,返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目 |
Properties 继承于 Hashtable。Properties 类表示了一个持久的属性集。属性列表中每个键及其对应值都是一个字符串。Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。
Properties 定义如下实例变量.这个变量持有一个 Properties 对象相关的默认属性列表:
protected Properties defaults;
Properties类定义了两个构造方法:
// 第一个构造方法没有默认值 public Properties() // 第二个构造方法使用propDefault 作为默认值 public Properties(Properties defaults)
除了从 Hashtable 中所定义的方法,Properties 还定义了以下方法:
序号 | 方法及说明 |
---|---|
1 | String getProperty(String key), 用指定的键在此属性列表中搜索属性 |
2 | String getProperty(String key, String defaultProperty),用指定的键在属性列表中搜索属性 |
3 | void list(PrintStream streamOut),将属性列表输出到指定的输出流 |
4 | void list(PrintWriter streamOut),将属性列表输出到指定的输出流 |
5 | void load(InputStream streamIn) throws IOException,从输入流中读取属性列表(键和元素对) |
6 | Enumeration propertyNames( ),按简单的面向行的格式从输入字符流中读取属性列表(键和元素对) |
7 | Object setProperty(String key, String value),调用 Hashtable 的方法 put |
8 | void store(OutputStream streamOut, String description),以适合使用 load(InputStream)方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流 |
위 내용은 Java 데이터 구조 예제 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!