java arraylist_Java集合之ArrayList常见操作,实例说明

本文介绍了Java集合中的ArrayList,包括ArrayList的定义、特点和常见操作,如增、删、改、查等,并通过实例详细解释了ArrayList的操作方法,如add、remove、set、get等。此外,还讲解了ListIterator的使用,它是List特有的迭代器,允许在遍历过程中进行增删改查操作,避免了ConcurrentModificationException异常。
摘要由CSDN通过智能技术生成

一.定义

集合(Collection)是Java存储对象常见的一种方式;集合中的各个对象最终存储在类似数组[]中。那么,为什么有了数组还要用集合呢?因为,集合中的长度可变,所以不用一开始就定义其长度(数组在定义时必须要定义其长度),数组中可以存储基本数据类型,而集合中可以存储任意的对象。

Java集合(collection)包含List和Set;本章先讲List集合

二.List分类

List常见的又可包含:ArrayList,LinkedList,Vecor;

ArrayList是可变长度数组,它的初始默认长度是10,当添加的元素长度超过10时,它会新产生一个数组,长度按50%的增幅增加,产生新数组后会将之前的数据拷贝到新数组中,后续元素将继续添加。

三.List常见的操作

下面以ArrayList来讲解List常见的操作方法。

List属于集合中的一种,它的长度是可变的,值也是可变的,内容可以为任意的对象

List结果是一个类似数组的格式,也可看做类似pyhotn中的list

List是有序的,它的值可以重复,所以它可以使用索引来进行操作

而Set是无序的,所以它的值不能重复

List中的方法

产生Arraylist对象

ArrayList arraylist = new ArrayList();

1.增

arraylist.add()默认在最后位置添加

arraylist.add(int index,Object obj)在指定位置添加

2.删

arraylist.remove(int index) 按索引进行移除

arraylist.remove(Object)按照值对象进行移除,若有多个相同的对象则按先后顺序删除第一个

3.改

arraylist.set(int index,Object obj) 按照指定索引对其值进行设置

4.查

arraylist.get(int index) 按索引获取对应的值

arraylist.index(Object obj) 按照具体对象获取对应的索引值,如有相同对象则获取第一个角标

arraylist.lastindex(Object obj) 按照具体对象获取对应的最后一个索引值(逆向安排)

5.遍历List

5.1 使用for循环

for(int i=0;i

System.out.println(arraylist1.get(i));

}

5.2 使用迭代器Iterator

Iterator it = arraylist.iterator();

5.2.1方法1s使用for循环

for(;it.hasNext();){

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

}

5.2.2方法2使用while循环

while(it.hasNext()){

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

}

7.判断

f6fe8097a91a332a306e80a0376400e2.png

8.List特有的迭代器ListIterator

列表迭代器是List专有的

我们平时在对List进行遍历时,使用Iterator时,只能进行hasNext()、Next、remove操作,但是往往我们在遍历时还需要对遍历的对象进行增删改查等操作,此时Iterator不再符合需求,此时你可能想到在遍历时直接操作集合(List),但是Java此时会报ConcurrentModificationExceptiony异常(如下图),也就是说我们在对集合使用Iterator时,不能再对原有的集合进行操作。

484de652b6ba171b57c65cc560c29ff4.png

原因:可以这样思考:Iterator是对原有的集合(例如:List)进行作用产生一个新Iterator的对象,如果在操作Iteartor时再对原集合进行增、改操作时,现有的Iterator所对应的原有的集合已经发生改变了,Java会抛异常。

为了解决该问题,List提供了特有的ListIterator列表迭代器,它可以在遍历的时候对ListIterator和原有集合进行操作。如下图:

5a73699941d509fa038e6860ed85f553.png

运行结果如下图:

68a2220fc9f185d77b2912e92923309b.png

9.部分示例代码如下

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.ListIterator;

