黑马程序员_<<Collection,List>>

来源:互联网 发布:金太阳教育软件下载 编辑:程序博客网 时间:2024/05/16 07:48

--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------


1.集合。

    1.概述

         集合就是一个容器,是用来存储对象的,里面可以存储不同的对象,只要是对象,就可以存储,集合可以分为很多种,他们的底层的存储结构是不一样的(数据结构),所以不同的集合有不同的功能,根据情况选择不同集合。但是他们有共同的特点,就把特点抽取出来了,形成了接口Collection。

    2.特点

        集合可以存储不同的对象,只要是对象,就可以存储(一般情况下我们要存储一样的对象,否则读取的时候就不容易读取了),数组也是存存储对象的,但是数组只能存储相同的特点。

      集合的长度是变化的,数组的度长是固定的。

   3.集合框架

       下面说一些常见的集合

           

 

2.Collection

    1.介绍

        Collection集合是把所有集合共同的特点抽取出来后,存储在Collection接口中。

     2.Collection常用的方法

                       接口不能实例化,所以我们使用其一个常见子类来进行演示ArrayList.

         增加:add(E e)使用了泛型,我们按时理解成Object,就是我们要执行我们在集合中存储的数据类型,否则会有安全隐患。.

         判断:isEmpty() 判断是否为空

         删除:remove(Object o) ,clear()

          装换成数组:toArray()

         获取:使用的是迭代器

          求交集:removeAll(Collectioncon),从此集合中移con集合中的元素。retainAll(Collectioncon):在此集合中保留集合con中也包含的元素

 

     

 package www.fuxi.jihe; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; public class jiheText {  public static void main(String[] args) {    Collection collection = new ArrayList();    /* 增加数据 */    collection.add("zhangsan");    collection.add("lisi");    collection.add("wangwu");    collection.add("zhaoliu");    /* 查看集合的长度 */    System.out.println("集合的大小:" + collection.size());    /* 查看集合是否为空 */    System.out.println("集合是否为空:" + collection.isEmpty());    /* 查看集合中的元素,我们使用的是迭代器 */    Iterator it = collection.iterator();// 获取迭代器    while (it.hasNext()) {// 判断集合的下一个元素是否为空      System.out.print(it.next() + ";");// 如果不为空,那么就读取出来    }    /* 转换成数组 */    Object[] obs = collection.toArray();    System.out.print("\n转换成数组后,数组的元素:");    for (Object ob : obs) {      System.out.print(ob + ",");    }    /* 判断集合中是否包含某元素 */    System.out.println("\n集合中是否包含lisi:" + collection.contains("lisi"));    System.out.println("\n原集合:" + collection);     Collection collection1 = new ArrayList();    collection1.add("lisi");    collection1.add("zhaoliu");    collection1.add("wanggang");    collection1.add("xuemei");    collection.removeAll(collection1);// 移除与集合collection1中元素相同的元素    System.out.println("移除了与Collection1集合中相同的元素:" + collection);    /* 清空集合 */    collection.clear();    System.out.println("清空集合:" + collection);  } }结果:集合的大小:4集合是否为空:falsezhangsan;lisi;wangwu;zhaoliu;转换成数组后,数组的元素:zhangsan,lisi,wangwu,zhaoliu,集合中是否包含lisi:true 原集合:[zhangsan, lisi, wangwu, zhaoliu]移除了与Collection1集合中相同的元素:[zhangsan, wangwu]清空集合:[]


   3.迭代器

           迭代器是用来获取集合中元素,其实迭代器是集合的内部类,因为捏不累读取本类的数据最方便,但是不同的集合他们的存储的结构不同,并且每个集合都要读取数据,所以就把他们共同的方法抽取出来,然后利用本类来返回他们自己的迭代器,这样既方便又安全。

       hasNext(),判断元素是否可以迭代next()方法然后迭代的下一个元素remove()从集合中移除此元素


package www.fuxi.jihe; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; public class jiheText {  public static void main(String[] args) {    Collection collection = new ArrayList();    /* 增加数据 */    collection.add("zhangsan");    collection.add("lisi");    collection.add("wangwu");    collection.add("zhaoliu");    Iterator it = collection.iterator();// 获取迭代器    while (it.hasNext()) {// 判断集合的下一个元素是否为空      Object ob = it.next();      System.out.print(ob + ";");// 如果不为空,那么就读取出来      if (ob.equals("lisi")) {         it.remove();// 移除lisi元素      }    }     System.out.println("\n集合:" + collection);  } }结果:zhangsan;lisi;wangwu;zhaoliu;集合:[zhangsan, wangwu,zhaoliu] 

 

         

3.List集合

    1.概述

   list是Collection的子接口,他有自己的独特的方法,他可以使用索引来操作集合中的数据,提供了自己迭代器。元素是有序的,里面的元素可以重复

 2.特有的方法

       Add(index,element)  addAll(index,Collection)

        Remove(index)    通过索引删除元素

      subList(from,to),去集合中的一部分元素

       listIterator(),这个比Iterator()中多了很多方法,里面可以增加元素。增删,该查,反向读取都可以

 

public class ListDemo {  public static void main(String[] args) {    List list = new ArrayList();    list.add("java01");    list.add("java02");    list.add("java03");    System.out.println("集合:" + list);    /* 在第二位置添加元素 */    list.add(1, "java00");    System.out.println("集合:" + list);    /* 利用自己的迭代器读取和插入数据,在java03后面添加元素 */    ListIterator it = list.listIterator(0);    while (it.hasNext()) {      if (it.next().equals("java03")) {         it.add("javaLast");      }    }    System.out.println("集合:" + list);    /*取List集合中1~3的元素,包含头不包含尾*/    List list1=list.subList(1, 3);    System.out.println("集合List1=:" + list1);  } }结果:集合:[java01, java02, java03]集合:[java01, java00, java02, java03]集合:[java01, java00, java02, java03, javaLast]集合List1=:[java00, java02]


 

 

4.List的子类

     List

       |-ArrayList:底层结构是数组,优点:当数据比较多的话,查询数据效率高,缺点:增加和删除效率低,原因移动的数据比较麻烦,说是可变的数组,原因是:默认长度是10,当超多此长度后,会以新建一个数组,长度增加50%,然后把原来的数组付给新的数组,然后再增加新的元素。

       |-LinkedList :底层是数据结构是链表,各个元素都是使用指针链接起来 的,有点:增加和删除效率高,缺点:查询效率低

      |-Vector:底层也是数组结构,但是是1.0版本以前的长度是100%的速度增长,ArrayList是1.2版本以后的,替换的此类,Vector集合线程同步,ArrayList线程不同步。

 

 

Vector有三种读取方式:Iterator(),get(),还有自己特有的杜甫方式,枚举读取

下面介绍枚举读取:

 

package www.fuxi.jihe; import java.util.Enumeration;import java.util.Vector; public class VectorDemo {  public static void main(String[] args) {    Vector v = new Vector();    v.add("zhnagsan");// 添加    v.addElement("lisi");// 添加    v.add("wangwu");    Enumeration em = v.elements();// 枚举读取器    while (em.hasMoreElements()) {      System.out.print(em.nextElement() + ",");    }  } }结果:zhnagsan,lisi,wangwu,


5.LinkedList

          特有方法

         addFirst();addLast();

          getFirst();getLast(); 获取元素但是不删除元素

         removeFirst();removeLast();获取元素但是删除元素,如果不存在此元素,那么据会抛出异常

         1.6版本后的新方法

         pollFirst();pollLast();获取并移除第一个元素或者最后一个元素,如果不存在,返回为null,不抛出异常。

         offerFirst();offerlast();

         peekFirst();peekLast();

     

package www.fuxi.jihe; import java.util.LinkedList; public class LinkedListDemo {  public static void main(String[] args) {    LinkedList list = new LinkedList();    list.add("forward01");    list.addFirst("forward00");    list.addLast("forwardLast");    System.out.println("集合:" + list);    // list.get(3);// 此会报异常,原因是集合中没有此元素    System.out.println("集合中的第一个元素:" + list.remove(0));// 移除并且能获得,但是如果没有此元素的话,那么就会报异常    System.out.println("移除第一个元素后的集合:" + list);    System.out.println("获取第一个元素:" +list.peekFirst());// 获取第一个元素,但是不移除,如果不存在,则是null    System.out.println("获取第一个元素:" +list.peekLast());// 获取最后一个元素,但是不移除,如果不存在,则是null  } }集合:[forward00, forward01, forwardLast]集合中的第一个元素:forward00移除第一个元素后的集合:[forward01, forwardLast]获取第一个元素:forward01获取第一个元素:forwardLast 


--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------