Java Collection和Itrator接口
Collection接口中的定义的操作集合的的方法
boolean add(object o):添加对象,返回true
Itrator接口(迭代器)中定义的如下三个方法
hasNext()
next()
remove()
set集合(无序集合)
set集合判断两个元素是否相等是通过equals(判断两个对象的值是否相等)
HashSet类
通过判断对象的hashcode相等和equals相等来判断两个对象相等
注意:插入元素若是可变元素,那个它的hashcode也可能发生改变
HashSet类的子类LinkedHashSet (有序)
TreeSet类(采用红黑树的数据结构):是SortedSet接口的实现类,可以保证元素处于排序状态
自然排序:调用集合中的元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后按照升序排序
注意:如果想要往TreeSet中添加对象,该对象的类必须要实现Comparable接口,并且实现接口中的comparaTo方法
注意二:在TreeSet集合中若插入可变元素的Field,一旦改变了元素的Field,当再次想删除该对象, 将会产生失败,所以建议在使用TreeSet和HashSet时,确定要插入的元素是不可变的。
定制排序:通过借助Comparator接口的帮助,在该接口中包含了一个int compare(T o1,T o2)的方法可以实现,
EnumSet集合:枚举类集合
上述三个set集合都是线程不安全的,可以使用collection工具类的synchroizedSortedSet方法来包装该set集合,此操作最好在创建时进行,防止岁set集合的意外非同步访问,例如SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));
List集合提供了一个ListIterator方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门的List方法。
ArrayList和Vector都是都为List类的两个典型实现完全支持List接口的全部功能:
参数initialCapacity参数决定集合的大小,会自动增加,也可以指定大小
还提供额外的两个方法来指定大小, void ensureCapacity(int minCapacicy); //表示数组的长度增加minCapacity
void trimToSize(); //调整数组大小为当前元素的个数;
ArrayList集合不是线程安全的,但是Collection工具类,它可以将ArrayList变成线程安全
Vector还提供一个Stack子类来模拟栈这种数据结构,但是也不推荐使用,推荐使用LinkedList,它是List的实现类,是一个基于链表的实现的List类,LinkedList既实现了List接口,也实现了Deque接口,由于实现了Deque接口,因此可以作为栈来使用
Map接口:不能存在重复的key-value键值对
实现类:HashMap:线程的不安全(可以通过使用Collection工具类使他变为线程安全);HashMap对象里面如果存在可变键值对,不能修改其中的key值,否则会出现无法正确访问其key值里面的value,访问时其中的value将变成null,只能删除
实现类:Hashtable:线程安全,不允许存在key为null,或者value为null
Hashtable子类:Properties类:方便修改属性文件,还提供读写field文件的方法
实现类:SortMap接口的TreeMap实现类:(TreeMap的所有key必须实现Comparable接口,也就是重写Comparable的equals()和comparedTo()方法)
实现类:WeakHashMap:与HashMap类的使用方法基本相同,但是HashMap的Key保留了对实际对象的强引用,这意味着只要该HashMap对象不被销毁,该HashMap的所有的Key所引用的对象不会被垃圾回收,也不会自动删除这些Key所对应的Key-value键值对;WeakHashMap中的每个Key对象只持有对实际对象的弱引用,当垃圾回收了该Key所引用的实际对象之后,WeakHashMap会自动删除该key对应的key-value对
+