java类库的java.util包中有一组数据结构,它们让您能够更灵活地组织和操纵数据。
接口Iterator提供了一种以定义好的顺序遍历一系列元素的标准方式。
来看看Iterator定义的三个方法:
方法hasNext()定义了结构是否还有包含其他元素。可调用该方法来查看是否可以继续遍历结构。
方法next()获得结构中的下一个元素。如果没有更多的元素,next()将引发NoSuchElementException异常。为避免这种异常,应结合使用hasNext()和next()来确保还有元素可检索。
使用BitSet类,可以用位来存储布尔值,而无须通过按位运算来提取位值。您只需要使用索引来引用每一位。BitSet的另一个优点是,它可以自动增大,以表示程序所需的位数。
BitSet connex = new BitSet();
BitSet connex = new BitSet(4);
// 不管使用哪个构造函数,新位组中的所有位都将被初始化为false
class ConnectionAttributes {
public static final int FLEXIBLE = 3;
}
connex.set(ConnectionAttributes.FLEXIBLE);
// 设置属性
connex.clear(ConnectionAttributes.FLEXIBLE);
// 清除属性
boolean isWriteable = connex.get(ConnectionAttributes.FLEXIBLE);
// 使用get方法来获得位组中的各个位
int numBits = connex.size();
// 使用size方法可以确定位组表示了多少位
类ArrayList是最流行的java数据结构之一,它实现了可缩放的对象数组,比数组更灵活、更有用。由于类ArrayList负责根据需要改变长度,所有它必须根据元素的增加和删除决定缩放多少。
ArrayList golfer = new ArrayList();
ArrayList golfer = new ArrayList(30);
// 该构造函数创建了一个不含任何元素的默认链表
golfer.add("Ko");
golfer.add(1,"kim");
// add(object)方法将元素加入到链表中
String s1 = (String) golfer.get(0);
// 由于链表的索引值是从0开始的,所以第一个get()调用返回的是字符串Ko
golfer.remove(3);
golfer.remove("ko");
// 删除指定位置的元素或指定的元素
golfer.set(1,"Pressel");
// 上述将字符串kim替换为字符串Pressel
golfer.clear();
// 可以使用clear()来删除所有的元素
boolean isThere = golfer.contains("kerr");
// 检验链表是否包含指定元素
int i = golfer.indexOf("ko");
// 如果链表包含指定的元素,indexOf方法将返回该元素的索引,否则返回-1.
int size = golfer.size();
// 将方法size判断链表包含多少个元素
golfer.trimToSize();
// 使用该方法让容量与长度相等
如果要依次处理链表的所有元素,可以使用方法iterator(),它返回一个Iterator,其中包含可供您遍历的元素列表
Iterator it = golfer.iterator();
// 下面的for循环使用迭代器及其方法来遍历整个链表
for (Iterator i = golfer.iterator(); i.hasNext(); ) {
String name = (String) i.next();
System.out.println(name);
}
Stack s = new Stack();
s.push("one");
// 可以使用方法push()将新元素加入堆栈,将元素压入到栈顶
String s1 = (String) s.pop();
// 将最后两个字符串从堆栈中弹出,只留下前4个字符串
String s3 = (String) s.peek();
// 获得栈顶元素,但并不将其从堆栈弹出
int i = s.search("Two");
// 如果找到,方法search将返回该元素到栈顶的距离,否则返回-1
boolean isEmpty = s.empty();
// 判断堆栈是否为空
接口Map为实现键映射数据结构定义了一个框架,这种结构可用于存储通过键值引用的对象。
Rectangle r1 = new Rectangle(0,0,5,5);
look.put("small",r1);
// 将对象加入字典
Rectangle r = (Rectangle) look.get("small");
// 获取字典中的对象
look.remove("large");
// 使用remove()来删除指定键值对应的元素
int size = look.size();
// 使用size()来获悉结构包含多少个元素
boolean isEmpty = look.isEmpty();
// 使用方法isEmpty()来检查结构是否为空
类HashMap实现了接口Map,并提供了键映射数据结构的完整实现。散列映射让您能够基于某种类型的键值来存储数据,并具有由负载系数定义的效率。
HashMap hash = new HashMap();
HashMap hash = new HashMap(20);
HashMap hash = new HashMap(20,0.5F);
// 构造函数
hash.clear();
// 删除散列映射中的所有键值和元素
Rectangle box = new Rectangle(0,0,5,5);
boolean isThere = hash.containsValue(box);
// 检查散列映射是否包含指定的对象
boolean isThere = hash.containsKey("Small");
// 在散列映射中查找指定的键值
可使用java语言支持的泛型来指定数据结构期望的类。
ArrayList<Integer> zipCodes = new ArrayList<>();
HashMap<String,Float> quality = new HashMap<String,Float>();
见到菱形运算符后,编译器通过推断来确实正确的类,以确保语句是有意义的