在学习一门语言时,分析他的数据结构是必要工作。JAVA中的数据结构包括以下几种类和接口:
不必多说,基础教程中讲过。
一个Bitset类创建一种特殊类型的数组来保存位置。通俗点讲,Bitset是用来记录位置索引的一种数组。BitSet中数组大小会随需要增加。他有两种构造方式,分别如下:
BitSet bits1 = BitSet();
BitSet bits2 = BitSet(int size);
向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。
和数组一样,Vector对象的元素也能通过索引访问。使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。
vector支持四种构造方法:
Vector();//创建一个默认的向量
Vector(int size);//创建指定大小的向量
Vector(int size,int incr);//创建指定大小的向量,并且增量用incr指定. 增量表示向量每次增加的元素数目
Vector(Collection c);//创建一个包含集合c元素的向量
使用如下所示:
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 Double(2));
System.out.println("Capacity after four additions: " + v.capacity());
他是一个后进先出的数据结构。示例如下:
Stack st = new Stack();
st.push(new Integer(a));//入栈
System.out.println("push(" + a + ")");
Integer a = (Integer) st.pop();//出栈
System.out.println(a);
字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。
Dictionary类已经过时了。在实际开发中,你可以实现Map接口来获取键/值的存储功能。
Map使用如下所示:
Map m1 = new HashMap();
m1.put("Zara", "8");
它和HashMap类很相似,但是它支持同步。像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。
用法如下:
Hashtable balance = new Hashtable();
double bal;
balance.put("Zara", new Double(3434.34)); //添加键值对
bal = ((Double)balance.get("Zara")).doubleValue(); //通过键获取值
balance.put("Zara", new Double(bal+1000));
System.out.println("Zara's new balance: " + balance.get("Zara"));
Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。
Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。
用法如下:
import java.util.*;
public class PropDemo {
public static void main(String args[]) {
Properties capitals = new Properties();
Set states;
String str;
capitals.put("Illinois", "Springfield");
capitals.put("Missouri", "Jefferson City");
capitals.put("Washington", "Olympia");
capitals.put("California", "Sacramento");
capitals.put("Indiana", "Indianapolis");
// Show all states and capitals in hashtable.
states = capitals.keySet(); // get set-view of keys
Iterator itr = states.iterator();
while(itr.hasNext()) {
str = (String) itr.next();
System.out.println("The capital of " +
str + " is " + capitals.getProperty(str) + ".");
}
System.out.println();
// look for state not in list -- specify default
str = capitals.getProperty("Florida", "Not Found");
System.out.println("The capital of Florida is " + str + ".");
}
}
集合框架被设计成要满足以下几个目标。
为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet等,除此之外你也可以通过这些接口实现自己的集合。
序列化说白了就是将对象表示成一个字节序列,该字节序列能够表示对象的数据、有关对象类型的信息和存储在对象中数据的类型。序列化一般都是将对象序列化成字节,然后存入文件中。反序列化就是从文件中读取字节,然后根据字节反序列化出该对象以及他包含的信息。
文件的存储与读过程就是一个很好的序列化与反序列化的例子。
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。
java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。
java.net包中提供了两种常见的网络协议的支持:
一个线程的完整周期如下所示: