java基础:集合框架之List(共性方法)

 List 集合:元素是有序的,元素可以重复,因为该集合体系具有索引。

 特有方法:凡是可以操作脚标的方法都是该体系的特有方法。

 List 集合可以实现增,删,改,查等功能。

 具体实现的方法:

     增:add(index,element); addall(index,);

     删:remove(index);

     set(index,element);

     查:get(index); subList(from,to); listIterator();


示例代码:

package com.L.List;

import java.util.ArrayList;

public class List01 {
	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		// 增
		list.add("L01");
		list.add("L02");
		list.add("L03");
		list.add("L04");
		System.out.println(list);
		// 删
		list.remove(1);// 删除第二条元素
		System.out.println(list);
		// 改
		list.set(0, "L0change");// 修改第一条元素
		System.out.println(list);
		// 查
		System.out.println(list.get(0));//获取第一个元素
		System.out.println(list.subList(0, 2));//获取前两个元素 注意subList(from,to)方法的两个参数是包含头不包含尾的
	}

}

若要将元素依次取出我们可以使用迭代器Iterator,具体操作如下:

		Iterator it = list.iterator();// 得到list的迭代器
		while (it.hasNext()) {// 通过循环将元素取出
			System.out.println(it.next());
		}

Iterator不仅是可以迭代元素,还可以对集合进行删除操作,这里仅限于删除一种操作。同时在进行增删操作时系统会报出NoSuchElementException异常,产生这种异常的原因是,我们队集合进行了更新,但是我之前得到的迭代器Iterator并不知道list集合更新了,还是原来缓存的list,所以当迭代器迭代到已经被删除的元素时,因为找不到元素则报出NoSuchElementException异常。

我们想既然Iterator只能对集合进行删除,那为什么不能增加元素呢?大家可以试一下这段代码:

		Iterator it = list.iterator();// 得到list的迭代器
		while (it.hasNext()) {// 通过循环将元素取出
			if (it.next().equals("L04")) {
				list.add("L05");
				it.remove();
			}
			System.out.println(it.next());
		}


系统肯定会报出ConcurrentModificationException(并发修改异常)。因为我们在通过迭代器对集合进行操作时,只是对list的一个引用经行修改(准确的说Iterator只是list的一个引用),同时迭代器在迭代list中的元素,而这个迭代器无法判断这个在迭代器中新添加的元素是否需要打印出来的,这时就产生了ConcurrentModificationException(并发修改异常)。

      同理若对元素进行修改也会发生此异常。


      如果有需要在迭代器里经行元素的增,改,我是是否有其他办法呢?实时上是有的。

      实现这种需求我们就需要用到ListIterator,示例代码如下:

		ListIterator listit = list.listIterator();// 得到ListIterator迭代器
		while (listit.hasNext()) {
			if (listit.next().equals("L04")) {
				// listit.add("L05");//在L04后面添加一个元素L05
				listit.set("L04Change");// 将L04修改为L04Change
			}
		}
		System.out.println(list);

      所以利用ListIterator就可以对元素进行增删改查了。利用ListIterator还可以对集合进行其他操作这里就不一一说明了。

List集合又可细分为ArryList,LinkedList,Vector。它们的区别就在于底层数据结构不同。

      区别:

      ArryList:底层的数据结构使用的是数组结构。特点:查询速度快。增删稍慢。线程不同步。
      LinkedList:底层的数据结构使用的是链表结构。特点:增删速度快。查询稍慢。
      Vector:底层是数组结构。线程同步。被ArryList替代了。

      具体的这三种类型到底怎么使用就靠大家翻阅java文档,多多练习了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值