黑马程序员——JAVA集合

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

所有的类集都存放在java.util包中

()Collection接口

     Collection是保存单值集合的最大父类;在一般开发中很少直接使用Collection,而直接使用其子接口,

     子接口主要有:ListSetQueueSortedSet

     Collection子接口的定义:

        List:  可以存放重复的内容。

        Set :不能存放重复的内容,所有的重复内容是靠hashCode()equals()两个方法区分的。

        Queue:队列接口。

        SortedSet:可以对集合中的数据进行排序。

  1  List接口

            List常用的子类:ArrayList Vector

            两种子类都可以通过对象的多态性,为List实例化

     List的操作:

             (1).add(int index,E element) 根据索引添加元素

             (2)List(remove(String)remove(int index))中存在两种删除:根据内容、根据编号

                (3) List接口中提供get()方法,通过size()方法循环输出此方法可以根据索引取出内容,这是List所独具有的;

     ArrayListVector的区别

         a.时间区别:  前者是jdk1.2之后推出、后者jdk1.0推出的

            b.性能:     前者采用异步处理方式,性能更高;后者采用同步处理方式,性能较低

           c.线程安全前者属于非线程安全的操作类;后者属于线程安全的操作类

           d.输出:       前者只能用Iteratorforeach输出;后者使用IteratorforeachEnumeration输出

 2   Queue接口

     Queue定义的方法

       public E element()         找到链表的标头

          public boolean offer(E o)   添加元素到链表结尾

          public E peek()            找到表头

          public E poll()       删除此表头

          public E remove()     检索并删除表头常用子类:

     Queue 常用类

       LinkedList:链表结构,增删速度快。

              取出List集合中元素的方式:

           get(int  index):通过脚标获取元素。

              iterator():通过迭代方法获取迭代器对象。

 3   Set接口

     Set接口是Collection的子接口,不能加入重复元素

     不能像List那样进行双向输出

     a.Set接口常用的子类:

        HashSet:散列存放 

        TreeSet:有序存放

     b.HsetSet:使用散列存放,本身没有顺序,插入顺序就是保存顺序

     c.TreeSet:可以自动进行排序

         对对象进行排序时要注意:

           如果一个对象想要进性排序操作,则依靠Comparable接口完成。

          但就算排好序,我们会发现问题,有的对象因某一个属性重复,排序后对象消失了,

          要解决此问题需覆写两个方法:hashCode()equals()d代码如下:

               import java.util.Set ;

              import java.util.HashSet ;

              class Person{

                     private String name ;

                     private int age ;

                     public Person(String name,int age){

                            this.name = name ;

                            this.age = age ;

                     }

                     public boolean equals(Object obj){       //覆写equals,完成对象比较

                            if(this==obj){

                                   return true ;

                            }

                            if(!(obj instanceof Person)){

                                   return false ;

                            }

                            Person p = (Person)obj ;       //向下转型

                            if(this.name.equals(p.name)&&this.age==p.age){

                                   return true ;

                            }else{

                                   return false ;

                            }

                     }

                     public int hashCode(){

                            return this.name.hashCode() * this.age  ; //定义一个公式

                     }

                     public String toString(){

                            return "姓名:" + this.name + ";年龄:" + this.age ;

                     }

              };

              public class RepeatDemo02{

                     public static void main(String args[]){

                            Set<Person> allSet = new HashSet<Person>() ;

                            allSet.add(new Person("张三",30)) ;

                            allSet.add(new Person("李四",31)) ;

                            allSet.add(new Person("王五",32)) ;

                            allSet.add(new Person("王五",32)) ;

                            allSet.add(new Person("王五",32)) ;

                            allSet.add(new Person("赵六",33)) ;

                            allSet.add(new Person("孙七",33)) ;

                            System.out.println(allSet) ;

                     }

              };

  4    SortSet接口

       SortSetSet接口类似:

       比如:TreeSet类也是SortSet的子接口,所以此接口的所有类都是可以排序的;

       SortSet定义的方法:

          public Comparator<? super E> comparator()   返回与排序有关联的比较器

         public E first()             返回集合中的第一个元素

         public SortedSet<E> headSet(E toElement)返回从开始到指定元素的集合

         public E last()    返回最后一个元素

