黑马程序员-----------------collection 集合类集框架概述及简要分析

来源:互联网 发布:矩阵分析 教材 编辑:程序博客网 时间:2024/06/03 23:05

                          黑马程序员-----------------collection 集合类集框架概述及简要分析


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

                                      



接口 collection作用:

         Collection是集合类接口,是所有集合类的,父类,提供了关于集合的一些操作,如插入、删除、判断一个元素是否其成员、遍历等.
                Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如SetList)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

collection基本结构图:

                  

 Collection包含
              |--List
                    |--ArrayList:
                    |--LinkedList:
              |--Set:
                    |--HashSet:
                    |--TreeSet:

    List集合及子类特点:
                List:元素是有序的,元素可以重复.因为该集合体系有索引
                有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素
                列表通常允许满足 e1.equals(e2) 的元素对 e1e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。难免有人希望通过在用户尝试插入重复元素时抛出运行时异常的方法来禁止重复的列表,但我们希望这种用法越少越好
     List:
         |--ArrayList:底层数据结构使用的都是数组数据结构;特点是查询速度                                              很快,但是增删稍慢.线程不同步

             因为底层用的是数组结构,所以元素都有先对应的角标,可供具体定位以及明确的修改,这样的能具有更快的查询速度.但是在进行每次的增删动作时后面的角标为都会随着改变,所以增加了更多的操作,使得增删速度稍慢.
      主要方法摘要: 
                   add(E e):  将指定元素添加进集合尾部         
                   add(int index,E e):将元素添加进制定位置
                   clear():移除列表中虽有元素
                   contains(Object o): 查看列表中是否含有指定元素
                   get(int index):返回指定位置上的元素
                    remove(Object o):移除列表中首次出现的指定元素
                   set(int index,E e):用指定元素替换列表中指定位置元素
                   size(): 获取列表中元素个数
                   isEmpty():元素中没有元素返回true

