Java day 13

1、集合的体系结构:Collection、List、ArrayList

 (1)原因:不同的数据结构(数据的组织,存储方式),Java提供了不同的集合,但是不同的集合功能是相似的,不断的向上提取,并将共性提取出来;
 (2)学习方法:从最顶层开始学习,最顶层包含了所有的共性;
 (3)使用方法:使用最底层,最底层是具体的实现

2、集合的遍历方式:

 (1)toArray():可以把集合转换成数组,然后遍历数组;
 (2)iterator():返回一个迭代器对象,通过迭代器对象来迭代集合(遍历集合)
        a、E next():返回下一个元素;
        b、boolean hasNext():判断是否有元素可以获取,如果没有元素可以获取,则会出现NoSuchElementException异常
    注意:迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则会出现并发修改异常
    解决方案:
       a、不使用迭代器;
       b、在迭代器进行遍历的时候使用迭代器来进行修改

3、泛型:Java为了解决类型转换异常而提供的一种机制(使用集合存储自定义对象并遍历),把明确数据类型的工作提前到了编译时期

 (1)优点:
      a、避免了类型转换的问题;
      b、减少黄色警告线;
      c、简化代码的书写
 (2)使用场景:看到<E>

4、foreach:增强for循环,一般用于遍历集合或者数组

     格式:
       for(元素的类型变量:集合或者数组对象){
             可以直接使用变量;
       }
    注意:在增强for循环中不能修改集合,否则会出现并发修改异常   
     public interface Interable<I>:实现这个接口允许对象成为"foreach"语句的目标

5、数组的特点:

 (1)数组的长度一旦定义则不可改变;
 (2)数组中的元素都有整数索引;
 (3)数组只能存储同一类型的元素;
 (4)数组既可以存储基本数据类型,也可以存储  引用数据类型;
 (5)数组查找快,增删慢
   获取元素:通过索引获取
   在指定元素后添加元素:先创建一个新的数组,长度是原先数组长度+1,遍历原先数组,并插入到新的数组中,当碰到该指定元素时则在其后添加新元素,其余的放在新元素后面

6、链表:由链子连接起来的一堆结点

   结点:地址值,值,下一个结点地址值
   获取元素:遍历链表
   在指定结点后添加新结点:把指定结点的下一个地址值修改为新结点的地址值,把新结点的下一个地址值改为原链表的下一个地址值
   特点:查询慢,增删快

7、List的常用子类:

 (1)ArrayList():数据结构是数组,查询快,增删慢;查询多,增删少或者不知道使用什么的时候使用
 (2)LinkedList():数据结构是链表,查询慢,增删快;查询少,增删多的时候使用
     LinkedList的特有功能:
      a、void addFirst(E e):将元素添加到索引为0的位置
      b、void addLast(E e):将元素添加到索引为size()-1的位置
      c、E getFirst():获取索引为0的元素
      d、E getFirst():获取索引为size()-1的元素
      e、E removeFirst():删除索引为0的元素
       f、E removeLast():删除索引为size()-1的元素
    List的相关操作:
      a、 void add(int index,E element):在指定索引位置添加指定元素
      b、 E get(int index):根据索引返回元素
      c、E remove(int index):删除指定元素并返回
      d、E set(int index,Eelement):将指定索引位置的元素替换为指定元素,并将原先的元素返回
原文地址:https://www.cnblogs.com/cqxljj/p/10277850.html