集合进阶-Java入门-黑马程序员2022年新视频DAY23笔记

集合体系结构

1.集合主要分为单列集合(Collection)和双列集合(Map)。

2.单列集合在添加数据时都是单个添加,而双列集合在添加数据时是成对添加。

单列集合:Collection

1.Collection集合下又包括了List集合和Set集合,List集合下又包括了ArrayList集合,LinkedList集合以及被淘汰了的Vector集合;Set集合下又包括了HashSet集合和TreeSet集合,其中HashSet集合下面又有LinkedHashSet集合。(红色标记为接口,蓝色标记为实现类)

集合进阶-Java入门-黑马程序员2022年新视频DAY23笔记_第1张图片

2.List系列集合特点:添加的元素是有序、可重复、有索引的。

  • 有序:存和取的顺序是一样的
  • 可重复:集合中存储的元素是可以重复的
  • 有索引:可以通过索引去取集合中的元素

3.Set系列集合特点:添加的元素是无序、不重复、无索引的。

  • 无序:存和取的顺序有可能是不一样的
  • 不重复:集合中不能存储重复的元素
  • 无索引:不能通过索引去获得集合中的元素

4.Collection是单列集合的祖宗接口,他的功能是全部单列集合都可以继承使用的。

5.Collection中的方法:

方法名 说明
public boolean add(E e) 把给定的对象添加到当前集合中
public void clear() 清空集合中所有的元素
public boolean remove(E e) 把给定的对象在当前集合中删除
public boolean contains(Object obj) 判断当前集合中是否包含给定的对象
public boolean isEmpty() 判断当前集合是否为空
public int size() 返回集合中元素的个数/集合的长度

6.add方法返回值是boolean,当往List系列 集合中添加数据,返回值永远为true,当往Set系列集合添加数据,就会判断当前元素是否存在,如果存在返回false,不存在就添加进集合,返回true。

7.contains方法细节:contains方法底层是使用javabean类中的equals方法进行判断是否存在的,所以 ,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在javabean类中,一定要重写equals方法。

Collection的遍历方式

1.迭代器遍历:

  • 迭代器不依赖索引
  • 迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式
  • Collection集合获取迭代器: Iterator iterator() ,返回迭代器对象,默认指向当前集合的0索引
  • Iterator常用方法
方法名 说明
boolean hasNext() 判断当前位置是否有元素,有元素返回true,没有元素返回false
E next() 获取当前位置的元素,并将迭代器对象移向下一个位置
void remove() 从迭代器指向的collection中一处迭代器返回的最后一个元素(也就是最近使用next方法访问的元素)

2.迭代器注意点:

  • 如果当前的hasNext方法返回的已经是false,仍然使用next方法获取元素就会报错NoSuchElementException
  • 当迭代器遍历完毕,指针不会复位,因此如果还想要从头遍历,那就要获取一个新的迭代器
  • 循环中最好只使用一次next方法,否则容易出现越位,找不到元素报错
  • 迭代器遍历时,不能用集合的方法进行增加或者删除,否则会出现并发错误(暂时不了解),如果实在要删除,可以使用迭代器的remove方法,而添加暂时没有办法

3.增强for遍历:

  • 增强for的底层就是迭代器,为了简化迭代器的代码书写的
  • 它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
  • 只有单列集合和数组才能用增强for进行遍历
//格式:
for(元素的数据类型 变量名:数组或者集合){
}
//此处的变量名就是一个第三方变量,去接收每一次next方法的结果然后去使用

//可以直接使用list.for快捷生成加强for遍历
for(String s : list){
    sout(s);
}

4.Lambda表达式遍历:

  • 得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式
  • Lambda表达式实际是使用Collection的foreach方法

你可能感兴趣的:(java,开发语言)