java arraylist 类_Java ArrayList类

首页 > 基础教程 > 集合框架 > ArrayList类

Java ArrayList类

ArrayList是一个基于数组上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

语法

ArrayList()

构造一个初始容量为 10 的空列表(每次递增容量的一半)

ArrayList(Collection extends E> c)

构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的

ArrayList(int initialCapacity)

构造一个具有指定初始容量的空列表

特殊方法

void ensureCapacity(int minCapacity)

如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。

返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。

protected  void removeRange(int fromIndex, int toIndex)

移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。

遍历

package com.itlwc;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class Test {

public static void main(String[] args) {

List list = new ArrayList();

list.add("lwc");

list.add("nxj");

// 遍历方法一

Iterator ite1 = list.iterator();

while (ite1.hasNext()) {

String str = ite1.next();

System.out.println(str);

}

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

// 遍历方法二(方法一的变形)

for (Iterator ite2 = list.iterator(); ite2.hasNext();) {

String str = ite2.next();

System.out.println(str);

}

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

// 遍历方法三

for(String s : list){

System.out.println(s);

}

}

}

/*

打印结果:

lwc

nxj

---------------------

lwc

nxj

---------------------

lwc

nxj

*/

总结

ArrayList依赖于数组实现的,初始长度为10的Object[],并且可随需要而增加的动态数组当元素超过10,那么ArrayList底层会新生成一个数组,长度为原来的1.5倍+1,然后将原数组内容复制到新数组中,并且后续增加的内容会放到新数组中,当新数组无法容纳增加的元素,重复该过程。

ArrayList对随机访问性能很好,但进行大量插入,删除操作,性能很差,因为操作之后后续元素需要移动。

实例

public class ArrayListReview {

public static void main(String[] args) {

ArrayList infosList=new ArrayList<>();

infosList.add(new Info(0, "aaa"));

infosList.add(new Info(1, "bbb"));

infosList.add(new Info(2, "ccc"));

infosList.add(new Info(3, "ddd"));

infosList.add(1, new Info(4, "eee")); // 按索引插入到指定位置

// foreach遍历输出

for (Info info : infosList) {

System.out.println(info);

}

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

// 截取字串

List subList = infosList.subList(1, 3);

subList.add(new Info(30, "fly"));

printList(subList);

ArrayList newInfosList=new ArrayList<>();

newInfosList.add(new Info(11, "qqq"));

newInfosList.add(new Info(12, "www"));

ArrayList ss=new ArrayList<>();

//      infosList.addAll(newInfosList);  // 添加一个指定集合到原集合最后,注意两个集合的泛型参数一致

infosList.addAll(2,newInfosList); // 将指定集合插入到指定位置

//printList(infosList);

Info info = infosList.get(2);  // 取出指定位置的元素

System.out.println(info);

infosList.set(0, new Info(10, "rrr"));   // 替换指定索引位置的元素

//printList(infosList);

int index = infosList.indexOf(info);  //根据元素获取元素第一次出现的索引,不存在则返回-1

int lastIndex = infosList.lastIndexOf(info); // 取出元素的最后一个匹配项的索引

int indexOf = infosList.indexOf(new Info(4,"eee")); // 重写了Info类的hashCode与equals方法,用于判断两个对象是否相同

System.out.println("index="+indexOf);

//printList(infosList);

// 通过反射拿到的removeRange方法

removeRange(infosList, 1, 3);

//printList(infosList);

// listIterator从前往后迭代

ListIterator listIterator = infosList.listIterator();

while(listIterator.hasNext()){

// 最后抛出错误,java.util.NoSuchElementException,不要每次取都掉用next方法,它每调用一次,迭代器指针向前移动一位

//          System.out.println("id="+listIterator.next().getId()

//                  +"adress="+listIterator.next().getAdress());

Info next = listIterator.next();  // 正确做法,调用一次要取出元素,然后操作属性

System.out.println("id="+next.getId()

+" adress="+next.getAdress());

}

// 往前迭代,必须在往后迭代之后用

while(listIterator.hasPrevious()){  // 当有上一个元素时

Info previous = listIterator.previous();  // 获取上一个元素

System.out.println("id="+previous.getId()+" adresss="+previous.getAdress());

}

// 通过数组来转化成一个List,虽然可以把数组转成集合,但是集合的长度不能改变。

String[] a=new String[]{"hello","world","just","do","it"};

List asList = Arrays.asList(a);

//asList.add("gogogo");  //不可修改asList,会抛出UnsupportedOperationException

// 泛型使用

//      ArrayList l=new ArrayList();// 不行

//      ArrayList lll=new ArrayList(); // 不行

//      ArrayList lll=new ArrayList(); // 不行

//      ArrayList l=new ArrayList(); // 可行

//      ArrayList l=new ArrayList<>(); // 可行

//      ArrayList ll=new ArrayList();  // 可行

}

// 打印输出

public static void printList(List list) {

for (E e : list) {

System.out.println(e);

}

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

}

}

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值