java list 泛型 接口_Java集合:泛型,Collection接口、List、ArrayList、LinkedList、Vector类...

1,泛型

2,Collection接口

3,List接口

4,ArrayList、LinkedList、Vector类

前引:——泛型的使用

泛型概述

泛型是Java

1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

泛型好处

安全简单。可以将运行时错误提前到编译时错误;

省去强转的麻烦

在Java SE

1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

泛型基本使用

格式:

泛型类中的类型参数几乎可以用于任何可以使用接口名、类名的地方。

泛型使用注意事项

前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)

注意:泛型的类型只能是引用数据类型

一. 集合介绍

集合的由来

数组中的元素个数是固定的(即长度不可变),如果要添加新的元素那么必须对数组进行重新定义即创建新的长度的数组,太麻烦了,最早的时候可以通过链表实现动态对象数组,但是也太复杂了。因此在Java中为了方便操作各个数据结构,引入了集合的概念。集合是一系列动态数组。

集合作为一个容器,可以存储多个元素,但是由于数据结构的不同,java提供了多种集合类。将集合类中共性的功能,不断向上抽取,最终形成了集合体系结构。

数组和集合的区别

区别1 :

数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值

集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成包装类对象

区别2:

数组长度是固定的,不能自动增长

集合的长度的是可变的,可以根据元素的增加而增长

数组和集合使用场合

1, 如果元素个数是固定的推荐用数组

2, 如果元素个数不是固定的推荐用集合

真实开发中使用集合较多。

集合继承体系结构

迭代器

二. Collection接口

基本方法:

boolean add(E e)

向集合中插入一个元素

void clear() 清空集合中的元素

boolean contains(Object o) 查找一个元素是否存在

boolean remove(Object o) 从集合中删除一个对象

boolean isEmpty() 集合是否为空

int size() 集合中元素的个数

Iterator iterator() 返回一个迭代器。

boolean addAll(Collection c)

向集合中插入一组元素

boolean removeAll(Collection c)

从集合中删除一组对象

boolean containsAll(Collection c) 查找一组元素是否存在

Foreach可以对Collection进行循环遍历。

三. Iterator 迭代器

Iterator概述

Iterator是对collection进行迭代输出的迭代器,它可以遍历并选择序列中的对象。

特点:

要使用此接口必须要使用Collection接口中的iterator()方法获取实例。

常用方法

boolean hasNext()

如果仍有元素可以迭代,则返回 true。 是否有下一个元素。

E next()

返回迭代的下一个元素。

Iterator实现集合的遍历

要求:for,while分别实现

ListIterator系列表迭代器(了解)

ListIterator

允许程序员按任一方向(双向迭代)遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。

常见方法如下:

boolean hasNext();

是否有下一个

boolean hasPrevious();

是否有前一个

Object next();

返回下一个元素

Object previous();

返回上一个元素

迭代器Iterator的原理及源码解析

迭代器原理

迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可

迭代器源码解析

1, 在eclipse中 ctrl+shift+T 找到ArrayList类

2, ctrl+O 查找iterator()方法

3, 查看返回值类型是new

Itr(),说明Itr这个类实现Iterator接口

4, 查找Itr这个内部类,发现重写了Iterator中的所有抽象方法

四. List接口

概述

List是Collection的子接口,里面的所有内容都是允许重复的。可以有序;

特有方法

List接口相对于Collection接口来说有以下特有方法(只列举了常用方法):

void add(int index,E element)

在指定位置添加元素

E remove(int index)

删除指定位置的元素

E get(int index)

根据索引位置取出元素

E set(int index,E element)

修改指定位置的内容

List集合的遍历

foreach可以对集合进行遍历

List的子类:

ArrayList、LinkedList、Vector

五. ArrayList类

概述

ArrrayList是List接口的子类,此类继承了AbstractList类,而AbstractList是List接口的子类。ArrayList是所谓的动态数组,本身是线程不安全的所以执行效率高。

特点

1. 底层数据结构是数组;

2. 查询快,增删慢。

3. 线程不安全,效率高。

六. Vector类

Vector类概述

与ArrayList一样,Vector本身也属于List接口的子类。Vector是Java元老级的操作类,是最早提供了动态数组的操作类,相比于ArrayList来说,Vector是线程安全的,但是效率低。

Vector类特有功能

public void addElement(E obj)

添加元素

public E elementAt(int index)

根据位置获取元素

public Enumeration elements()

获取一个Enumeration(被废弃的接口)遍历器。

七. LinkedList类

概述

LinkedList是List接口链表的实现。基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色些。

LinkedList

是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。

LinkedList类特有功能

public void addFirst(E e)

public void addLast(E e)

public E getFirst()

public E getLast()

public E removeFirst()

public E removeLast()

LinkedList练习

要求:请用LinkedList模拟栈数据结构的集合,并测试;

栈:先进后出。

public class Stack {

private LinkedList list = new LinkedList();

public void in(Object obj) {

list.addLast(obj);

}

public Object out()

{

return list.removeLast();

}

public boolean isEmpty()

{

return list.isEmpty();

}

}

八. ArrayList、LinkedList、Vector的区别

ArrayList: 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高

Vector:

底层数据结构是数组,查询快,增删慢。

线程安全,效率低。

Vector相对ArrayList查询慢(线程安全的)

Vector相对LinkedList增删慢(数组结构)

LinkedList:

底层数据结构是链表,查询慢,增删快。

线程不安全,效率高。

Vector和ArrayList的区别:

Vector是线程安全,效率低,ArrayList的是不安全的效率高;

共同点:底层都是数组实现的。

ArrayList和LinkedList的区别:

一个是数组实现的,LinkedList链表实现的。

共同点:都是线程不安全的,效率高;长度可变。

List有三个常用子类,我们到底使用谁呢?

查询多用ArrayList 增删多用LinkedList 如果都多用ArrayList。

如果涉及到线程安全的时候就用Vector(废弃)。

开发中最常用的是ArrayList;

九.集合嵌套的使用

(List嵌套List使用)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值