黑马程序员---java集合总结

本文深入讲解Java集合框架的构成及特点,包括List、Set、Map等接口的不同实现类及其应用场景,帮助读者理解集合间的差异并选择合适的集合类型。
---------------------- android培训java培训、期待与您交流! ----------------------
 集合学习完了,觉得思路还是比较重要的,花些时间自己总结了一下,现在感觉清晰多了。

            集合总结

集合框架构造:

collection<interface>(iterator)
                       |-------------List(可重复,有顺序)
                                   |-------ArrayList (有角标(数组结构),查询快,增删慢,线程不同步)
                                   |-------LinkedList (链表结构,查询慢,增删快,线程不同步)
                                   |-------Vector(线程同步,被ArrayList替代)
                       |-------------Set(不可重复,无顺序)
                                   |-------TreeSet(自定义比较器,使元素具备比较功能)
                                   |-------HashSet(哈希表结构,自定义重复用HashCode和equals方法.)
         |----LinkedHashSet(存储元素有序)
        |-------------Map<interface>(存储键值对,保证键的唯一性)
                                   |-------HashTable<class>(哈希表结构,不可以存空值,线程同步效率低)
                                   |-------TreeMap(底层二叉树,可以排序
               |-------HashMap(哈希表结构,HashCode与equals定义元素唯一性,键值可以为空)
说明:
collection是接口,set,list是collection的子接口,arraylist,linkedlist,vector是实现了list接口的类。
与collection对立的是map,用于存储键值对,不允许有重复的key,但允许有重复的value。

Collection接口介绍:
Collection:集合的共性内容都在该接口中。
  添加:add(obj);
  删除:remove(obj);
  判断:contains(obj);isEmpty();
  个数:size();
  清空:clear();
  集合转成数组:toArray();
  取出:Iterator iterator();
 迭代器:是取出集合中元素的方式,该方式的具体取出方法定义是由子实现的。因为每一个子类集合数据结构不一样,
                 所以取出的具体实现也不同,但是都符合这个迭代器接口规则。因为每一个子类集合作为一个事物被描述,
                 而取出方式通过一个方法不足以描述,所以使用了对象,而该对象属于描述容器时内容的一个事物,
                 所以可以通过内部类来完成取出方式的描述,只要对外提供可以获取该内部类对象的方法即可。
                 该方法是:iterator();迭代器取代了枚举接口。因为后者的名称过长,不方便书写。
                 迭代器中常用的方法:hasNext(),next();

集合的作用:
当我们要对一组对象,或都数据进行统一的操作时,为了减少代码量的编写和实现逻辑的统一,这时我们就要以采用集合对象了.

选用子类对象:
首选把下边的子类对象分为三大类:
list:元素是有序的,元素可以重复,因为该集合体系有索引
set:元素是无序的(存入和取出的顺序不一定一致),不可以重复
map:该集合存储键值对,一对一往里存,而且要保证键的唯一性。

当明确了这三个要求后就可以把范围转到这三个接口的其中一个了,接下来我们再来看三个接口下的子类:
    List:
       ArrayList:底层的数据结构使用的是数组结构(查询快,增删慢,不同步)
       LinkedList:底层使用的是链表结构(增删快,查询慢)
       Vector:底层是数组数据结构(和ArrayList功能一样,是同步的)(使用时注意他有一个elements()返回个Enumeration对象此对象可以像iterator那样迭代输出元素)

       Set:
           HashSet:底层数据结构是哈希表(HashCode())线程非同步的
               HashSet是如何保证元素唯一性,是通过元素的HashCode值相同,才会判断equals是否为true,如果元素的,hashcode值不同,不会调用equals()

          TreeSet:可以对Set集合中的元素进行排序底层数据结构是二叉树,保证元素唯一性的依据:compareTo方法Comparable类
     TreeSet排序的第一种方式,让元素自身具备比较性元素需要实现Comparable接口,覆盖compareTo方法
     第二种方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式,
       定义比较器,传给集合对象的构造器Comparator--?>compare()
     建议使用比较器。
      TreeSet集合是怎样保证元素唯一性的?
       通过return 0,来保证元素唯一性。
       另:如果需求是:保证元素唯一性,并有频繁的增删操作。该如何完成呢?
       方法:定义一个LinkedList集合,定义一个功能专门取出LinkedList中的重复元素。
          但相对麻烦,使用面向对象的思想,先找对象,没有,则自己创建对象。
          在Set集合体系中有一个HashSet子类LinkedHashSet,在Set集合中融入了链表数据结构,即可解决该需求。
set和list的对比:
     set检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变,无序所存对角唯一,不可以重复存放,
     list和数组类似,list可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变,有序可以重复存放。

    Map:该集合存储键值对,一对一往里存,而且要保证键的唯一性。
        Hashtable:底层是哈希表数据结构,不可以存入null键null值,(该集合是线程同步的-效率低)
        HashMap:底层是哈希表数据结构,可以允许使用null键null值(该集合是不同步的-效率高)
        TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序(排序)

集合使用技巧:
需要唯一吗?
需要:Set
 需要制定顺序:
   需要: TreeSet
   不需要:HashSet
    但是想要一个和存储一致的顺序(有序):LinkedHashSet
不需要:List
 需要频繁增删吗?
  需要:LinkedList
  不需要:ArrayList
如何记录每一个容器的结构和所属体系呢?
看名字!

List
 |--ArrayList
 |--LinkedList

Set
 |--HashSet
 |--TreeSet

后缀名就是该集合所属的体系。
前缀名就是该集合的数据结构。

看到array:就要想到数组,就要想到查询快,有角标. 
看到link:就要想到链表,就要想到增删快,就要想要 add get remove+frist last的方法
看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法。
看到tree:就要想到二叉树,就要想要排序,就要想到两个接口Comparable,Comparator 。
而且通常这些常用的集合容器都是不同步的。

Collections (工具类)
Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
相当于对Array进行类似操作的类——Arrays。
如,Collections.max(Collection coll); 取coll中最大的元素。
   Collections.sort(List list); 对list中元素排序
HashSet通常优于TreeSet(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。
TreeSet存在的唯一理由:能够维护其内元素的排序状态。
HashMap用于快速查找。
当元素个数固定,用Array,因为Array效率是最高的。

Collection和Collections的区别?
 Collection是集合框架的顶层接口,它里面定义了集合对象的共性方法。它下面两个常用的子类是:list set
 Collections是集合框架的工具类,里面的方法都是静态的,是对集合操作的工具方法。
    比如它提供了将非同步集合转成同步集合的方法,对list排序,对集合进行二分查找。

 


 

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看: http://edu.youkuaiyun.com/heima
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值