Java 进阶之类集(二)

    上一篇介绍了类集的概念、框架的主要接口以及保存单值集合的最大父接口:Collection接口。

    接下来介绍一下 Collection 的其中一个子接口:List。

一、List 接口

概念:List 是 Collection 的子接口,List 接口可以存放任意的数据,里面的内容是允许重复的

接口的定义如下:

public interface List<E> extends Collection<E>

List 接口大量的扩充了 Collection 接口的操作,功能要比 Collection 接口强大很多

下面表格是 List 接口扩展的方法:

No.方法类型描述
1public  void  add (int  index, E  element)普通在指定位置增加元素
2public  boolean  addAll(int  index, Collection<? extends E>  c)普通在指定位置增加一组元素
3E  get (int  index)普通返回指定位置的元素
4public  int  indexOf (Object  o)普通查找指定元素的位置
5public  int  lastIndexOf (Object  o)普通从后向前查找指定元素的位置
6public  ListIterator<E>  listIterator()普通为 ListIterator 接口实例化
7public  E  remove (int  index)普通按指定的位置删除元素
8public  List<E>  subList(int  fromIndex, int  toIndex)普通取出集合中的子集合
9public  E  set (int  index, E  element)普通替换指定位置的元素

注意:要想使用接口,肯定要使用对象的多态性进行实例化的操作,对于 List 接口本身也是一样的。

1.1 List 接口的常用子类 —— ArrayList

    ArrayList 是 List 接口的子类,可以直接通过对象的多态性,为 List 接口进行实例化。

    此类的定义如下:

public class ArrayList<E> extends AbstractList<E> implements List<E>,RandomAccess,Cloneable,Serializable

    AbstractList 类的定义如下:

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>

    示例代码 一:向集合中增加元素

import java.util.ArrayList;
import java.util.List;
import java.util.Collection;

public class ArrayListDemo01 {
	public static void main(String[] args) {
		List<String> allList = null;
		Collection<String> allCollection = null;
		allList = new ArrayList<String>();	//指定操作泛型为String
		allCollection = new ArrayList<String>();	//指定一个集合

		allList.add("Hello");	//此方法由Collection接口而来
//		allList.add("World");	//默认情况下是往后加入数据
		allList.add(0,"World");	//在第一个位置上添加新的内容
		System.out.println(allList);

		allCollection.add("AAA");
		allCollection.add("www.baidu.com");
		allList.addAll(allCollection);
//		allList.addAll(0,allCollection);	//在指定位置上增加数据
		System.out.println(allList);
	}
}

    输出结果如下:

[World, Hello]
[World, Hello, AAA, www.baidu.com]

    既然可以增加数据,那么就可以删除数据。

    List 中存在两种删除:1、根据对象内容;2、根据对象的编号

    示例代码二:删除元素

import java.util.ArrayList;
import java.util.List;

public class ArrayListDemo02 {
	public static void main(String[] args) {
		List<String> allList = null;
		allList = new ArrayList<String>();	//指定操作泛型为String
		
		allList.add("Hello");	//此方法由Collection接口而来
		allList.add("Hello");	//此方法由Collection接口而来
		allList.add(0,"World");	//在第一个位置上添加新的内容,此方法为List扩展的方法
		allList.add("BBB");
		allList.add("www.baidu.com");
		
		System.out.println(allList);
		allList.remove(0);	//删除指定位置的元素
		allList.remove("Hello");	//删除指定内容的元素,只删除最先扫描到的元素,此方法由Collevtion接口继承而来
        System.out.println(allList);
        }
}

    输出结果如下:

[World, Hello, Hello, BBB, www.baidu.com]
[Hello, BBB, www.baidu.com]

    集合中的内容可以添加,可以删除,实际上最重要的就是输出

    在 List 接口中提供了 get() 方法,利用此方法就可以完成输出。可以通过循环完成输出,循环的次数有 size() 方法取得。此输出方式是 List 接口所独有的,而其他接口是没有的,尤其是 Collection 中是没有根据索引取出内容的操作。集合中还有以下的几个操作:

    ◇ 判断集合是否为空:boolean  isEmpty()

    ◇ 截取部分集合:List<E>  subList(int  fromIndex, int  toIndex)List 接口扩充

    ◇ 查找指定的对象是否存在:int  indexOf(Object  o)如果查找到则返回位置,否则返回 -1

    ◇ 查找是否存在:boolean  contains(Object  o)

    示例代码三:

