首页 > 编程知识 正文

java里面的集合(arraylist数据结构)

时间:2023-05-06 09:20:12 阅读:68644 作者:2179

一.定义

“集合”(Collection )是Java存储对象的常见方法。 集合中的每个对象最终存储在类似的数组[]中。 那么,为什么有数组也要用集合呢? 因为集合的长度是可变的,所以不需要从一开始就定义长度。 数组必须在定义时定义长度。 数组可以包含基本数据类型,但集合可以包含任何对象。

Java集合(collection )包括列表和集; 本章首先论述List集合

二. List分类

List常见的有:阵列列表、链接列表、Vecor;

ArrayList是可变长度数组,初始缺省长度为10。 添加的元素长度超过10时,将生成一个新数组,其长度增加50%。 生成新数组后,以前的数据将复制到新数组中,后续元素将继续添加。

List常见操作

用ArrayList说明List的一般操作方法。

List是集合之一,长度可变,值也可变,内容可以是任何对象

List的结果呈数组形式,看起来像pyhotn的List

List是规则的,可以重复值,因此可以使用索引进行操作

Set是无序的,不能重复值

List中的方法

生成阵列对象

ArrayList ArrayList=new ArrayList (;

1 .增加

arraylist.add ) )默认情况下添加到最后一个位置

arraylist.add(intindex,Object obj )将添加到指定位置

2 .删除

Arraylist.remove(intindex )将按索引删除

ArrayList.remove(object )会针对每个值对象删除,如果有多个相同的对象,则会根据优先级删除第一个对象

3 .改变

ArrayList.set(intindex,Object obj )根据指定的索引设置值

4 .调查

ArrayList.get(intindex )获取每个索引的相应值

ArrayList.index(objectobj )为每个特定对象获取相应的索引值,如果有相同的对象,则获取第一个角点标记

arraylist.lastindex(objectobj )获取对应于每个特定对象的最后索引值(反向调度) )。

遍历列表

5.1for循环的使用

for(intI=0; I

system.out.println (ArrayList1. get (I ) );

}

5.2迭代器的使用

Iterator it=arraylist.iterator (;

5.2.1方法1使用1sfor循环

for (; it.hasNext (; () )。

系统. out.println (it.next ) );

}

5.2.2方法使用while循环

while(it.Hasnext ) ) ) )。

系统. out.println (it.next ) );

}

7 .判断

8.List特有的迭代器8.List迭代器

列表迭代器是List自己的

我们平时遍历List、使用Iterator时,只能进行hasNext (、Next、remove操作。 但是,在很多情况下,我们在遍历时还需要执行添加/删除遍历的对象等操作。 此时,迭代器已经不符合需要了。 在这种情况下,请考虑在遍历时直接处理集合(List )。 但是,Java此时会报告concurrentmodificationexceptiony异常。 也就是说,当我们对集合使用迭代器时,不能对原始集合执行操作。

原因:可以这样想。迭代器是作用于原始集合,例如:List,产生新的迭代器的对象。 如果在操作迭代器时对原始集合执行添加/更改操作,则如果与现有迭代器对应的原始集合已经更改,Java将抛出异常。

为了解决此问题,List提供列表迭代器列表迭代器,并允许在遍历过程中操纵列表迭代器和原始集合。 下图:

运行结果如下图:所示

9 .部分示例代码如下

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.ListIterator;

公共类列表{

公共系统

tatic 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));

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。