public class ListTest {

public static void main(String[] args){

/*ArrayList al1 = new ArrayList();

ArrayList al2 = new ArrayList();

al1.add("i");

al1.add("want");

al1.add("a");

al1.add("dream");

al2.add("what");

al2.add("is");

al2.add("your");

al2.add("dream");

System.out.println("al1="+al1);

System.out.println("al2="+al2);

//判断arraylist是否含有某个元素或集合

boolean b1 = al1.contains("want");

boolean b2 = al1.contains("go");

boolean b3 = al1.containsAll(al2);

System.out.println("b1="+b1+";b2="+b2+";b3="+b3);

//判断两个arraylist是否相等

boolean b4 = al1.equals(al2);

System.out.println("b4="+b4);

//判断arraylist是否为空

boolean b6 = al1.isEmpty();

System.out.println("b6="+b6);*/

//产生ArrayList对象

ArrayList arraylist1 = new ArrayList();

//增加元素

arraylist1.add("you");

arraylist1.add(0,"What");

System.out.println(arraylist1);

//判断元素是否在该arrylist中

boolean b1 = arraylist1.contains("You");

System.out.println(b1);

//增加元素

arraylist1.add("you");

arraylist1.add(2,"and");

System.out.println(arraylist1);

//通过索引(下标)来直接获取对应的元素,超过则提示角标越界异常

System.out.println(arraylist1.get(1));

//删除(移除元素)

arraylist1.remove("and");

arraylist1.remove(1);//可能发生角标越界异常

//通过角标更改元素值,可能发生角标越界异常

arraylist1.set(1,"who");

System.out.println(arraylist1);

//通过对象的方式移除arraylist中的某个元素

arraylist1.remove("you");

//获取对应元素的角标,按照具体对象获取对应的索引值,如有相同对象则获取第一个角标

int a1 = arraylist1.indexOf("What");

int a2 = arraylist1.indexOf("do");

System.out.println("a1="+a1);

System.out.println("a2="+a2);

//遍历arraylist中的元素,使用for循环的方式

for(int i =0;i

System.out.println(arraylist1.get(i));

}

//遍历使用迭代器的for循环方式,建议使用该方式

Iterator it1 = arraylist1.iterator();

for(;it1.hasNext();){

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

}

//遍历使用迭代器的while循环方式

while(it1.hasNext()){

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

}

arraylist1.add("and");

arraylist1.add("me");

String array1[] ={"i","want","to","do"};

arraylist1.add(array1);

System.out.println("--------"+arraylist1);

//通过角标获取字列表(含头不含尾)

List sublist1 = arraylist1.subList(1, 3);

System.out.println("sublist1="+sublist1);

/**

* ListIterator列表迭代器

* 列表迭代器是List专有的

* 我们平时在对List进行遍历时,使用Iterator时,只能进行hasNext()、Next、remove操作,

* 但是往往我们在遍历时还需要对遍历的对象进行增删改查等操作,此时Iterator不再符合需求,此时你可能想到在遍历时直接操作集合(List)

* ,但是Java此时会报ConcurrentModificationExceptiony异常(如下图),也就是说我们在对集合使用Iterator时,不能再对原有的集合进行操作。

* 原因:可以这样思考:Iterator是对原有的集合(例如:List)进行作用产生一个新的Iterator的对象,如果在操作Iteartor时再对原集合进行增、改操作时,

* 现有的Iterator所对应的原有的集合已经发生改变了,Java会抛异常。

* 为了解决该问题,List提供了特有的ListIterator列表迭代器,它可以在遍历的时候对ListIterator和原有集合进行操作。

*/

/* while(it1.hasNext()){

if(it1.next()=="What"){

arraylist1.add("add");

}

}*/

System.out.println("原来的arraylist="+arraylist1);

ListIterator listIt = arraylist1.listIterator();

for(;listIt.hasNext();){

Object obj = listIt.next();

System.out.println(obj);

if(obj=="who"){

//使用listIterator对原集合进行增加操作,新添加的元素不在遍历的范围内

listIt.add("Iterator");

}

else if(obj=="me"){

//使用listIterator对原集合进行修改操作

listIt.set("ME");

}

else if(obj=="and"){

//使用listIterator对原集合进行删除操作

listIt.remove();

}

}

System.out.println("现在的arraylist="+arraylist1);

System.out.println(arraylist1.equals(listIt));

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值