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

--------------------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
集合是否为空:false
zhangsan;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培训、期待与您交流! --------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值