Java集合类(1)

Java集合类(一)
浅谈Java集合类的基本结构
        当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。
        集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身,称集合中的对象就是指集合中对象的引用(reference)。集合类型主要有3种:set(集)、list(列表)和map(映射);JDK5中添加了Queue(队列)。
        Set(集):集合中的对象不按特定方式排序,只是简单的把对象加入集合中,并且没有重复的对象。它的有些实现类能对集合中的对象按照特定方式排序,如TreeSet,它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。
        Set接口主要实现类:HashSet和TreeSet。
        HashSet :按照哈希算法存取集合中的对象,存取速度比较快。有一个主要的子类LinkedHashSet,该子类还实现了链表的数据结构,链表的数据结构能提高插入和删除元素的性能。注意:HashSet的内部实现是HashMap
        TreeSet:实现了SortedSet接口,具有排序功能,支持自然排序和客户化排序。注意:TreeSet的内部实现实际上是TreeMap
        当向集合中加入一个对象时,HashSet会调用对象的hashCode方法来获得哈希码,然后根据这个哈希码计算出对象在集合中的存放位置。
        注意:如果一个类重写equals方法,那么相应的也要重写hashCode方法。规则是:如果两个对象通过equals方法比较返回true,那么它们的hashCode方法的返回值也应该相同。
        List(列表):集合中的对象按照索引位置排序,可以有重复的对象,允许按照对象在集合中的索引位置检索对象。List与数组有些相似。   
        Queue(队列):队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。Queue 实现通常不允许插入 null 元素,Queue 实现通常未定义equals()和hashCode()方法。
Java集合类(1)
        Map(映射):集合中的每一个元素包含一对(键对象->值对象),集合中没有重复键对象,可以有重复的值对象。它的有些实现类能对集合中的键对象进行排序,如TreeMap。
Java集合类(1)
1.public interface Iterable<T>
        实现这个接口允许对象成为 "foreach" 语句的目标。
        Iterator<T> iterator()      返回一个在一组 T 类型的元素上进行迭代的迭代器。
2.public interface Collection<E> extends Iterable<E>
        Collection层次结构中的根接口。Collection表示一组对象,这些对象也称为collection 的元素。
        Collection接口中申明了(Set和List)的通用方法:
boolean add(Object o) 向集合中加入一个对象的引用;
boolean remove(Object o) 从集合中删除一个对象的引用;
Iterator iterator() 返回一个Iterator对象,可用来遍历集合中的元素;
Object[] toArray() 返回一个数组,该数组包含集合中的所有元素;
//......

        注:Set接口和List接口都继承自Collection接口,所以它们实现类的对象都拥有上述的方法。而Map接口没有继承Collection接口,所以它的实现类对象没有上述方法
        Iterator iterator() 和 Object[] toArray() 作用均为获得集合中的所有元素。前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组。
        Iterator对象被称为迭代器,用于遍历集合中的元素,它隐藏了底层集合的数据结构,向客户程序提供了遍历各种类型集合的统一接口,它拥有3个方法:
boolean hasNext(): 判断集合中的元素是否遍历完毕,如果没有,则返回 true。
E next():          返回下一个元素。
void remove():     从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

        使用Iterator对集合元素进行迭代时,集合元素不能被改变(Iterator的remove方法除外),否则会产生异常ConcurrentModificationException
Comparator<T>强行对某个对象 collection 进行整体排序的比较函数。
        常用子类
public abstract class Collator extends Object implements Comparator<Object>, Cloneable

        Collections它包含在collection上操作的多态算法,即"包装器",包装器返回由指定collection支持的新collection,以及少数其他内容。
        Random用于生成伪随机数流,很多应用程序会发现 Math.random() 方法更易于使用。
        ResourceBundlejava资源包,详见Java国际化
        public final class Scanner一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
     long aLong = sc.nextLong();
}

        Timer一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。 实现注意事项:所有构造方法都启动计时器线程。
        TimeZone表示时区偏移量,也可以计算夏令时。
<<To Be Continued>>