zoukankan      html  css  js  c++  java
  • 集合&List

     

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

    集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

    集合的分类
    1、Collection          一次存一个对象, 单列集合
        List                可重复, 有索引
       ArrayList         数组实现, 查找快
       LinkedList       链表实现, 增删快
       Vector          数组实现, 线程安全
      Set              不可重复, 没索引
       HashSet         使用哈希算法去重复, 效率高, 但元素无序
       TreeSet          TreeSet是用排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列
       LinkedHashSet     HashSet的子类, 原理相同, 除了去重复之外还能保留存储顺序
    2、 Map            一次存两个对象, 键值对
       HashMap         使用哈希算法对键去重复, 效率高, 但无序
       TreeMap          使用二叉树算法排序, 可以自定义顺序
       LinkedHashMap     使用哈希算法去重复, 并且保留存储顺序
       Hashtable         类似HashMap, 线程安全, 效率略低, 不允许null键和null值
       Properties         Hashtable的子类, 用来操作配置文件

    集合的常用方法
    1.常用方法
      add(Object obj)          向集合中添加一个元素, 添到最后的位置 
      get(int index)             获取集合中指定位置的元素
      size()                     获取集合的长度
      add(int index, Object obj)     向集合中添加一个元素, 添到指定位置
      set(int index, Object obj)    把集合中指定位置的元素替换
      remove(int index)         删除集合中指定位置的元素
      remove(Object obj)        删除集合中包含的obj对象(遍历集合中的元素如果传入的元素equals某个元素就调用remove方法,注意:角标要--)
    2.迭代集合
      a.for循环:  从0循环到集合的size()-1, 每次获取其中一个
      b.迭代器:    调用iterator()方法获取迭代器, 使用hasNext()判断是否包含下一个元素, 使用next()获取下一个元素
      c.增强for循环:  for (类型 变量名 : 容器) { 循环体 } 容器中有多少个元素就执行多少次循环体, 每次循环变量指向容器中不同的元素
    3.迭代时删除的问题
      a.for循环:   删除时由于后面的元素会向前移动, 所以删除之后循环变量要--
      b.迭代器:    要删除元素时必须使用Iterator中的remove()否则会抛出异常
      c.增强for循环:  不能删除

    List

    ArrayList:底层数据结构是数组结构。线程不安全的。所以ArrayList的出现替代了Vector.但是查询的速度很快.。

    LinkedList:底层是链表数据结构。线程不安全的,同时对元素的增删操作效率很高

    Vector:底层数据结构是数组结构。jdk1.0版本。线程安全的。无论增删还是查询都非常慢.已被ArrayList替代。

    可变长度的ArrayList:  

    ArrayList内部封装了一个默认长度为10的数组。 当超出长度时,集合内部会自动生成一个新的数组。 将原数组中的元素复制到新数组中,在将新元素添加到新数组。

    ArrayList 50%延长。  

    Vector 如果指定了初始容量和溢出量就是每次初始容量加上溢出量,没指定就是100%延长

    ListIterator方法

    对于List集合。有一个新的迭代方式。 就是ListIterator 列表迭代器。

    ListIterator本身也是Iterator的子接口。并提供了更多的迭代过程中的操作

    List list = new ArrayList();

    ListIterator li = list.listIterator();

    li.add(用指定元素添加)

    li.set(用指定元素替换)判断一下这个元素是否在集合里,如果在可以替换 boolean li.hasNext()是否有下一个

    boolean li.hasPrevious()是否有前一个

    li.next()返回下一个元素

    li.previous();返回上一个元素

    List集合中的特有方法

    List list = new ArrayList();

    添加功能:

    boolean list.add(E e);//向list里添加元素

    void list.add(index,E e)在index索引位插入元素 其他元素依次顺延,但是这里index不能大于size();否则会报角标越界异常

    删除功能:

    boolean list.remove(E e)删除元素,有这个值就返回真,没有这个值就返回假

    Object list.remove(int index)根据索引位(角标)删除,会把删除的元素返回

    修改功能

    E list.set(int index, E element)对索引位置的元素进行修改。会返回你传入的元素.

    获取功能

    E list.get(int index)通过索引位(角标)获取到对应的元素

    List <E> subList(int fromIndex, int toIndex)根据指定的头尾角标获取子列表

    通过List特有的方式,获取集合中所有的元素。

    for(int x=0; x<list.size(); x++){

        System.out.println(list.get(x));    

    }

     总结:

    List:可存放重复元素,元素存取是有序的。
    Set:不可以存放重复元素,元素存取是无序的。

    add(Object obj)可以接收任意类型对象,但是任意类型的对象都被提升为了Object.所以在取出元素时,取出来的也是Object。这里Person类型提升了Objec类型了

    泛型的出现解决了这一问题不用向上或向下转型

    泛型

    提高了程序的安全性
    将运行期遇到的问题转移到了编译期
    省去了类型强转的麻烦
    泛型类的出现优化了程序设计

     

  • 相关阅读:
    CSS——制作天天生鲜主页
    HTML——制作一个图片列表
    HTML——制作一个简易菜单栏
    CSS——三种页面引入方法
    【20170903】模拟赛
    【LA 3942】 Remember the word
    【BZOJ 1036】 树的统计count
    UVA 12299 RMQ with shifts
    【20170706】次短路
    【20170706】保卫萝卜
  • 原文地址:https://www.cnblogs.com/sooper/p/3411151.html
Copyright © 2011-2022 走看看