import java.util.*;

public class ArrayListDemo03 {
    public static void main(String[] args) {
        List<String> allList = null;
        allList = new ArrayList<String>();    //指定操作泛型为String
        System.out.println("集合操作前是否为空:" + allList.isEmpty());
        allList.add("Hello");    //此方法由Collection接口而来
        allList.add(0,"World");    //在第一个位置上添加新的内容,此方法为List扩展的方法
        allList.add("CCC");
        allList.add("www.baidu.com");
        System.out.println(allList.contains("Hello")?"\"Hello\"字符串存在!":"\"Hello\"字符串不存在!");
        System.out.print("指定数组类型:");
        String str [] = allList.toArray(new String[]{});    //指定好类型
        for (int i = 0; i < str.length; i++) {
            System.out.print(str[i] + "、");
        }
        System.out.print("\n返回对象数组:");
        Object obj [] = allList.toArray();    //返回Object类型
        for (int i = 0; i < obj.length; i++) {
            System.out.print((String)obj[i] + "、");    //进行向下转型
        }
        List<String> allSub = allList.subList(2, 3);    //字符串截取
        System.out.print("集合截取:");
        for (int i = 0; i < allSub.size(); i++) {
            System.out.print(allSub.get(i));
        }
        System.out.println("\nCCC字符串的位置:" + allList.indexOf("CCC"));
        System.out.println("集合操作后是否为空:" + allList.isEmpty());
    }
}

    输出结果如下:

集合操作前是否为空:true
"Hello"字符串存在!
指定数组类型:World、Hello、CCC、www.baidu.com、
返回对象数组:World、Hello、CCC、www.baidu.com、集合截取:CCC
CCC字符串的位置:2
集合操作后是否为空:false

    以上的操作都是使用 ArrayList 子类完成的。

二、旧的子类:Vector

    在 List 接口中还有一个子类:Vector,Vector 类属于一个挽救的子类,从整个 Java 的集合发展来看,Vector 算是一个元老级的类,在 JDK 1.0 的时候就已经存在此类。但是到了 Java 2(JDK 1.2)之后重点强调了集合框架的概念,所以先后定义了很多的新接口(如:List等),但是考虑到一大部分的人已经习惯了使用 Vector 类,所以 Java 的设计者,就让 Vector 类多实现了一个 List 接口,这才将其保留下来。但是因为其是 List 的子类,所以 Vector 类的使用与之前的并没有太大的区别

    Vector 类的定义如下:

public class Vector<E> extends AbstractList<E> implements List<E> RandomAccess,Cloneable,Serializable

    因为 Vector 类本身属于旧的类,所以在类中也提供了很多重复的方法:

    ◇ 增加元素:public  void  addElement(E  obj),此方法是最早的增加元素的操作,之后此方法的功能与 add() 方法是一样的

示例代码:

import java.util.Vector;

public class VectorDemo {

	public static void main(String[] args) {
		Vector<String> allList = null;
		allList = new Vector<String>();	//指定操作泛型为String
		allList.addElement("Hello");	//此方法由Collection接口而来
		allList.addElement("World");	//在第一个位置上添加新的内容
		allList.addElement("www.baidu.com");	//默认情况下向最后加入
		for (int i = 0; i < allList.size(); i++) {
			System.out.print(allList.get(i) + "、");
		}
	}
}
三、子类的差异:ArrayList 与 Vector 的区别

    下列表格列出了两个子类之间的区别:

No.比较点ArrayListVector
1推出时间JDK 1.2 之后推出,属于新的操作类JDK 1.0 时推出,属于旧的操作类
2性能采用异步处理方式,性能更高采用同步处理方式,性能较低
3线程安全属于非线程安全的操作类属于线程安全的操作类
4输出只能使用 Iterator、foreach 输出可以使用 Iterator、foreach、Enumeration 输出

  (以上是对 List 接口的一些介绍,在后面的文章中将会逐个介绍其他的子接口。)

    希望此篇文章对大家在学习上有所帮助,若有不对之处也请指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值