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

集合进阶

  • 集合进阶
    • Collection
    • Collection集合常用方法
    • Collection集合的遍历
      • Iterator中的常用方法
      • 集合的使用步骤
    • List集合概述和特点
      • List集合的特点
      • List集合的特有方法
      • 并发修改异常
      • ListIterator 列表迭代器
      • 常用方法
        • 增强for循环
      • 数据结构
        • 队列
        • 数组
        • 链表
    • Set集合
      • Set特点
      • 实现类
        • HashSet
          • 哈希值
          • HashSet集合特点
          • HashSet保证元素唯一性的原因
          • 哈希表
        • LinkedHashSet集合概述及特点
        • TreeSet概述和特点
          • 自然排序Comparable的使用
          • 比较器Comparator的使用

集合进阶

Collection

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

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

Collection集合常用方法

Java学习笔记23——集合进阶_第1张图片

Collection集合的遍历

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

Iterator中的常用方法

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

集合的使用步骤

Java学习笔记23——集合进阶_第2张图片

List集合概述和特点

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

List集合的特点

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

List集合的特有方法

Java学习笔记23——集合进阶_第3张图片

并发修改异常

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
链表增删快查询慢

特有功能
Java学习笔记23——集合进阶_第4张图片

Set集合

java.util下,是个接口,extends Collection

Set特点

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

实现类

HashSet

不对迭代顺序作保证

哈希值

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

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

Java学习笔记23——集合进阶_第5张图片
hashCode()和equals()保证了元素的唯一性

哈希表

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

存储元素时,先计算哈希值,如果位置为空则直接插入,否则插入链表,插入时检查链表中是否有哈希值一样的,如果一样比较内容,相同则不插入
Java学习笔记23——集合进阶_第6张图片

注:用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;
            }
        });

你可能感兴趣的:(从零开始Java学习,java,学习,笔记)