日历分析(三) java集合类

以前写的笔记:


集合与数组的区别:数组保存元素既可以是基本类型的值,也可以是对象的引用。而集合只能保存对象
的引用。
集合由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: 实现这样一个映象,对象是按键升序排列的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值