Open LastPoem opened 4 years ago
Java工具包提供了强大的数据结构,在java中的数据结构主要包括以下几种接口和类:
枚举接口虽然本身不属于数据结构,但它在其它数据结构的范畴里应用很广。枚举接口定义了一种从数据结构中取回连续元素的方式。 例如,枚举定义了一个叫nextElement的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。
Enumeration接口 hasMoreElements()测试此枚举是否包含更多的元素。 nextElement()如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
import java.util.Vector; import java.util.Enumeration; public class EnumerationTester { public static void main(String args[]) { Enumeration<String> days; Vector<String> dayNames = new Vector<String>(); dayNames.add("Sunday"); dayNames.add("Monday"); dayNames.add("Tuesday"); dayNames.add("Wednesday"); dayNames.add("Thursday"); dayNames.add("Friday"); dayNames.add("Saturday"); days = dayNames.elements(); while (days.hasMoreElements()){ System.out.println(days.nextElement()); } } }
位集合 实现了一组可以单独设置和清除的位或标志。 该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一位,然后对位进行适当的设置或清除,就可以对布尔值进行操作了。 一个Bitset类创建一种特殊类型的数组来保存位值。Bitset定义了两个构造方法。 第一个构造方法创建一个默认的对象: BitSet() 第二个方法允许用户指定初始大小。所有位初始化为0. BitSet(int size)
向量 向量类和传统数组非常相似,但Vector的大小能够根据需要动态的变化。 和数组一样,Vector对象的元素也能通过索引访问。 使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。 支持4种构造方法。 第一种构造方法创建一个默认的向量,默认大小为10; Vector() 第二种构造方法创建指定大小的向量。 Vector(int size) 第三种构造方法创建指定大小的向量,并且增量用incr指定。增量表示向量每次增加的元素数目。 Vector(int size,int incr) 第四种构造方法创建一个包含集合c元素的向量 Vector(Collection c)
除了从父类继承的方法外Vector还定义了以下方法:
import java.util.*; public class VectorDemo { public static void main(String args[]) { // initial size is 3, increment is 2 Vector v = new Vector(3, 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 four additions: " + v.capacity()); v.addElement(new Double(5.45)); System.out.println("Current capacity: " + v.capacity()); v.addElement(new Double(6.08)); v.addElement(new Integer(7)); System.out.println("Current capacity: " + v.capacity()); v.addElement(new Float(9.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(); } } 以上实例编译运行结果如下: Initial size: 0 Initial capacity: 3 Capacity after four additions: 5 Current capacity: 5 Current capacity: 7 Current capacity: 9 First element: 1 Last element: 12 Vector contains 3. Elements in vector: 1 2 3 4 5.45 6.08 7 9.4 10 11 12
栈(Stack) 栈实现了一个后进先出(LIFO)的数据结构。 可以把栈理解为对象的垂直分布的栈,当添加一个新元素时,就将新元素放在其他元素的顶部。 当从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。 栈是Vector的一个子类。除了由Vector定义的所有方法,自己也定义了一些方法。
import java.util.*; public class StackDemo { 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); } public static void main(String args[]) { Stack<Integer> st = new Stack<Integer>(); System.out.println("stack: " + st); showpush(st, 42); showpush(st, 66); showpush(st, 99); showpop(st); showpop(st); showpop(st); try { showpop(st); } catch (EmptyStackException e) { System.out.println("empty stack"); } } } 以上实例编译运行结果如下: stack: [ ] push(42) stack: [42] push(66) stack: [42, 66] push(99) stack: [42, 66, 99] pop -> 99 stack: [42, 66] pop -> 66 stack: [42] pop -> 42 stack: [ ] pop -> empty stack
字典 字典(Directionary)类是一个抽象类。它定义了键映射到值得数据结构。当想通过特定的键而不是整数索引访问数据时,应该使用Dictionary。由于Dictionary是抽象类,所以它只提供了键映射到值得数据结构,而没有提供特定的实现。
这个类已经过时了。在实际开发中可以实现Map接口获取键值的存储功能。
哈希表(Hashtable) 提供了一种在用户定义键结构的基础上来组织数据的手段。 例如,在地址列表的哈希表中,可以根据邮政编码作为键来存储和排序数据,而不是通过人名。
和HashMap很类似,但是它支持同步。 Hashtabel定义了四个构造方法。 第一个是默认构造方法: Hashtable() 第二个构造函数创建指定大小的哈希表 Hashtable(int size) 第三个构造方法创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例。 填充比例必须介于0.0和1.0直接,它决定了哈希表在重新调整大小之前的充满程度。 Hashtable(int size,float fillRatio) 第四个构造方法创建了一个以M中元素为初始化元素的哈希表。 哈希表的容量被设置为M的两倍。 Hashtable(Map m)
import java.util.*; public class HashTableDemo { public static void main(String args[]) { // Create a hash map Hashtable balance = new Hashtable(); Enumeration names; String str; double bal; balance.put("Zara", new Double(3434.34)); balance.put("Mahnaz", new Double(123.22)); balance.put("Ayan", new Double(1378.00)); balance.put("Daisy", new Double(99.22)); balance.put("Qadir", new Double(-19.08)); // Show all balances in hash table. names = balance.keys(); while(names.hasMoreElements()) { str = (String) names.nextElement(); System.out.println(str + ": " + balance.get(str)); } System.out.println(); // Deposit 1,000 into Zara's account bal = ((Double)balance.get("Zara")).doubleValue(); balance.put("Zara", new Double(bal+1000)); System.out.println("Zara's new balance: " + balance.get("Zara")); } } 以上实例编译运行结果如下: Qadir: -19.08 Zara: 3434.34 Mahnaz: 123.22 Daisy: 99.22 Ayan: 1378.0 Zara's new balance: 4434.34
属性(Properties) properties继承与Hashtable表示一个持久的属性集。属性列表中每个键及其对应值都是一个字符串。 Properties类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。 Properties定义如下实例变量。这个变量持有一个Properties对象相关的默认属性列表。
Properties defaults;
第一个构造方法没有默认值 Properties() 第二个构造方法使用propDefault作为默认值 。两种情况下,属性列表都为空。 Properties(Properties propDefault)
Java数据结构
Java工具包提供了强大的数据结构,在java中的数据结构主要包括以下几种接口和类:
枚举
枚举接口虽然本身不属于数据结构,但它在其它数据结构的范畴里应用很广。枚举接口定义了一种从数据结构中取回连续元素的方式。 例如,枚举定义了一个叫nextElement的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。
Enumeration接口 hasMoreElements()测试此枚举是否包含更多的元素。 nextElement()如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
位集合 实现了一组可以单独设置和清除的位或标志。 该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一位,然后对位进行适当的设置或清除,就可以对布尔值进行操作了。 一个Bitset类创建一种特殊类型的数组来保存位值。Bitset定义了两个构造方法。 第一个构造方法创建一个默认的对象: BitSet() 第二个方法允许用户指定初始大小。所有位初始化为0. BitSet(int size)
向量 向量类和传统数组非常相似,但Vector的大小能够根据需要动态的变化。 和数组一样,Vector对象的元素也能通过索引访问。 使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。 支持4种构造方法。 第一种构造方法创建一个默认的向量,默认大小为10; Vector() 第二种构造方法创建指定大小的向量。 Vector(int size) 第三种构造方法创建指定大小的向量,并且增量用incr指定。增量表示向量每次增加的元素数目。 Vector(int size,int incr) 第四种构造方法创建一个包含集合c元素的向量 Vector(Collection c)
除了从父类继承的方法外Vector还定义了以下方法:
栈(Stack) 栈实现了一个后进先出(LIFO)的数据结构。 可以把栈理解为对象的垂直分布的栈,当添加一个新元素时,就将新元素放在其他元素的顶部。 当从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。 栈是Vector的一个子类。除了由Vector定义的所有方法,自己也定义了一些方法。
字典 字典(Directionary)类是一个抽象类。它定义了键映射到值得数据结构。当想通过特定的键而不是整数索引访问数据时,应该使用Dictionary。由于Dictionary是抽象类,所以它只提供了键映射到值得数据结构,而没有提供特定的实现。
这个类已经过时了。在实际开发中可以实现Map接口获取键值的存储功能。
哈希表(Hashtable) 提供了一种在用户定义键结构的基础上来组织数据的手段。 例如,在地址列表的哈希表中,可以根据邮政编码作为键来存储和排序数据,而不是通过人名。
和HashMap很类似,但是它支持同步。 Hashtabel定义了四个构造方法。 第一个是默认构造方法: Hashtable() 第二个构造函数创建指定大小的哈希表 Hashtable(int size) 第三个构造方法创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例。 填充比例必须介于0.0和1.0直接,它决定了哈希表在重新调整大小之前的充满程度。 Hashtable(int size,float fillRatio) 第四个构造方法创建了一个以M中元素为初始化元素的哈希表。 哈希表的容量被设置为M的两倍。 Hashtable(Map m)
属性(Properties) properties继承与Hashtable表示一个持久的属性集。属性列表中每个键及其对应值都是一个字符串。 Properties类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。 Properties定义如下实例变量。这个变量持有一个Properties对象相关的默认属性列表。
Properties defaults;
第一个构造方法没有默认值 Properties() 第二个构造方法使用propDefault作为默认值 。两种情况下,属性列表都为空。 Properties(Properties propDefault)