🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis
石可破也,而不可夺坚;丹可磨也,而不可夺赤。
集合体系结构
一、单列集合顶层接口Collection 二、Collection 的遍历方式 2.1 迭代器遍历 2.2 增强for遍历 2.3 Lambda表达式遍历
三、List集合的特有方法
一、单列集合顶层接口Collection
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()
返回集合中元素的个数/集合的长度
List 系列集合:添加的元素是有序、可重复、有索引 Set 系列集合:添加的元素是无序、不重复、无索引
二、Collection 的遍历方式
2.1 迭代器遍历
迭代器在ava中的类是Iterator,迭代器是集合专用的遍历方式。 Collection集合获取迭代器
方法名称 说明 Iterator<E> iterator()
返回迭代器对象,默认指向当前集合的0索引
方法名称 说明 boolean hasNext()
判断当前位置是否有元素,有元素返回true,没有元素返回false E next()
获取当前位置的元素,并将迭代器对象移向下一个位置
public static void main ( String [ ] args) {
Collection < String > coll = new ArrayList < > ( ) ;
coll. add ( "aaa" ) ;
coll. add ( "bbb" ) ;
coll. add ( "ccc" ) ;
coll. add ( "ddd" ) ;
Iterator < String > it = coll. iterator ( ) ;
while ( it. hasNext ( ) ) {
String str = it. next ( ) ;
System . out. println ( str) ;
}
}
细节: 1.当迭代器遍历完集合时,再强行访问没有元素的位置,会报错NoSuchElementException
2.迭代器遍历完毕,指针不会复位 3.循环中只能用一次next
方法 4.迭代器遍历时,不能用集合的方法进行增加或者删除
2.2 增强for遍历
增强for的底层就是迭代器,为了简化迭代器的代码书写的 它是JDK5之后出现的,其内部原理就是一个Iterator迭代器 所有的单列集合和数组才能用增强for进行遍历
public static void main ( String [ ] args) {
Collection < String > coll = new ArrayList < > ( ) ;
coll. add ( "aaa" ) ;
coll. add ( "bbb" ) ;
coll. add ( "ccc" ) ;
coll. add ( "ddd" ) ;
System . out. println ( "----------增强for----------" ) ;
for ( String s : coll) {
System . out. println ( s) ;
}
}
细节 修改增强for中的变量,不会改变集合中原本的数据。
2.3 Lambda表达式遍历
得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。 匿名内部类方式
public static void main ( String [ ] args) {
Collection < String > coll = new ArrayList < > ( ) ;
coll. add ( "aaa" ) ;
coll. add ( "bbb" ) ;
coll. add ( "ccc" ) ;
coll. add ( "ddd" ) ;
System . out. println ( "----------匿名内部类方式----------" ) ;
coll. forEach ( new Consumer < String > ( ) {
@Override
public void accept ( String s) {
System . out. println ( s) ;
}
} ) ;
}
@Override
public void forEach ( Consumer < ? super E > action) {
Objects . requireNonNull ( action) ;
final int expectedModCount = modCount;
@SuppressWarnings ( "unchecked" )
final E [ ] elementData = ( E [ ] ) this . elementData;
final int size = this . size;
for ( int i= 0 ; modCount == expectedModCount && i < size; i++ ) {
action. accept ( elementData[ i] ) ;
}
if ( modCount != expectedModCount) {
throw new ConcurrentModificationException ( ) ;
}
}
forEach
会对集合进行遍历,将得到的集合元素传给accep()
方法,方法内的参数就是集合中的元素
public static void main ( String [ ] args) {
Collection < String > coll = new ArrayList < > ( ) ;
coll. add ( "aaa" ) ;
coll. add ( "bbb" ) ;
coll. add ( "ccc" ) ;
coll. add ( "ddd" ) ;
System . out. println ( "----------Lambda方式----------" ) ;
coll. forEach ( s-> System . out. println ( s) ) ;
}
三、List集合的特有方法
Collection的方法List都继承了 Lst集合因为有索引,所以多了很多索引操作的方法.
方法名称 说明 void add(int index,E element)
在此集合中的位置插入指定的元素 E remove(int index)
删除指定索引处的元素,返回被修改的元素 E set(int index,E element)
修改指定索引处的元素,返回被修改的元素 E get(int index)
返回指定索引处的元素