java中集合和迭代器_Java中的List集合和迭代器

本文详细介绍了Java中的List集合,重点讲解了ArrayList和LinkedList两种实现。ArrayList基于数组,适合频繁的随机访问,而LinkedList以链表实现,擅长插入和删除操作。文章通过代码示例展示了它们的特点、优缺点以及迭代器的使用。同时,强调了在不同场景下选择合适集合类型的重要性。
摘要由CSDN通过智能技术生成

一.Java中的List集合。

终于有时间来好好整理一下Java中的集合。

首先要讲的就是List集合。Java中List集合主要将两个:

第一个是底层使用数组维护的ArrayList,第二个是底层是链表的LinkedList。

1.List

List集合继承Collection集合,就是一个有序列表。

2.ArrayList

1.优点:由于底层维护的是数组,随机访问较为方便。可以动态扩容

2.初始化时的默认长度,以及动态扩容:默认长度为10,动态扩容是1.5倍。

3.实现的主要接口有:List接口,克隆接口,随机访问接口,序列化接口。

4.方法注意:clear(),不是将底层数组删除,而是将其设置为null

代码演示:

packageStudy_Collection;importjava.util.ArrayList;importjava.util.Arrays;public classArrayListText {public static voidmain(String[] args) {

ArrayList arr=new ArrayList<>(3);

arr.add("A");

arr.add(1,"B");if( arr.contains("A")){

System.out.println("集合含有A元素");

}else{

System.out.println("集合不含有A元素");

}if(arr.get(0).equals("A")) {

System.out.println("0号位为A");

}else{

System.out.println("0号位不为A");

}

arr.addAll(arr);

System.out.println("添加了自己后的arr集合:"+arr.toString());

System.out.println("在来测试一下我想要得到一个集合中没有的元素C的位置;"+arr.indexOf("C"));

arr.removeAll(new ArrayList<>(Arrays.asList(new String[] {"A"} )));

System.out.println(arr.toString());

}

}

3.LinkedList

1.优点:插入删除效率较高

2.缺点:随机访问效率较低,虽然提供了get(),set()方法,但是如果随机访问次数较多建议使用ArrayList。

3.特点:Java中链表为双端链表,所以他的迭代器也有双端迭代器。

代码实验:

packageStudy_Collection;importjava.util.Iterator;importjava.util.LinkedList;importjava.util.ListIterator;/*** LinkedList测试类*/

public classLinkedListText {/***

* LinkedList类是一个链表,java中的链表为双向链表

* 优点:善于插入删除

* 缺点:无法随机访问*/

public static voidmain(String[] args) {

LinkedList list=new LinkedList<>();

list.add(1);

list.add(2);

list.add(3);

list.add(4);

list.add(5);//链表的add方法直接将元素加入到链表的末尾//对于列表,它含有双向迭代器,当然也有单向迭代器

ListIterator it=list.listIterator();while(it.hasNext()){//it迭代器的指针在开头位置

it.next();//指针后移

}while(it.hasPrevious()){//现在it迭代器的指针在末尾

System.out.println(it.previous());//指针前移

}//在迭代器中的add方法()//在Collection接口中的add方法实现是直接加到末尾,但是迭代器的add是随着迭代器的位置去加入的。

it.next();

it.next();

it.add(6);while(it.hasPrevious()){

System.out.println(it.previous());

}//多个迭代器的问题

Iterator it2=list.listIterator();

it.next();

it.remove();

it2.next();//抛出并发修改异常,解决方式:多个迭代器时,只有一个可以读与写其他的都是读。

/*** 对于链表而言虽然提供了get set方法但是效率太低,需要随机访问建议使用ArrayList*/System.out.println(list.get(0));

list.set(0,3);

System.out.println(list.get(0));

}

}

3.针对迭代器

packageStudy_Collection;importjava.util.ArrayList;importjava.util.Iterator;/***迭代器*/

public classIteratorText {public static voidmain(String[] args) {/***

* 首先Collection接口实现了迭代器的方法所以实现了collection的类都可以使用迭代器*/ArrayList arr=new ArrayList<>();

arr.add("A");

arr.add("B");

Iterator it=arr.iterator();while(it.hasNext()){

System.out.println(it.next());

}//能够实现foreach循环的必须实现iterator接口

for(String str : arr){

System.out.println(str);

}//迭代器中的删除,是指删除上一次next()返回的元素,也就是说remove必须和next联合使用

it.next();

it.remove();

System.out.println(it.next());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值