黑马程序员----java之集合(1)

来源:互联网 发布:anything软件 编辑:程序博客网 时间:2024/04/29 14:37
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------


Java集合的一些知识:

java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是java集合框架的根接口。






Iterator:迭代器
方法:
boolean hasNext():如果被迭代的集合元素还没有被遍历,则返回true;
Object next():返回集合里下一个元素。
void remove():删除集合里上一次next方法返回的元素。

当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何改变。
foreach循环遍历集合元素  for(Object obj:book)

Set接口
Set集合不允许包含相同的元素。
Set判断两个对象相同不是使用==运算符,而是根据equals方法。

  HashSet
按Hash算法来存储集合中的元素,具有很好的存取和查找性能。
特点:
不能保证元素的排列顺序,顺序有可能发生变化。
HashSet不是同步的。
集合元素值可以是null

向HashSet集合存入一个元素时,HashSet会调用该对象hashCode()方法来得到hashcode值,用来决定对象在HashSet中存储位置。如果equals方法比较相等,并且两个对象hashCode()方法返回值不相等,则可以添加成功。
  
  TreeSet
可以确保集合元素处的排序状态。根据元素的实际值来进行排序的。
TreeSet采用红黑树的数据结构对元素进行排序。
TreeSet支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet采用自然排序。
TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列。

添加两个以及两个以上元素时,对应的类要实现Comparable接口,否则会引发ClassCastException异常。
向TreeSet中添加的应该是同一个类的对象,否则也会引发ClassCastException.

通过compareTo方法与其他对象比较大小,然后根据红黑树算法决定它的存储位置。


List接口
ArrayList和Vector在用法上几乎完全相同,Vector是一个古老的集合。
它们显著区别是:ArrayList是线程不安全的,必须手动保证该集合的同步性。
但Voctor集合则是线程安全的,无线程序保证该集合的同步性。因此Vector的性能比ArrayList的性能要低。


Queue接口
Queue用于模拟了队列这种数据结构,队列通常是指"先进先出"的容器。

  LinkedList内部以链表的形式来保持集合中的元素,因此随机访问集合元素时性能较差,但插入,删除元素时性能非常出色。


Map
用于保持具有映射关系的数据。Map的key不允许重复。


HashMap and Hashtable 
Hashtable 是一个古老的Map实现类,
典型的区别:Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable性能高一点。
  Hashtable不允许使用null作为key和value,但HashMap可以使用null作为key或者value.

TreeMap也是基于红黑树对TreeMap中所有key进行排序,从而保证TreeMap中所有key-value对处于有序状态。

操作集合的工具类:Collections  集合框架的工具类。里面定义的都是静态方法。
reverse:反转  shuffle:随机排序   sort:升序排序   swap(List list,int i,int j):进行交换
max:最大值  min:最小值  

同步控制:Collections类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象。

Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。

Collections是集合框架中的一个工具类。该类中的方法都是静态的
提供的方法中有可以对list集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。


---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击