集合、增强for、数据结构

本文介绍了Java中数组与集合的区别,数组长度固定,元素可为基本类型或引用类型,而集合长度可变,仅支持引用类型。在集合中,基本类型需转换为包装类。接着探讨了集合的体系结构,包括Collection接口下的List和Set接口,以及ArrayList、LinkedList等实现类。文章还讲解了迭代器遍历和增强for遍历的使用,并提到了并发修改异常及其解决方法。最后,简单介绍了数据结构的概念,如栈、队列以及数组和链表的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组和集合的区别

1.数组的长度是固定的;数组元素类型可以是基本类型,也可以是引用类型
2.集合的长度是可变的;集合元素类型只能是引用数据类型。
    集合中如要想存储基本数据类型,需要转换为包装类
    int-->Integer

集合的体系结构

Colletion接口:集合体系的根接口
    -- List接口: 有索引、新增了一些对索引进行操作的方法
        ArrayList类
        LinkedList类

    -- Set接口: 没有索引
        HashSet类
        TreeSet类

Collection接口

public boolean add(E e) 
    将指定的元素集合的结尾
public void clear() 
    清空集合中的元素
public boolean contains(Object o) 
    如果这个列表包含指定元素,返回true
public boolean isEmpty() 
    如果集合不包含任何元素,则返回true
public boolean remove(Object o) 
    从这个集合中移除指定元素的一个实例,如果它是存在的(可选操作)。 
default boolean removeIf(Predicate<? super E> filter) 
    删除满足给定条件的这个集合的所有元素。 
    条件:通过Lambda表达式来提供
    
public int size() 
    返回此集合中的元素的数目
    
public Iterator iterator()
    获取集合的迭代器(是一种通用的遍历方式)

例://Collection是一个接口,不能直接创建的对象。但是可以创建它的实现类对象,也可以调用接口的方法。

Collection<String> coll=new ArrayList<>();

//添加元素
coll.add("helloJava");
coll.add("world");
coll.add("helloWorld");
coll.add("java");

//删除集合中以"hello"开头的元素
coll.removeIf(s->s.startsWith("hello"));  //这里的s表示集合中的元素

System.out.println(coll); 

迭代器遍历

Collection<String> coll=new ArrayList<>();

//添加元素
coll.add("土豆1");
coll.add("土豆2");
coll.add("土豆3");

//获取迭代器对象 (筷子)
Iterator<String> it = coll.iterator();

//判断是否有下一个元素
while (it.hasNext()){
    //获取元素
    String e = it.next();
    System.out.println(e);
}

//如果上面的循环结束了,表示元素已经遍历完了。继续获取元素会报错 NoSuchElementException
System.out.println(it.next()); 

使用迭代器时的注意事项:

注意问题:
    当使用迭代器进行遍历集合的时候,集合自己不能去操作集合中的元素。
    Java不允许迭代器和集合自己并发的修改集合    
    否则java.util.ConcurrentModificationException(并发修改异常)

解决方案:
    使用迭代器自己的删除方法 it.remove()

增强for遍历

增强for其实就是为了简化迭代器的代码书写,原理和迭代器一模一样。

for(元素类型  变量名 :  集合/数组){
    //变量名就表示所有的元素
}

快捷键:数组名.for

遍历集合:

Collection<String> coll=new ArrayList<>();
//添加元素
coll.add("土豆1");
coll.add("土豆2");
coll.add("土豆3");

//增强for
for(String s : coll){
    System.out.println(s);
}

遍历数组:

int[] array={1,2,3,4,5};
for(int s:array){
    System.out.println(s);
}

List集合特有方法 

//相对于Collection来说,List集合多了一些针对索引操作的方法

public void add(int index, E e)
    在指定的索引位置添加元素
public E remove(int index)
    根据索引删除元素,返回被删除的元素
public E get(int index)
    根据索引获取元素
public E set(int index, E e)
    修改指定索引的的元素

数据结构:数据的组织方式就叫做数据结构,不同的组织方式就形式不同的数据结构,每一种数据结构的特点不一样。

栈结构:先进后出  (子弹夹)
队列结构:先进先出 (排队、安检机)
    
数组:查询快,增删慢
链表:查询慢,增删快(每一个元素记录下一个元素的地址)

LinkedList类特有方法

由于 LinkedList底层是链表,新增了一些针对头和尾进行操作的方法。

public void addFirst(E e)
    添加元素到集合开头
public void addLast(E e)
    添加元素到集合末尾

public E removeFirst()
    移除开头的元素
public E removeLast()
    移除结尾的元素

public E getFirst()
    获取开头的元素
public E getLast()
    获取结尾的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值