Java--集合

java——集合篇


                                                               
Collection接口
    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
    所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。

如何遍历Collection中的每一个元素?

Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()){

   Object obj = it.next(); // 得到下一个元素
       }



Set接口:  set接口是
collection接口的子类,Set没有提供额外的方法,但实现set接口中的容器类中的元素是无序的(TreeSet是有序的,数据结构为二叉树),而且不可以重复。
实现set接口的容器类有HashSet  TreeSet等;


List接口:List是collection的子接口,实现list接口的容器类中的元素是有序的,而且可以重复、因为List以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
List容器中的元素都是对应一个整数型的序号记载在其容器中的位置,可以根据序号存取容器中的元素。
实现List的容器类有 ArrayList  LinkedList  Vector等

Map接口:实现了Map接口的类用来存储“键 - 值”对。Map是一种把键对象和值对象进行

关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。


Map类中存储的键值对通过建来标识,所以键值不能重复。

实现了Map的容器类有HashMap和TreeMap HashTable


Collections (不是Collection) 类是针对集合类的一个帮助类。提供了一系列静态方法(全都是静态方法,不需要实例化直接调用即可)例如:搜索,排序,线程完全化等操作。

Eg.:   Collections.max(Collection coll); 取coll中的最大元素

Eg.Collections.sort(List list); 对List中的元素排序。



ArrayList使用一个内置的数组来存储元素,这个数组的起始容量是10.当数组需要增长时,新的容量按如下公式获得:新容量=(旧容量*3)/2+1,也就是说每一次容量大概会增长50%。这就意味着,如果你包含大量元素的ArrayList对象,那么最终将有很大的空间会被浪费掉,这个浪费是由ArrayList的工作方式本身造成的。如果没有足够的空间来存放新的元素,数组将不得不被重新进行分配以便能够增加新的元素。对数组进行重新分配,将会导致性能急剧下降。如果我们知道一个ArrayList将会有多少个元素,我们可以通过构造方法来指定容量。我们还可以通过trimToSize方法在ArrayList分配完毕之后去掉浪费掉的空间。


LinkedList实现了List接口,LinkedList是基于链表的数据结构。 允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

   注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));


两个List的选择当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。


HashMap,HashTable,HashSet区别

 


 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“


HashTable是继承自旧的Dinctionary类。()


HashSet 是Set接口的实现类,是一个集合,通过使用Hashcode保证一个Set中的元素唯一.HashSet底层是采用HashMap实现的.

Hashtable和HashMap的区别:

  1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
  2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
  Map Collections.synchronizedMap(Map m)
  这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
  3.在HashMap中,null可以作为Key,这样的Key只有一个;可以有一个或多个Key所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该Key,也可以表示该Key所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个Key,而应该用containsKey()方法来判断。
       4.H ashMap 去掉了 HashTable  contains 方法,但是加上了 containsValue ()和 containsKey ()方法。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值