博学谷——让IT教学更简单,让IT学习更有效
}
foreach循环虽然书写起来很简洁,但在使用时也存在一定的局限性。当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。
ListIterator接口
ListIterator中提供了hasPrevious()方法和previous()方法,通过这两个方法可以实现反向迭代元素,另外还提供了add()方法用于增加元素,接下来通过一个案例来学习ListIterator迭代器的使用:
import java.util.*; public class Example07 {
}
public static void main(String[] args) { }
ArrayList list = new ArrayList(); list.add(\list.add(\list.add(\System.out.println(list);
ListIterator it = list.listIterator(list.size()); }
Object obj = it.previous(); System.out.print(obj + \
while (it.hasPrevious()) {
Enumeration接口
? Vector集合
Vevtor集合是List接口的一个实现类,用法与ArrayList完全相同,区别在于Vector集合是线程安全的,而ArrayList集合是线程不安全的。在Vector类中提供了一个elements()方法用于返回Enumeration对象,通过Enumeration对象就可以遍历该集合中的元素。
下面的案例演示了如何使用Enumeration对象遍历Vector集合,具体如下:
import java.util.*; public class Example08 {
public static void main(String[] args) { }
Vector v = new Vector(); v.add(\v.add(\v.add(\
Enumeration en = v.elements(); while (en.hasMoreElements()) { }
Object obj = en.nextElement(); System.out.println(obj);
博学谷——让IT教学更简单,让IT学习更有效
} 第三课时 (Set接口简介、HashSet集合、TreeSet 集合、Map接口和HashMap集合) Set接口简介 Set接口继承自Collection接口,它与Collection接口中的方法基本一致,只是比Collection接口更加严格。Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。Set接口主要有两个实现类,分别是HashSet和TreeSet。 HashSet集合 HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且 元素都是无序的。HashSet集合存储元素的过程如下图所示。 TreeSet集合 TreeSet是Set接口的另一个实现类,它内部采用平衡二叉树来存储元素,这样的结构可以保证TreeSet集合中没有重复的元素,并且可以对元素进行排序。二叉树中元素的存储结构如下图所示。 元素元素元素元素元素元素元素 上图所示的二叉树中,同一层的元素,左边的元素总是小于右边的元素。 注意:集合中的元素在进行比较时,都会调用compareTo()方法,该方法是Comparable接口中定义的,因此要想对集合中的元素进行排序,就必须实现Comparable接口。 博学谷——让IT教学更简单,让IT学习更有效
Map接口 Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象 Value,键和值对象之间存在一种对应关系,称为映射。从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。Map接口中定义的一些通用方法如下表所示。 功能描述 将指定的值与此映射中的指定键关联(可选操void put(Key k, Value v) 作) 返回指定键所映射的值;如果此映射不包含该Object get(Object key) 键的映射关系,则返回 null boolean containsKey(Object 如果此映射包含指定键的映射关系,则返回 key) true。 boolean containsValue(Object 如果此映射将一个或多个键映射到指定值,则value) 返回 true Set keySet() 返回此映射中包含的键的 Set 视图 Collection
}
class MyComparator implements Comparator { // 自定义比较器 }
public int compare(Object obj1, Object obj2) { }
String id1 = (String) obj1; //强转为String类型 String id2 = (String) obj2;
return id2.compareTo(id1); // 将比较之后的值返回 }
}
Properties集合
Map接口中还有一个实现类Hashtable,它和HashMap相比区别在于Hashtable是线程安全的。Hashtable类有一个子类Properties在实际应用中非常重要,Properties主要用来存储字符串类型的键和值。经常使用Properties集合来存取应用的配置项。
通过案例来学习Prorperties集合对配置项进行存取,具体如下:
import java.util.*; public class Example22 {
public static void main(String[] args) { }
Properties p=new Properties(); p.setProperty(\ p.setProperty(\ p.setProperty(\ Enumeration names = p.propertyNames(); while(names.hasMoreElements()){ String key=(String) names.nextElement(); String value=p.getProperty(key); System.out.println(key+\ } }
泛型
我们在程序中无法确定一个集合中的元素到底是什么类型的。那么在取出
元素时,如果进行强制类型转换就很容易出错。在Java中引入了“参数化类型(parameterized type)”这个概念,即泛型。它可以限定方法操作的数据类型,在定义集合类时,可以使用“<参数化类型>”的方式指定该类中方法操作的数据类型,具体格式如下:
ArrayList<参数化类型> list = new ArrayList<参数化类型>();
在使用泛型后每次遍历集合元素时,可以指定元素类型为String,而不是 Object,这样就避免了再程序中进行强制类型转换。
Collections工具类
? Collections工具类简介
Collections类中提供了大量的方法用于对集合中元素进行排序、查找和修
相关推荐: