黑马程序员----------java基础知识加强之集合总概述

                       ----------------------android培训java培训、期待与您交流! ----------------------


    简单总结一下Collection集合体系,包括他的两个大子接口List、Set以及他们的实现类。

   

1)集合概述

首先要知道集合是一种工具类,可以用于存储数量不等的多个对象。
然后就是集合体系:java集合大致可以分为Set,List,Map3中体系。
(其实集合框架下还有很多集合但现在不需要掌握太多,以后慢慢学)
Collection|----Set   代表无序,不可重复的集合
    |----List  代表有序,重复的集合
    |----Queue 代表一种队列集合体现

Map 代表有映射关系的集合

2)用Iterator接口实现遍历集合元素

Iterator接口与其他集合框架成员不一样,它主要用于遍历Collection集合中的元素,
Iterator对象被称为迭代器。
代码如下:

class IteratorTest
{
 public static void main(String[] args)
 {
  Collection c = new HashSet();
  c.add("黑马Android");
  c.add("黑马云计算");
  c.add("黑马.Net");

  Iterator it = c.Iterator();
  while(it.hasNext())
  {
   String course = (String)it.next();
   System.out.println(course);
  }
  if(course.equals("黑马.Net"))
  {
   it.remove();
  }
  course = "黑马ios";
 }
 System.out.println(c);
}

当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量
,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何
影响。

3)Set集合

注意:Set判断两个对象相同不是用 == 运算符,而是根据equals方法。

1.HashSet类

主要是两个方法hashcode方法和equals方法
实际上当程序向HashSet集合中添加元素时,HashSet会根据该元素的hashCode值来计算他的存储位置,
也就是说,每个元素的hashCode值就可以决定他的存储“索引”

一个特别好的例子:
import java.util.*;

//类A的equals方法总是返回true,但没有重写其hashCode()方法
class A
{
 public boolean equals(Object obj)
 {
  return true;
 }
}
 //类B的hashCode()方法总是返回1,但没有重写其equals()方法
class B
{
 public int hashCode()
 {
  return 1;
 }
}
 //类C的hashCode()方法总是返回2,且有重写其equals()方法
class C
{
 public int hashCode()
 {
  return 2;
 }
 public boolean equals(Object obj)
 {
  return true;
 }
}
public class HashSetTest
{
 public static void main(String[] args)
 {
  HashSet books = new HashSet();
  //分别向books集合中添加两个A对象,两个B对象,两个C对象
  books.add(new A());
  books.add(new A());
  books.add(new B());
  books.add(new B());
  books.add(new C());
  books.add(new C());
  System.out.println(books);
 }
}

2.LinkedHashSet类

LinkedHashSet集合也是根据元素的hashcode值来决定元素存储位置的,但它同时使用
链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的,也就是说遍历LinkedHashSet
集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。

注意:虽然LinkedHashSet使用了链表记录集合元素的添加顺序,但LinkedHashSet依然是
HashSet,因此他依然不允许集合元素重复。

3.TreeSet类

TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。它是根据元素实际值大小
排序的。TreeSet是采用二叉树来进行存储集合元素的。
TreeSet支持两种排序方法:自然排序和定制排序(默认下是自然排序)

自然排序(实现Comparable):
TreeSet会调用集合元素的compareTo()方法来比较元素之间的大小关系,然后按升序排列。
(集合里的元素总是引用,但我们习惯上把被引用的的对象称为集合元素)

定制排序(提供一个Comparator对象与该集合关联(匿名内部类)):
通过Comparator接口帮助,该接口里包含了int compare(T o1,T o2)方法。

4.EnumSet类(这个现在了解就好)

4)List集合

1.List接口和ListIterator接口

首先我觉得学每个集合最重要的就是学他有什么方法,这就需要勤查API帮助文档。

ListIterator接口增加了向前迭代的功能,而且还能通过add方法向List集合中添加元素。

2.ArrayList和Vector实现类

他们是基于数组实现的List类,所以ArrayList和Vector实现类封装了一个动态的,允许再分配的
Object[]数组。

5)Queue集合

Queue集合用于模拟队列这种数据结构,队列通常是指“先进先出”的容器。队列的头部保存在队列中
存放时间最长的元素,队列的尾部保存在队列中存放时间最短的元素。

1.PriorityQueue实现类

是一个比较标准的队列实现,PriorityQueue类保存队列的元素的顺序并不是按加入队列的顺序,
而是按队列元素的大小进行重新排序。

6)Map<key,value>集合

发现一个学习Map集合的方法就是把Map中的key当做Set来看。

对于Map的常用实现类而言,HashMap和Hashtable的效率大致相同,因为他们的实现机制几乎完全
一样;但HashMap通常比Hashtable要快一点,因为后者需要额外的线程同步控制。TreeMap通常比
他们两个都慢(尤其在插入,删除key-value对时更慢)。
使用TreeMap有一个好处:TreeMap中的key-value对总是处于有序状态,无须专门进行排序操作

7)操作集合的工具类:Collections
该工具类提供了大量方法对集合元素进行排序,查询和修改等操作,还提供了将集合对象设置为
不可变,对集合对象实现同步控制等方法。

同步控制:Collections中提供了多个synchronizedXxx()方法,该方法可以将指定集合包装成线程同步
的集合,从而可以解决多线程并发访问集合时的线程安全问题。


                  ----------------------android培训java培训、期待与您交流! ----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值