【Java】集合进阶——List集合

简介: 【Java】集合进阶——List集合

2.List

   2.1List集合的概述和特点

   List集合概述:

   有序集合(也称为序列),用户可以精确的控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素。

 与Set集合不同,列表通常允许重复的元素

 

   List集合的特点:

   有序:存储和取出的元素顺序一致

   可重复:存储的元素可以重复。

   2.2 List集合特有方法

  2.3并发修改异常

   并发修改异常:ConcurrentModificationException

 

   产生原因:

 迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判断预期修改值和实际修改值不一致

   

   解决方案:

   用for循环遍历,然后用集合对象做对应的操作即可。

   2.4ListIterator

   ListIterator:列表迭代器

通过List集合的ListIterator()方法得到,所以说他是List集合特有的迭代器

   用于允许程序员沿任意方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置。

 ListIterator中的常用方法:

   E next():返回迭代中的下一个元素

   boolean hasNext():如果迭代具有更多元素,则返回true

  E previous():返回列表的上一个元素

   boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true

   void add(E e):将指定的元素插入列表

 2.5增强for循环

   增强for:简化数组和Collection集合的遍历

   实现iterable接口的类允许其对象成为增强型for语句的目标

它是jdk5之后出现的,其内部原理是一个Iterator迭代器。

   增强for的格式

   格式:

   for(元素数据类型 变量名:数组或者Collection集合){

       //在此处使用变量即可,该变量就是元素

}

   范例:

   int[]arr = {1,2,3,4,5};

   for(int i : arr){

       System.out.println(i);

}

遍历集合:

   迭代器:集合特有的遍历方式

   普通for:带有索引的遍历方式

   增强for:最方便的遍历方式

List<Student> list = new ArrayList<Student>();
Student s1= new Student("林青霞",19);
Student s2= new Student("张曼玉",10);
Student s3= new Student("王祖贤",19);
list.add(s1);
list.add(s2);
list.add(s3);
//迭代器
Iterator<Student> it = list.iterator();
while (it.hasNext()){
    Student s = it.next();
    System.out.println(s.getName()+","+s.getAge());
}
//普通for方式:带有索引的遍历方式
for (int i =0;i<list.size();i++){
    Student s = list.get(i);
    System.out.println(s.getName()+","+s.getAge());
}
//增强for方式
for (Student s :list){
    System.out.println(s.getName()+","+s.getAge());
}

2.6数据结构

   数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或者多种特定关系的数据元素的集合。

   通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。

2.7常见的数据结构之栈

   数据进入栈模型的过程为:压/进栈

   数据离开栈模型的过程为:弹/出站

 

   栈是一中先进后出的数据结构模型

2.8常见数据结构之队列

   数据从后端进入队列的模型的过程称为:入队列

   数据从前端离开队列的模型的过程称为:出对列

   

   队列是一种先进先出的模型。

 2.9常见数据结构之数组

查询数据通过索引定位,查询任意数据耗时相同,查询效率高

删除数据时,要将原始数据删除,同时后面每个数据前移,删除效率低

添加数据时,添加位置后的每个数据后移,再添加元素,添加效率极低。

 

   2.10常见数据结构之链表

链表是一种增删快的模型(对比数组)

2.11 List集合子类特点

List集合常用子类:ArrayList,Linkedlist

ArrayList:底层数据结构是数组,查询快,增删慢

LinkedList:底层数据结构是链表,查询慢,增删快

 

   2.12LinkedList 集合的特有功能


目录
相关文章
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
46 3
|
7天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
29 5
|
20天前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
31 4
|
1月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
30 2
|
1月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
1月前
|
Java 开发者
|
2月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
65 5
|
2月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
39 3
下一篇
DataWorks