代码记心中,知识记脑海。

[宏然依依学习笔记]

Java中的数据结构主要包括以下几种接口和类:
1.枚举(Enumeration)
2.位集合(BitSet)
3.向量(Vector)
4.栈(Stack)
5.字典(Dictionary)
6.哈希表(Hashtable)
7.属性(Properties)

枚举(Enumeration)

枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。
例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。
总结一些Enumeration声明的方法:
1.boolean hasMoreElements( )
测试此枚举是否包含更多的元素。
2 Object nextElement( )
如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
代码示例:

import java.util.Vector;
import java.util.Enumeration;

public class EnumerationTester {

   public static void main(String args[]) {
      Enumeration days;
      Vector dayNames = new Vector();
      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中数组大小会随需要增加。

BitSet定义了两个构造方法:
1.BitSet():创建一个默认的对象
2.BitSet(int size):允许用户指定初始大小。所有位初始化为0。

向量(Vector)

向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。
和数组一样,Vector对象的元素也能通过索引访问。
使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。

Vector类实现了一个动态数组,和ArrayList和相似,但是两者是不同的:
1.Vector是同步访问的。
2.Vector包含了许多传统的方法,这些方法不属于集合框架。
Vector主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。
Vector类支持4种构造方法
1.Vector():创建一个默认的向量,默认大小为10
2.Vector(int size):创建指定大小的向量
3.Vector(int size,int incr):创建指定大小的向量,并且增量用incr指定. 增量表示向量每次增加的元素数目
4.Vector(Collection c):创建一个包含集合c元素的向量

栈(Stack)

栈(Stack)实现了一个后进先出(LIFO)的数据结构;
你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部;
当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出;
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
堆栈只定义了默认构造函数,用来创建一个空栈:Stack();
堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法:
1.boolean empty()
测试堆栈是否为空。
2 Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。
3 Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。
4 Object push(Object element)
把项压入堆栈顶部。
5 int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。
代码示例:

import java.util.*;

public class StackDemo {

   static void showpush(Stack st, int a) {
      st.push(new Integer(a));
      System.out.println("push(" + a + ")");
      System.out.println("stack: " + st);
   }

   static void showpop(Stack 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 st = new Stack();
      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");
      }
   }
}

字典(Dictionary)

字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构;
当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary;
由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。

Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。
给出键和值,你就可以将值存储在Dictionary对象中。一旦该值被存储,就可以通过它的键来获取它。所以和Map一样, Dictionary 也可以作为一个键/值对列表。

Dictionary类已经过时了。在实际开发中,你可以实现Map接口来获取键/值的存储功能。

哈希表(Hashtable)

Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。
例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人的名字。
哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。

像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。
然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。

Hashtable定义了四个构造方法:
1.Hashtable():默认构造方法:
2.Hashtable(int size):创建指定大小的哈希表
3.Hashtable(int size,float fillRatio):创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例。填充比例必须介于0.0和1.0之间,它决定了哈希表在重新调整大小之前的充满程度:
4.Hashtable(Map m):创建了一个以M中元素为初始化元素的哈希表。
哈希表的容量被设置为M的两倍。

属性(Properties)

Properties 继承于 Hashtable.Properties 类表示了一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。
Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。

Properties 定义如下实例变量.这个变量持有一个Properties对象相关的默认属性列表。
Properties defaults;
Properties类定义了两个构造方法. 第一个构造方法
1.Properties() 没有默认值;
2.Properties(Properties propDefault):使用propDefault 作为默认值
两种情况下,属性列表都为空:

补java Map接口知识:
Java Map 接口

Map接口中键和值一一映射. 可以通过键来获取值。
1.给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值。
2.当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常.
3.当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。
4.当在不允许使用Null对象的Map中使用Null对象,会抛出一个NullPointerException 异常。
5.当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常。

Map功能代码示例:

import java.util.*;

public class CollectionsDemo {

   public static void main(String[] args) {
      Map m1 = new HashMap(); 
      m1.put("Zara", "8");
      m1.put("Mahnaz", "31");
      m1.put("Ayan", "12");
      m1.put("Daisy", "14");
      System.out.println();
      System.out.println(" Map Elements");
      System.out.print("\t" + m1);
   }
}

结果:
Map Elements {Mahnaz=31, Ayan=12, Daisy=14, Zara=8}