Java学习笔记23——集合进阶

集合进阶

Collection

Interface Collection
是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
JDK不提供此接口的任何直接实现,通过子接口(如Set和List)实现

Collection<String> c=new ArrayList<String>();
//添加
c.add("我");
c.add("想");
c.add("你");

Collection集合常用方法

Collection集合常用方法

Collection集合的遍历

Iterator迭代器,集合的专用遍历方式
java.util
Iterator<E> iterator() 返回此集合中元素的迭代器,通过集合的iterator()方法得到,依赖集合而存在

Iterator中的常用方法

E next():返回迭代器中的下一个元素
boolean hasNext():如果还有元素返回true

集合的使用步骤

集合的使用步骤

List集合概述和特点

java.util
1、List集合是有序集合也称序列,用户可以精确控制列表中每一个元素的插入位置,可以通过整数索引访问元素,并搜索列表中的元素
2、与Set集合不同,允许重复

List集合的特点

1、有序:存储和取出元素的顺序一致
2、可重复:存储的元素可以重复

List集合的特有方法

List集合的特有方法

并发修改异常

ConcurrentModificationException
产生原因:迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中,判断预期修改值与实际修改至不一致
解决方案:用for循环遍历,然后用集合对象做相应的操作即可

ListIterator 列表迭代器

java.util

常用方法

函数名作用
E next()返回迭代器中的下一个元素
boolean hasNext()如果迭代器有更多元素返回true
E previous()返回列表中的上一个元素
boolean hasPrevious()如果此列表在迭代器相反方向遍历有更多的元素,返回true
void add(E e)将指定元素插入列表

ListIterator不会产生并发修改异常,在添加是会把实际修改次数赋值给预期修改次数

增强for循环

增强for:简化了数组和Collection集合的遍历
实现Iterable接口的类允许其对象车各位增强型for语句的目标
是JDK5之后出现的,内部原理是Iterator迭代器

格式如下:

for(元素类型 变量名:数组或者Collection集合){
	//代码块
}

数据结构

先进后出

队列

先进先出

数组

ArrayList
1.查询:通过索引定位,查询任意数据的耗时相同,查询速度快
2.删除:删除数据是后面的每个数据会前移,删除效率低
3.添加:添加位置后的每个数据后移,添加效率低

链表

LinkList
链表增删快查询慢

特有功能
LinkList的特有功能

Set集合

java.util下,是个接口,extends Collection<E>

Set特点

1.不包含重复元素
2.不能用for遍历
3.是接口不能实例化

实现类

HashSet

不对迭代顺序作保证

哈希值

JDK根据地址或者字符串或者数字算出来的int值
Object类中 public int hashCode() 可以获得对象的哈希值
同一个对象多次调用此方法,返回的哈希值是相同的
默认情况下,不同对象的哈希值是不同的
通过方法重写,不同对象的哈希值可以相同

HashSet集合特点
  1. 底层数据结构是哈希表
  2. 对接的迭代顺序不做保证,不保证存取和取出的顺序一致
  3. 没有带索引的方法所以不能使用普通的for循环遍历
  4. 没有重复元素
HashSet保证元素唯一性的原因

HashSet添加元素的过程
hashCode()和equals()保证了元素的唯一性

哈希表

JDK8之前底层采用的是数组+链表实现的
JDK8之后长度比较长时底层实现了优化

存储元素时,先计算哈希值,如果位置为空则直接插入,否则插入链表,插入时检查链表中是否有哈希值一样的,如果一样比较内容,相同则不插入
哈希表插入过程

注:用HashSet存储对象避免相同对象存入可以重写hashCode()和equals()自动生成即可

LinkedHashSet集合概述及特点

Java.util包下,继承自HashSet,实现了Set接口

特点

  1. 哈希表和链表实现的Set接口,具有可预测的迭代次序
  2. 由链表保证元素有序,存入和取出的顺序一致
  3. 由哈希表保证元素唯一,没有重复元素
TreeSet概述和特点

Java.util包下,间接实现Set接口

特点

  1. 元素有序,不是指存储和取出的顺序,而是按照一定的规则进行排序,具体方法取决于构造方法:
    TreeSet():根据元素的自然排序进行排序
    TreeSet(Comparator comparator):根据比较去进行排序
  2. 没有带索引的方法,不能使用for进行遍历
  3. 由于是Set集合,不包含重复元素
    存储的是引用类型,不能用基本类型,得用包装类
自然排序Comparable的使用
  1. 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
  2. 自然排序,就是让所属的类实现Comparable接口,重写comparaTo(T o)方法
  3. 重写时,要注意排序规则的主要条件和次要条件来写
比较器Comparator的使用
  1. 用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
  2. 比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
  3. 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
    如下可用匿名内部类
TreeSet<Student> ts=new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num=s1.getAge()-s2.getAge();
                int num2=num==0?s1.getName().compareTo(s2.getName()):num;
                return num2;
            }
        });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广阔天地,大有可为

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值