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()方法。
Map(映射):集合中的每一个元素包含一对(键对象->值对象),集合中没有重复键对象,可以有重复的值对象。它的有些实现类能对集合中的键对象进行排序,如TreeMap。
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() 返回一个数组,该数组包含集合中的所有元素;//......
boolean hasNext(): 判断集合中的元素是否遍历完毕,如果没有,则返回 true。E next(): 返回下一个元素。void remove(): 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
public abstract class Collator extends Object implements Comparator<Object>, Cloneable
Scanner sc = new Scanner(System.in);int i = sc.nextInt();
Scanner sc = new Scanner(new File("myNumbers"));while (sc.hasNextLong()) { long aLong = sc.nextLong();}