zoukankan      html  css  js  c++  java
  • java 深入技术三(List)

    List

    ArrayList

    List接口

    List接口的父接口-Collection

    List接口的重要子类- ArrayList

                             -LikedList

    List接口不重要子类-Vector

    java.lang.IndexOutOfBoundsException 越界异常

    1)ArrayList arrayList=new ArrayList();

    //获取集合中的元素

    Object element=arrayList.get(Index);

    使用for循环获取集合中的所有元素

    int size=arrayList.size();

    for(int i=0;i<size;i++){

    Object ele =arrayList.get(i);

    System.out.println(ele);

    }

    2)ArrayList 内部数据结构:数组

    内存地址 e0 e1 e2 e3 e4

                   10

    类当中封装了一个数组,内存中位置是连续的,数组每个元素占的空间都是一样的

    内部结构数组的特点决定了ArrayList的特点

    *可以直接获取指定索引位置的元素arrayList.get(index)

    *可以直接在指定位置添加元素 arrayList.add(1,"蛋蛋3");

    *可以直接在指定索引位置删除元素 arrayList.remove(index);

    获取元素效率:非常高

    添加元素效率:非常低

    删除元素效率:非常低

    3)LinkedList

    内部结构:链表

    链首

    LinkedList各种操作的效率分析

    获取集合中元素,是从链首依次获取才能获取到

    可以添加指定索引位置添加元素

    可以删除指定索引位置的元素

    添加效率:不需要移动元素

    删除效率:不需要移动元素

    查询效率:获取指定位置的元素:从链首依次计数到指定位置的元素,相对ArrayList慢一些

    //Collection接口中没有的方法

    linkedList.add();

    linkedList.add(index,Object);

    linkedList.get(Index);

    linkedList.addFirst(Objcet);

    linkedList.addLast(Objcet);

    最大索引位置:linkedList.size()-1

     4)LinkedList 添加元素的过程

    LinkedList list =new LinkedList();

    Person p=new Person("蛋蛋",20);

    list.add(p);

    Person p2=new Person("蛋蛋2",30);

    list.add(p2);

    5)List综述

    LIst列表的特性

    元素有序:元素的添加顺序和遍历顺序相同

    元素可重复:同一个元素可以多次添加到(List)集合里面

    这两个特性实际上是子类ArrayList和LinkedList所具有的

    可以是否多次添加null呢?可以

    List中只能添加对象,不能添加基本数据类型

    如果添加了基本数据类型,是装箱了

    List接口特有的方法

    ArrayList和LinkedList的共有方法决定List接口可以有的方法

    void add (int index,Object o)

    void addAll()

    Objcet get()

    Object  set() //修改特定索引位置的元素

    int indexOf()查询指定位置是否有改元素

    int lastIndexOf()//查询元素最后一次出现的位置

    6)ListIterator---list专有的迭代器

    boolean hasNext()

    Objcet next()

    int nextIndex() //下一个元素的索引

    boolean hasPrevious() //判断是否有前一个元素

    Object previous() //取出前一个元素,并把指针移动到前一个元素

    int previousIndex()

    void add(Object o) //添加一个元素

    void remove()

    void set(Object o)//修改指针指向的当前元素

     7)Vector

    内部数据结构:数组

    Vector是线程安全的,在早起的jdk版本中已经有了,自己担负了ArrayList和LinkedList两个类的作用,但各个操作的性能很低

    Vector内部的数组满时,新数组长度增长100%

    8)list练习

    1.去除集合中的元素

    新建一个集合list2.遍历list中的元素,如果list2有,就不添加,如果没有就添加进去

    2.一个集合中存储有各种类型的数据,现要求把所有字符串类型的元素,串联成一个字符串,对所有数值类型的元素求和,对所有Person类型的元素年龄求和已经统计人数,如果是其他类型的元素,就输出到控制台

    1.判断element为字符串类型的 element instanceof String ,使用StringBuild,把字符串串联在一次StringBuild stringBuild=new StringBuild();stringBuild.append(element);

    2.判断element为数值类型 element instanceof Number ,然后把数值类型的转换为字符串类型的,再把字符串类型的转换为Double类型的

    String numberStr=String.valueof(element);

    Double doublevalueof=Double.parseDouble(numberStr);

    totalNumer=+doublevalueof;

    3.判断element为Person类型,统计人数

    Person person=(Person)element;

    int age=Person.getAge();

    totalAge+=age;

    personcount++;

    9)堆栈(stack)

    特点:先进后出

    10)队列(queue)

    特点:先进先出

  • 相关阅读:
    什么是JAVA内容仓库(Java Content Repository)(3)
    Documentum 中 Type定义与存储
    洛谷 P1421 小玉买文具
    校内 第一届ACM校赛——热身赛
    洛谷 P1307 数字反转
    洛谷P1579 哥德巴赫猜想(升级版)
    51单片机 第三节 独立按键
    51单片机 第四节 数码管
    校内 第一届ACM校赛——正赛
    51单片机 第二节 点亮LED
  • 原文地址:https://www.cnblogs.com/shiyeyeyeye/p/5010447.html
Copyright © 2011-2022 走看看