()接口输出

   1.Iterator接口

          a.在集合的操作中支持一下集中方法输出

              Iterator    ListIterator    foreach    Enumeration

          b.在使用集合输出时必须形成一个思路:“只要是碰到了集合输出操作,    就一定使用Iterator接口“因为这是最标准的做法

          c.Iterator接口的操作原理:

             Iterator是专门的迭代输出接口,所谓的迭代输出即使将元素一个个进行判断,判断其是否有内容

             如果有就将其输出;

             hasNext()判断内容   next()取出内容

          d.使用Iterator输出时注意:

             List本身存在删除方法(remove()),如果在使用迭代输出的过程中使用

             List的删除方法进行删除操作此事代码将会出问题,所以在使用Iterator输出时,

             不要使用集合类中的remove()方法,而只能使用Iterator接口中的remove()方法。

  2.ListIterator接口

       a.Iterator与ListIterator的区别:

            Iterator接口主要的功能是有前向后输出,此时如果实现由后向前或者双向输出, 就必须使用Iterator的子接口————ListIterator

          b.虽然此接口可以进行双向输出,但是Collection接口中并没有定义可以为此操作实例化的操作,是有List接口中才存在了ListIterator接口的实例化操作。

          c.增加及替换元素

             add()

             set()

  3.foreachEnumeration接口

           1.foreach不尽可以输出数组,实际上还支持集合;

                 例: import java.util.ArrayList;

                     import java.util.List;

                     public class ForeachDemo01{

                            public static void main(String args[]){

                                   List<String> all = new ArrayList<String>() ;

                                   all.add("hello") ;

                                   all.add("_") ;

                                   all.add("world") ;

                                   for(String str:all){

                                          System.out.print(str + "") ;

                                   }

                            }

                     };

         2.Enumeration是最早的集合输出方式,现在使用此接口输出时,一般都是直接操作Vector类完成的。

           例:import java.util.Vector;

              import java.util.Enumeration;

              public class EnumerationDemo01{

                     public static void main(String args[]){

                            Vector<String> all = new Vector<String>() ;

                            all.add("hello") ;

                            all.add("_") ;

                            all.add("world") ;

                            Enumeration<String> enu = all.elements() ;

                            while(enu.hasMoreElements()){    //判断是否有内容,hasNext()

                                   System.out.print(enu.nextElement() + "") ;     //输出元素:next()

                            }

                     }

              };

()Map接口

  1.Map接口与Collection接口的区别:

      Collection每次保存的对象都是一个对象,但在Map中保存的是一对对象,形式以:  key——>value的形式保存

  2.Map接口的常用子类:

      HashMap:无序存放,key不允许重复

      Hashtable:无序存放,key不允许重复

      TreeMap:可以排序,按key排序,key不允许重复

      WeakHashMap:弱引用的Map集合,当内容不再使用时,可以清楚无用数据,可以使用gc进行回收。

      IdentityHashMapkey可以重复的Map集合

  3.Map接口的注意事项:

   a.Map的输出

        对于Map接口来说,其本身是不能直接使用迭代进行输出,因为Map中的每个位     置存放的是一对值,而Iterator中每次只能找到

       一个值。所以,如果此时非要使用迭代进行输出的话,则必须按照以下步骤完成:

       (1)Map的实例通过entrySet()方法变为Set接口与对象:

       (2)通过Set接口实例为Iterator实例化;

       (3)通过Iterator迭代输出,每个内容都是Map.Entry的对象;

       (4)通过Map.Entry进行key——>value的分离

   b.直接使用非系统类作为key

        如果要使用非系统类作为Mapkey,则此类必须覆写Object类中的hashCode()equals()方法;

          作为key,或者更准确的说是作为对象的时候,实际上是依靠hashCode()equals()来判断两个匿名对象是否相等,这一点有系统内部自动完成。

                                                       ------- android培训java培训、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值