List接口的特点 常用ArrayList LinkedList

01

A:List接口的特点:
a:它是一个元素存取有序的集合。
例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
b:它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。

c:集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

 d:List接口的常用子类有:

 ArrayList集合
 LinkedList集合

02List接口的特有方法

A:List接口的特有方法(带索引的方法)

a:增加元素方法
 add(Object e):向集合末尾处,添加指定的元素
 add(int index, Object e) 向集合指定索引处,添加指定的元素,原有元素依次后移

 /*
   *  add(int index, E)
   *  将元素插入到列表的指定索引上
   *  带有索引的操作,防止越界问题
   *  java.lang.IndexOutOfBoundsException
   *     ArrayIndexOutOfBoundsException
   *     StringIndexOutOfBoundsException
   */
  public static void function(){
    List<String> list = new ArrayList<String>();
    list.add("abc1");
    list.add("abc2");
    list.add("abc3");
    list.add("abc4");
    System.out.println(list);
    
    list.add(1, "itcast");
    System.out.println(list);
  }

b:删除元素删除
 remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素
 remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素
/*
* E remove(int index)
* 移除指定索引上的元素
* 返回被删除之前的元素
*/
public static void function_1(){
List<Double> list = new ArrayList<Double>();
list.add(1.1);
list.add(1.2);
list.add(1.3);
list.add(1.4);

    Double d = list.remove(0);
    System.out.println(d);
    System.out.println(list);
  }

c:替换元素方法
 set(int index, Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素
/*
* E set(int index, E)
* 修改指定索引上的元素
* 返回被修改之前的元素
*/
public static void function_2(){
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);

    Integer i = list.set(0, 5);
    System.out.println(i);
    System.out.println(list);
  }
d:查询元素方法

 get(int index):获取指定索引处的元素,并返回该元素

03迭代器的并发修改异常

A:迭代器的并发修改异常
 
 /*
  *  迭代器的并发修改异常 java.util.ConcurrentModificationException
  *  就是在遍历的过程中,使用了集合方法修改了集合的长度,不允许的
  */
 public class ListDemo1 {
  public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("abc1");
    list.add("abc2");
    list.add("abc3");
    list.add("abc4");
    
    //对集合使用迭代器进行获取,获取时候判断集合中是否存在 "abc3"对象
    //如果有,添加一个元素 "ABC3"
    Iterator<String> it = list.iterator();
    while(it.hasNext()){
      String s = it.next();
      //对获取出的元素s,进行判断,是不是有"abc3"
      if(s.equals("abc3")){
        list.add("ABC3");
      }
      System.out.println(s);
    }
  }
 }

 运行上述代码发生了错误 java.util.ConcurrentModificationException这是什么原因呢?
   在迭代过程中,使用了集合的方法对元素进行操作。
   导致迭代器并不知道集合中的变化,容易引发数据的不确定性。
   
 并发修改异常解决办法:
    在迭代时,不要使用集合的方法操作元素。
    或者通过ListIterator迭代器操作元素是可以的,ListIterator的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。

04数据的存储结构

A:数据的存储结构
 a:栈结构:后进先出/先进后出(手枪弹夹) FILO (first in last out)
 b:队列结构:先进先出/后进后出(银行排队) FIFO(first in first out)
 c:数组结构:
           查询快:通过索引快速找到元素
           增删慢:每次增删都需要开辟新的数组,将老数组中的元素拷贝到新数组中
                  开辟新数组耗费资源
 d:链表结构
           查询慢:每次都需要从链头或者链尾找起
           增删快:只需要修改元素记录的下个元素的地址值即可不需要移动大量元素
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,291评论 0 16
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,001评论 19 139
  • 今天是个阳光明媚的日子,心情很好! 经过了几年的蜗居和彻底的心理放松,外加瑜伽的疗愈,感觉自己恢复了许多生机,有时...
    悠悠茶香远阅读 275评论 1 5
  • 获取用户个人的物品类型侧菜单栏 功能要求描述现在项目涉及物品的类型,其实是无限级分类的处理,但是项目要求不仅要获取...
    myFamily329阅读 188评论 0 1