java_进阶 :集合

1、数组的优势与弊端

  1. 数组在内存存储方面的特点:

​ 1 数组初始化以后 长度就是确定的,不可以改变

​ 2 数组声明的类型 就决定了进行元素初始化时的类型

  1. 数组在存储方面的弊端:

​ 1 输出初始化之后 长度不可变 不便于扩展

​ 2 数组中提供的属性和方法较少,不便于对元素进行添加 删除 插入等操作,且效率不高,同时无法直接获取存储的元素的个数。

​ 3 数组存储的数据是有序的,可以重复。

2、集合框架

Java 集合框架支持两种类型的容器:一种是为了存储一个元素集合,简称为集合(collection);另一种是为了存储键/值对,称为映射(map,或称图)。

2.1 集合的体系结构
在这里插入图片描述

3、 collection接口

1、collection接口

Collection 是一个顶层接口,一些 Collection 接口的实现类允许有重复的元素,而另一些则不允许;一些 Collection 是有序的,而另一些则是无序的。

JDK 不提供 Collection 接口的任何直接实现类,而是提供了更具体的子接口,如 Set 接口和 List 接口。这些子接口继承 Collection 接口的方法,然后再对 Collection 接口从不同角度进行重写或扩充。

2、collection 接口的三个子接口
Collection 接口主要有三个子接口,分别是 Set 接口、List 接口和 Queue 接口,

  • Set 接口

Set 实例用于存储一组不重复的元素。

  • List 接口

List 实例是一个有序集合。程序员可对 List 中每个元素的位置进行精确控制,可以根据索引来访问元素,此外 List 中的元素是可以重复的。

  • Queue 接口

Queue 中的元素遵循先进先出的规则,是对数据结构“队列”的实现。

4、Map 接口

Map 接口定义了存储和操作一组“键(key)值(value)”映射对的方法。

Map 接口和 Collection 接口的本质区别在于,Collection 接口里存放的是一系列单值对象,而 Map 接口里存放的是一系列key-value 对对象。Map 中的 key 不能重复,每个 key 最多只能映射到一个值。

HashMap 和 Hashtable 是 Map 接口的实现类。

5、迭代器

Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。

iterator()方法定义在 Collection 接口中,因此所有单值集合的实现类,都可以通过 iterator()实现遍历。iterator()的返回值是 Iterator 对象,通过 Iterator 接口的 hasNext()和 next()方法即可实现对集合元素的遍历。

  • 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
  • 调用 it.hasNext() 用于检测集合中是否还有元素。
  • 调用 it.remove() 将迭代器返回的元素删除。

Iterator 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.Iterator; // 引入 Iterator 类

迭代器的使用:

 // 迭代器迭代集合
       Iterator iter =  collection.iterator();
       // 使用迭代器来迭代集合
       while(iter.hasNext()){
         Object obj =   iter.next();
           System.out.println(obj);
       }

迭代器使用while和for那个更好:

​ for循环更利于空间的释放

但是在开发中 普遍使用while

ConcurrentModificationException : 并发修改异常

产生原因:

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

解决方案:通过集合本身来进行遍历集合,有集合自己修改

for(int i = 0 ; i < list.size();i++){
    String str = (String)list.get(i);
    if(str.equals("world")){
      //  list.add("hadoop");//新增  新增到集合的末尾
        list.set(i,"hadoop");// 修改元素
    }
}
System.out.println(list);

ListIteator

voidadd(E e) 将指定的元素插入列表(可选操作)。
booleanhasNext() 返回 true如果遍历正向列表,列表迭代器有多个元素。
booleanhasPrevious() 返回 true如果遍历反向列表,列表迭代器有多个元素。
Enext() 返回列表中的下一个元素,并且前进光标位置。
intnextIndex() 返回随后调用 next()返回的元素的索引。
Eprevious() 返回列表中的上一个元素,并向后移动光标位置。
intpreviousIndex() 返回由后续调用 previous()返回的元素的索引。
voidremove() 从列表中删除由 next()previous()返回的最后一个元素(可选操作)。
voidset(E e)指定的元素替换由 next()previous()返回的最后一个元素(可选操作)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值