List集合

 List和Set

Collection有很多子接口,其中,最常用的就是List和Set。List和Set都是接口。List是列表,Set是集。

List是可重复的集合,可以通过索引值对元素进行操作。Set是不能重复的集合。

 List

List使用

List的父接口是Collection,所以Collection中的方法List都能使用。现在来看看List特有的常见方法,这些方法有一个共性特点,就是都可以操作角标。

List特有的常见方法:

1)                  添加

                   void add(int index, E element)  在指定位置插入指定元素

                   boolean addAll(int index, Collection<? extends E> c)  在指定位置插入指定集合中的元素

2)                  删除

                    E remove(int index) 删除指定位置的元素,返回被删除的元素

3)                  修改

                    E set(int index, E element)  修改指定位置的元素,返回被修改之前的元素

4)                  获取

                    E get(int index) 获取指定位置的元素

                    int indexOf(Object o) 获取某个元素首次出现的索引

                    int lastIndexOf(Object o) 获取某个元素最后出现的索引

                    List<E> subList(int fromIndex, int toIndex)  获取子列表,从fromIndex(包含)到toIndex(不包含)的元素

package com.java.base;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ListDemo {
	public static void main(String[] args) throws IOException {
		List list = new ArrayList();
		list.add("Hadoop");
		list.add("Spark");
		list.add("Flink");
		//show01(list);
		//show02(list);
		//show03(list);
		show04(list);
	}
	
	private static void show04(List list){
		//ListIterator列表迭代器,List中特有的一种迭代方式
		//ListIterator可以向任意一个方向开始遍历List,可以使用列表迭代器在迭代的同时操作list集合
		ListIterator it = list.listIterator();
		//从下一个方向开始遍历
		while(it.hasNext()){
			Object obj = it.next();
			if(obj.equals("Hadoop")){
				it.add("Storm");
			}
			System.out.println(obj);
		}
		System.out.println("-------------------");
		//从前一个方向开始遍历
		while(it.hasPrevious()){
			System.out.println(it.previous());
		}
		System.out.println(list);
	}
	
	private static void show03(List list){
		Iterator it = list.iterator();
		while(it.hasNext()){
			Object obj = it.next();
			if(obj.equals("Hadoop")){
				list.add("Storm");
				//Exception in thread "main" java.util.ConcurrentModificationException
				//list/it同时操作集合产生的问题,解决的办法是可以用迭代器操作List集合中的元素
				//Iterator不能做到,但是ListIterator可以做到
			}
			System.out.println(obj);
		}
		System.out.println(list);
	}
	
	private static void show02(List list){
		//遍历List中元素方法一
		Iterator it = list.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
		//List中可以使用get(index)方法获取指定位置的元素
		System.out.println("get:"+list.get(0));
		//遍历List中元素方法二
		for(int i = 0; i < list.size(); i++){
			System.out.println(list.get(i));
		}
		
	}

	private static void show01(List list) {
		// TODO Auto-generated method stub
		System.out.println(list);
		//在指定位置添加元素
		list.add(1,"Storm");
		//删除指定位置的元素,返回的是被删除的元素
		System.out.println("remove:"+list.remove(1));
		//修改,返回修改之前的元素
		System.out.println("set:"+list.set(2, "Storm"));
		//获取指定位置的元素
		System.out.println("get:"+list.get(0));
		//获取子列表
		List list1 = list.subList(1, 3);
		System.out.println("list1:"+list1);
		System.out.println(list);
	}
}

 List常用子类的特点

List接口中,子类有ArrayList、LinkedList。List接口中还有一个子类Vector。

Vector 类可以实现可增长的对象数组,它是同步的。从 Java 2 平台 v1.2 开始,此类改进为可以实现 List 接口,使它成为 Java Collections Framework (Java集合框架)的成员。增删,查询都很慢!现在

ArrayList是List 接口的大小可变数组的实现。它不是同步的,查询的速度快。ArrayList替代了Vector。

LinkedList与Vector 、ArrayList这两个类不同,它是List 接口的链接列表实现。它不是同步的。增删元素的速度很快。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值