【Java类集】_List接口笔记(实例亲测)

【Java类集】_List接口笔记

本章目标:
掌握List接口与Collection接口的关系
掌握List接口的常用子类:ArrayList、Vector
掌握ArrayList与Vector类的区别

3.具体内容

List是Collection的子接口,List接口可以存放任意数据,而且List接口的内容是允许重复的。
List接口的功能要比Collection接口强大很多,因为大量的扩充了Collection接口的操作。


List接口扩充的方法:

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

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>

如果想要使用接口,则肯定要使用对象的多态性进行实例化的操作,那么对于List接口本身也是一样的 。
ArrayList的是List中最常用的子类。

import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo01{
    public static void main(String args[]){
        List<String> allList = null;
        allList = new ArrayList<String>();
        allList.add("Hello");
        allList.add("World");
        System.out.println(allList);
    }
}


输出:[Hello, World]
指定位置添加,添加的方法是List接口扩充的方法。

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>();
        allCollection = new ArrayList<String>();
        allList.add("Hello");
        allList.add(0,"World");
        System.out.println(allList);
        allCollection.add("LXH");
        allCollection.add("www.mldn.cn");
        allList.addAll(allCollection);
        System.out.println(allList);
    }
}


输出:
[World, Hello]
[World, Hello, LXH, www.mldn.cn]

在指定位置上加入一组数据

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>();
        allCollection = new ArrayList<String>();
        allList.add("Hello");
        allList.add(0,"World");
        System.out.println(allList);
        allCollection.add("LXH");
        allCollection.add("www.mldn.cn");
        allList.addAll(allCollection);
        allList.addAll(0,allCollection);
        System.out.println(allList);
    }
}



输出:
[World, Hello]
[LXH, www.mldn.cn, World, Hello, LXH, www.mldn.cn]

既然可以增加数据,那么就可以删除数据
List中存在两种删除:根据对象内容、根据对象的编号

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>();
        allList.add("Hello");
        allList.add(0,"World");
        allList.add("MLDN");
        allList.add("www.mldn.cn");
        allList.remove(0);
        allList.remove("MLDN");
        System.out.println(allList);
    }
}



输出:
[Hello, www.mldn.cn]

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

在List接口中提供了get()方法,利用此方法就可以完成输出。
通过循环完成输出,循环的次数由size()方法取得。


import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo03{
    public static void main(String[] args){
        List<String> allList = null;
        allList = new ArrayList<String>();
        allList.add("Hello");
        allList.add("World");
        allList.add(0,"Hello");
        allList.add("MLDN");
        System.out.println("由前向后输出");
        for(int i=0;i<allList.size();i++){
            System.out.print(allList.get(i));
        }
        System.out.println("\n由后向前输出");
        for(int i=allList.size()-1;i>=0;i--){
            System.out.print(allList.get(i));
        }
    }
}



输出:
由前向后输出
HelloHelloWorldMLDN
由后向前输出
MLDNWorldHelloHello

此输出方式是List接口所独有的,而其它接口是没有的,尤其是Collection中是没有根据索引取出内容的操作。

import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo04{
    public static void main(String args[]){
        List<String> allList = null;
        allList = new ArrayList<String>();
        allList.add("Hello");
        allList.add("World!");
        allList.add("MLDN");
        String str[] = allList.toArray(new String[]{});    //指定好类型
        System.out.println("预先指定好数据类型");
        for(int i=0;i<allList.size();i++){
            System.out.print(allList.get(i));
        }
        System.out.println("\n返回对象数组类型");
        Object obj[] = allList.toArray();
        for(int i=0;i<allList.size();i++){
            System.out.print((String)allList.get(i));//向下转型操作
        }
    }
}




输出:

预先指定好数据类型
HelloWorld!MLDN
返回对象数组类型
HelloWorld!MLDN

既然已经完成基本的输出的功能,集合中还有以下几个操作:
    判断集合是否为空:boolean isEmpty()
    截取部分集合:List<E> subList(int fromIndex,int toIndex),List接口扩充
    查找指定对象是否存在:int indexOf(Object o),如果查找到则返回位置,否则返回-1
    查找是否存在:boolean contains(Object o)

import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo05{
    public static void main(String args[]){
        List<String> allList = null;
        allList = new ArrayList<String>();
        System.out.println("集合操作之前先判断集合是否为空?"+allList.isEmpty());
        allList.add("Hello");
        allList.add("World");
        allList.add("MLDN");
        allList.add("www.mldn.cn");
        System.out.println(allList.contains("Hello")?"\"Hello\"字符串存在!":"\"Hello\"字符串不存在!");
        List<String> allSub = allList.subList(2,3);    //字符串截取
        System.out.println("集合截取:");
        for(int i=0;i<allSub.size();i++){
            System.out.println(allSub.get(i)+"、");        
        }
        System.out.println("MLDN字符串的位置:"+allList.indexOf("MLDN"));
        System.out.println("集合操作之后集合是否为空?"+allList.isEmpty());
    }        
}



输出:
集合操作之前先判断集合是否为空?true
"Hello"字符串存在!
集合截取:
MLDN、
MLDN字符串的位置:2
集合操作之后集合是否为空?false

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

挽救的子类Vector

考虑到大部分的人已经习惯了使用Vector类,所以JAVA的设计者,就让Vector类多实现了一个List接口,这才将其保存下来。但是因为其是List子类,所以Vector类的使用之ArrayList没有太大区别

Vector定义格式:
public class Vector<E> extends AbstratList<E> implements List<E>, RanddomAccess,Cloneable,Serializable

但是,虽然Vector类是旧的类,但是因为让其实现了List的接口,所以对于程序来讲是一样的。

import java.util.Vector;
import java.util.List;
public class VectorListDemo01{
    public static void main(String args[]){
        List<String> allList = null;
        allList = new ArrayList<String>();
        allList.add("Hello");
        allList.add("World");
        for(int i=0;i<allSub.size();i++){
            System.out.println(allSub.get(i)+"、");        
        }
    }
}



输出:

Hello、
World、

在此类中也提供了重复的方法:
public void addElement(E obj)此方法与add()方法是一致的。

import java.util.Vector;
import java.util.List;
public class VectorListDemo02{
    public static void main(String args[]){
        Vector<String> allList = null;
        allList = new Vector<String>();
        allList.addElement("Hello");
        allList.addElement("World");
        for(int i=0;i<allList.size();i++){
            System.out.println(allList.get(i)+"、");        
        }
    }
}



子类的差异:ArrayList与VectorList的区别

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e421083458

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值