<span style="font-size:18px;">import java.util.*;class  ListDemo{public static void main(String[] args) {ArrayList<String> al =new ArrayList<String>();          al.add("java");al.add("java1");   //添加元素al.add("java1");   //可添加重复元素al.add("java2");al.add("java3");           sop(al);        // 打印集合中的元素       sop(al.contains("java"));  //查看集合中是否包含java元素      sop(al.get(2)) ;         //查看2号角标上的元素          al.remove("java1");     //删除首次出现的制定元素 sop(al);    sop(al.size());   //回去元素个数sop(al.isEmpty());   //查看集合中是否没有元素al.clear();       //清空集合sop(al);}public static void sop(Object obj){         System.out.println(obj);}}</span>

 collection有一个Iterable的接口其Iterator方法能够通过遍历的形式将所有元素进行打印  称为迭代器: 
            
Iterator it = al.iterator();while (it.hasNext()){sop(it.next());}
 既然collection已经实现了该接口所以可以直接调用,
                it.hasNext():  是以指针形式存在 从第一个元素开始一个一个往元素后面读.如果仍有元素可以迭代,则返回true
               it.next(): 返回迭代时下一个元素.
                 List:                             
       |--LinkedList:底层数据结构使用的是链表数据结构;特点:增删速度快,                                              查询速度慢
 因为结构不同 ,所以在方法上有很区别于List特有的一些方法:
              添加元素:
            addFirst();//从第一个位置添加
            addlast();//从最后一个位置添加


            offer(E e); 将制定元素添加到此列表末尾
            offerFirst(E e);//在此列表的开头插入指定元素


            getFirst();  获取第一个元素
            getLast();   获取最后一个元素
            获取元素,但不删除元素.如果集合中没有元素会出现                                                   NoSuchElementException异常




             peek();//获取但不移除列表第一个元素
             peekFirst(); //获取但不移除列表的第一个元素 ;如果次列表为空则
返回null                                           


              removeFirst();
              removeLast();
              获取元素,但是元素会被删除. 如果集合中没有元素会出现                                                           NoSuchElementException异常

              poll  //获取并移除第一个元素
              pollFirst //获取并以出第一个元素,如果列表为空则返回null                                 
import java.util.*;class LinkedListDemo {public static void main(String[] args) {LinkedList<String>link =new LinkedList<String>();link.addFirst("java01");link.addFirst("java02");link.addFirst("java03");link.addFirst("java04");link.offer("java12");      sop(link);      sop(link.isEmpty()); //link 是否是空的     //获取第一个元素  sop(link.getLast());  //获取最后一个元素  sop(link.getFirst());  //特殊方法获取所有元素  while (!link.isEmpty())  {  sop(link.removeFirst());  }   //删除元素,会获取元素 以及删除  sop(link.pollFirst());  sop("长度:"+link.size());  link.clear();  link.addLast("java01");link.addLast("java02");link.addLast("java03");link.addLast("java04");sop(link);}public static void sop(Object obj)    {     System.out.println(obj);}}




|--Vector:底层是数组数据结构. 线程同步,被ArrayList替代了.





  
   Set集合及子类特点:
                Set:元素无序,元素不能重复,因为集合没有索引
                 一个不包含重复元素的 collection。更确切地讲,set 不包含满足e1.equals(e2) 的元素对e1e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的set 抽像
                 Set:
                    |--HashSet:底层数据结构是哈希表.不包含重复元素.线程是非同步的
                 HashSet保证元素唯一性的原因
是通过元素的两个方法,判断hashcode和equals来完成.
如果元素的Hashcode值相同,才会判断equals是否为true.
如果hashcode值不同,才不会调用equals
                           hashcode 保证了元素(对象)在内存中的地址值唯一如果地址值相同就
                           调用equals方法判断如果两个列表包含相同的元素,且元素的顺序也相同,才将它们定义为相等 

                 方法摘要:
                            add(E e); 添加元素
                            clear();   移除所有元素
                            contains(Object o);集合中是否含有指定元素,有返回true
                            isEmpty(); 集合中是否没有元素,没有元素返回true
                            iterator(); 迭代器
                            remove(object o); 移除指定元素
                            size() 返回集合中元素的数量

                    代码书写方式与上面ArrayList集合类似 所以不再赘述; 
                        
      
                 Set:
                    |--TreeSet:可以对Set集合中对象排序, 底层数据结构是二叉树数据结构
                   保证数据元素唯一性;
                             保证数据元素唯一性依据;
CompareTo方法return 0 .

            TreeSet排序的第一种方式:让元素自身具备比较性.

    TreeSet排序第二种方法:
元素需要实现Comparable接口,覆盖CompareTo方法.
           这种方式也称为元素自然顺序,或者叫默认顺序

                            当两种排序都存在时以比较器为


       
 
              



                                           
   二叉树结构特点: 首先加载一个数字,然后第二个数字加载进来,大于第一个数字放右边,小于第二个数字放左边,加载第三个数字,先与第一个数字比较大于放右边,如果小于再与已经在左边的第二个数字进行比较大于放第二个数字右边小于放第二个数字左边以此类推.......
          TreeSet特有方法摘要:.
     ceiling(E e)
     返回此 集合中大于等于给定元素的最小元素,如果不存在这样的元素则返回 null

     fast();//返回此 set 中当前第一个(最低)元素。
   last() //返回此 set 中当前最后一个(最高)元素。
          
      floor(E e) //  
返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null 
    
       pollFirst(); //获取并移除第一个元素
    
       pollLast();//获取并移除之后一个元素

       subSet(E frome , E toe);//返回集合中冲forme(包括)元素到toe(不包括)的元素集合


                       代码书写方式与上面ArrayList集合类似 所以不再赘述;

TreeSet中定义比较方式实例:
                                
import java.util.*;  class Student implements Comparable    //定义一个学生类{      private String name;      private int age;           public Student(String name, int age){          this.name =name;          this.age =age;      }         public String getName(){            return this.name;      }         public void setName(String name){                this.name =name;      }         public int getAge(){                 return this.age;      }         public void setAge(int age){          this.age = age;      }         public String toString(){          return this.name+"::::"+ this.age;  //返回String类型的年龄和姓名方便迭代遍历打印    }         public int compareTo(Object obj)   //复写compareTo方法{          if(!(obj instanceof Student))              throw new RuntimeException("This is not a instance of Class \"Student\" ");                   Student st =(Student)obj;          sop(this.name +"......compareTo...."+ st.name);            if(this.age > st.age)     //比较方式  用年龄比较            return 1;          else if(this.age ==st.age)              return 0;          return -1;     }           public static void sop(Object o){          System.out.println(o);      }  }     class TestDemo  {      public static void sop(Object o){          System.out.println(o);      }         public static void main(String[] args){   //创建集合        TreeSet<Student> ts =new TreeSet<Student>();  //添加元素(对象)        ts.add(new Student("lisi02", 22));          ts.add(new Student("lisi007", 20));          ts.add(new Student("lisi09", 19));           //迭代遍历对象元素        Iterator it =ts.iterator();          while(it.hasNext()){              sop(it.next());          }      }  }  




------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

0 0