日历分析(三) java集合类

来源:互联网 发布:sql注入登录 编辑:程序博客网 时间:2024/04/30 18:54

以前写的笔记:


集合与数组的区别:数组保存元素既可以是基本类型的值,也可以是对象的引用。而集合只能保存对象
的引用。
集合由Collection和Map接口派生出。
Collection{
set [EnumSet , SortedSet ( TreeSet), HashSet (LinkedHashSet)], 
Queue [ Deque ( LinkedList ) PriorityQueue], 
List [LinkedList,ArrayList,Vector( Stack)] 
}
Map{
EnumMap,
 WeakHashMap, 
IdentityHashMap,
 HashMap[LinkedHashMap], 
Hashtable[Properties], 
SortedMap[TreeMap]
}
Iterator接口遍历集合元素,其对象被称为迭代器。
例如:

Collection books=new HashSet();//获取books集合对应的迭代器Iterator it=books.iterator();while(it.hasNext()){String book=(String)it.next();}
Map接口实现的类的一个功能特征:Map保存的每项数据都是key-value 对,key不可重复,根
据key获取值。
Set:添加对象到Set中,Set无法记住添加元素的顺序,所以元素不能重复。
List:类似于一个可变长度的数组,记住添加元素的顺序。
Map:与Ste类似,不过是存key-value对。
HashSet:按hash算法存储集合中的元素,具有良好的存取和查找功能,不能保证元素的排列顺序,
不同步(多线程访问一个HashSet须通过代码另外来保证同步),集合元素可以是null。
通过对象的HashCode决定存储的位置,HashCode不相等且equals方法比较不相等即可存储。
LinkedHashSet:HashSet的子类,使用链表维护元素的次序。
TreeSet:是SortedSet接口的唯一实现,保证集合元素处于排序状态。采用红黑树的数据结构对元
素进行排序,调用集合元素的comparableTo()方法比较元素的大小。两种排序方法:自然排序(默
认,升序),定制排序。
注意:向TreeSet中添加元素时,只有第一个元素无须实现Comparable接口,后面的元素必须实
现该接口。
定制排序:
class M{  int age;public M(int age){this.age=age;}}public class TestTreeSet{public static void main(String[] args){TreeSet ts=new TreeSet(new Comparator(){public int compare(Object 01,Object O2){M m1=(M)o1;M m2=(M)o2;if(m1.age>m2.age) return -1;else if(m1.age==m2.age) return 0;else return 1;}});}}
List接口:List额外有一个listIterator接口,其增加了向前迭代功能
hasPrevious(),previous(),add.
Vector提供了一个Stcak子类。
Queue接口:队列,实现类有LinkedList,PriorityQueue。
LinkedList可以当作栈也可以当作双向队列来使用。
priorityQueue ” “ 是一个 标准队列 实现类,不是真正的队列,而是取出的是队列中最小的元素。
Map:
HashMap:线程不安全,强引用,不删除是不会被回收。Hashtable:线程安全。
WeakHashMap:弱引用。


网上找的总结

List总结:

1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];

2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

3. 所有的List中可以有null元素,例如[ tom,null,1 ];

4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。

Set总结:

1. Set实现的基础是Map(HashMap);

2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象。


简介:

HashSet: 使用HashMap的一个集的实现。虽然集定义成无序,但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap对象实现集的存储和检索操作是在固定时间内实现的.
TreeSet: 在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用 了一个TreeMap.
列表:
Vector: 实现一个类似数组一样的表,自动增加容量来容纳你所需的元素。使用下标存储和检索对象就象在一个标准的数组中一样 。你也可以用一个迭代器从一个Vector中检索对象。Vector是唯一的同步容器类??当两个或多个线程同时访问时也是性能良好的。
Stack: 这个类从Vector派生而来,并且增加了方法实现栈??一种后进先出的存储结构。
LinkedList: 实现一个链表。由这个类定义的链表也可以像栈或队列一样被使用。
ArrayList: 实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步。
映射:
HashTable: 实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类 是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。
HashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。
WeakHashMap: 实现这样一个映象:通常如果一个键对一个对象而言不再被引用,键/对象对将被舍弃。这与HashMap形成对照,映象 中的键维持键/对象对的生命周期,尽管使用映象的程序不再有对键的引用,并且因此不能检索对象。
TreeMap: 实现这样一个映象,对象是按键升序排列的。