Collection总结

来源:互联网 发布:html js display none 编辑:程序博客网 时间:2024/05/16 11:41


看完了集合后,自己对集合的整理:

Collection接口

       |--  List(子接口) 元素是有序的,且可重复

                   |--    Vector(实现类) 可以实现可增长的对象数组。和 ArrayList基本相同,但是 Vector是JDK1.0版本,线程同步的,效率低,已被 ArrayLis取代。

                   |--    ArrayList(实现类)数据结构为数组就够。线程不同步,效率高。查询速度快,但是插入,删除效率低;

                   |--     LinkedList(实现类)存储结构为链表数据结构。线程不同步,效率高。查询速度慢,但是插入,删除效率高;

      |--(子接口)元素无序,且不可重复

                  |-- HashSet(实现类)存储数据结构为哈希表。

                  |-- TreeSet(实现类)对Set集合进行排序。

注意:看到 Set集合是无序的,但是它的实现类TreeSet为什么能排序?

           这是因为 List所说的有序,是存储的顺序和元素增加顺序相同;

                          Set集合是无序,指的是存储顺序和元素的增加顺序可能不相同;(注意:是可能不同,当然也可能相同)。

Collection: 取出全部元素的方法:iterator()迭代器方法,对集合元素的遍历,判断是否有下一个元素hasNext(),获取 next()

List:   特有方法。凡是可以操作角标的方法都是该体系特有的方法;

             List中的listIterator()方法:

                  即用Iterator类的iterator()方法只能用三个方法,有局限性。在获取元素是只能用迭代器的方法,只有三个hasNext(),next()remove(),即对集合除了取出之外,只能做删           除操作。为了能更多操作,list集合使用了Iterator接口的子接口ListIterator

      ArrayList:和List基本一样

      LinkedList: 特有方法,addFirst().addLast(),getFirst().getLast(),removeFirst().removeLast();

                           注:,removeFirst().removeLast();这两个方法和别的移除方法不一样,在移除前先返回移除的元素

                          

                    在新版本中出现了 peekFirst(),peekLast(),方法获得但不删除第一个/最后一个元素,如空则返回null

                                     pollFirst(),pollLast(),方法获得并删除元素,如空则返回null

 Set:

      HashSet:比较元素相同分两步:第一步,比较元素的哈希值(调用hashCode()方法)

                                 第二步,比较该元素对象是否相同,调用equals()方法

              存储元素事先比较元素的哈希值和集合中的元素哈希值是否相同,不同,则存储。

              如果哈希值相同,则比较这两个哈希值相同元素是否相同,如果不同,则把该对象放在该哈希值延伸处,如果相同,则出现重复元素,不存储;

      TreeSet:可以给Set集合的元素排序,但是前提是存放的对象必须具备比较性;

            让对象具备比较性有两种方法:(1,元素自身具备比较性,2,集合具备比较性)

            1:实现Comparable接口,覆盖compareTo(Object obj)方法。这个接口强制对象具备比较性。

              注意:如果判断主要条件相同时,一定要判断次要条件;

            2:当对象不具备比较性,或需求改变了,不需要原来比较的条件,换一个比较条件,为了不在源代码里修改。

              这样就出现了第二种比较方式:让集合具备比较性,即在集合初始化时就有了比较方式;

              方法:定义了比较器,把比较器对象作为参数传个TreeSet的构造方法;

               怎样定义比较器:

                定义一个类,该类实现了Compator接口,需要覆盖compare(Object obj1,Object obj2)方法;

      注意:当两种比较方式都存在是,以比较器为主;

       


   

0 0
原创粉丝点击