java集合框架及泛型

Java集合框架及泛型

  Java集合框架提供了一套性能优良、使用方便的接口和类,位于java.util包中。

 

  Collection是所有Java集合框架的父接口;Collections操作集合的工具类

Iterator

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。

注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素

 

  Collection接口存储一组不唯一(可以重复),无序的对象

  List接口存储一组不唯一,有序(插入顺序)的对象

  Set接口存储一组唯一,无序的对象

  Map接口存储一组键值对象,提供key到value的映射(KV值)

  键Key都是唯一的,而且是无序的,而值Value不一定是唯一的

List接口:

  List接口的实现类: ArrayList,LinkedList。

ArrayList

  ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。

    ArrayList常用方法: 

方法名

说明

 

boolean add(Object 0)

在列表的末尾顺序添加元素,其实索引位置从0开始

 

void add(int index,object o)

在指定的索引位置添加元素,索引位置必须介于0和列表中元素合数之间

int size()

返回列表中的元素个数

Object get(int index)

返回指定索引位置处的元素,取出的元素是object类型,使用前需要进行强制类型转换

Boolean contains(object o)

判断列表中是否存在指定元素

Boolean remove(object o)

从列表中删除元素

Object remove(int index)

从列表中删除指定位置元素,起始索引位置从0开始

 

LinkedList

   LinkedList采用链表存储方式。插入、删除元素时效率比较高

  声明:LinkedList list = new LinkedList();

  List  list = new LinkedList();

   LinkedList中独特的方法:

方法名

说明

Void addFirst(object o)

在列表的首部添加元素

Void addLast(object o)

在列表的末尾添加元素

Object getFirst()

返回列表中的第一个元素

Object getLast()

返回列表中的最后一个元素

Object removeFirst()

删除并返回列表中的第一个元素

Object removeLast()

删除并返回列表中的最后一个元素

 

ArrayList和LinkedList有何异同?

  相同点:

  ArrayList和LinkedList都是list的两个实现类,可以通过get拿出来

  不同点:

  ArrayList适用于遍历取值,不适用于插入增加

  LinkedList插入删除的时候效率比较高,而且LinkedList还有很多自己的独特方法

Set接口:

  Set接口存储一组唯一,无序的对象。

  HashSet是Set接口常用的实现类。

  Set中存放对象的引用(引用类型可以直接new对象)

  Set使用对象的equals()方法比较是否为同一对象(String类重写了equals()方法)

  Set接口由于是无序的,所以不存在get()方法

HashSet

  HashSet存储的元素是不可重复,并且都是无序的。

  Hashset 集合收进一个对象时,会调用对象的hashcode()得到其Hashcode值来决定他的存储位置。所以,即使是equals()比较相等的两个对象,hashcode不同,存放在hashset里的位置不同。

  采用foreach循环遍历

   

Foreach与for循环的区别:

  Foreach循环不能修改数组中元素的值。

  For循环可以修改数组中的值。

注意:

  集合中删除了元素会导致迭代器预期的迭代次数会发生改变,导致迭代器的结果不准确。

  解决方法:

    1、删除元素后,使用break跳出循环。

    2、使用迭代器本身的删除方法。

Map接口

  Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作。

  Map接口常用方法:

方法名

说明

Object put(Object key,Object val)

以“键-值”对的方式进行存储

Object get(Object key)

根据键返回相关联的值,如果不存在指定的键,返回null

Object remove(Object key)

删除有指定的键映射的“键-值”对

Int size()

返回元素个数

Set keySet()

返回键的集合

Conllection values()

返回值得集合

Boolean containsKey(Object key)

如果存在有指定的键映射的“键-值”对,返回true

HashMap

  允许空键和空值(但空键只有一个,且放在第一位)

  元素是无序的,而且顺序会不定时改变

  遍历整个 Map 需要的时间与数组的长度成正比(因此初始化时 HashMap 的容量不宜太大)

泛型

  定义:使用泛型可以指代任意对象类型。

  格式为:类名<类型名>

  好处:

    除了解决安全隐患即抛出异常问题,泛型的类或接口在取出对象时不需要再进行向下类型转换,因为存储的时候就是该类型

什么时候使用泛型?

   一般类或接口在api文档中的定义中带有<E>标识的,在使用的时候都需要使用泛型机制。如ArrayList<E>、Iterator<E>。

数组与集合的区别

  数组特点:大小固定,只能存储相同数据类型的数据。

  集合特点:大小可动态扩展,可以存储各种类型的数据。

 

猜你喜欢

转载自www.cnblogs.com/zh-lin/p/10577293.html