java集合类

来源:互联网 发布:淘宝号限购了最新解法 编辑:程序博客网 时间:2024/06/03 21:46


集合概述:

Java集合框架:

  • 1. 什么是框架:类库的集合。
  • 2.集合框架:用来表示和操作的统一框架,包含了实现集合的接口和类。
  • 3.集合:存放数据的容器。

为什么会出现集合类?

面向对象的语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合石存储对象最常用的一种形式。

数组和集合类同样都是容器,有什么区别呢?

数组虽然也可以存储对象,但长度是固定的;集合的长度是可变你的。

数组中可以存储基本数据类型,集合只能存储对象。

集合类的特点:

集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。它的存储方式被称之为----数据结构。

(集合中存储的都是对象的引用(或是地址值),并不是对象实体)

集合的结构图(并不包含所有,只是一部分):


上面的也可以看出来集合又分为很多种,他们之间又有着各种各样的关系,后面会一一写出来的。

Collection 你可以理解为大Boss,它是最基本的集合接口,是List、Set和Queue接口的父接口。

集合的遍历:

数组的遍历是通过下标来实现的,那么集合该怎么实现呢?自然也有它的方法,利用迭代器。

不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代器,使用该迭代器即可逐一访问Collection中每一个元素。

<span style="font-size:14px;">import java.util.ArrayList;import java.util.Iterator;public class Test11 {public static void main(String[] args) {ArrayList al = new ArrayList();al.add("java01");al.add("java02");al.add("java03");al.add("java04");for(Iterator it = al.iterator();it.hasNext();){System.out.println(it.next());}}}</span>

List接口:

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引。List接口作为Collection接口的子接口,他可以使用Collection接口里的全部方法。而且由于List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法。

实现List接口的常用类有LinkedList,ArrayList,Vector

ArrayList采用数组保存元素,意味着当大量添加元素,数组空间不足时,依然需要通过新建数组,内存复制的方式来增加容量,效率较低;而当进行对数组进行插入,删除操作时,又会进行循环移位操作,效率也较低;只有进行按下标查询时(get方法),使用数组效率很高。


Vector与ArrayList的内部实现相似,Vector设计为线程安全,ArrayList设计为非线程安全。为了保证线程安全,Vector在性能方面稍逊于ArrayList,目前我们编写的都是单线程应用程序,应选择使用ArrayList。


ArrayList与LinkedList均设计为非线程安全,ArrayList内部采用数组实现(与Vector相同),LinkedList内部采用链表结构实现。

LinkedList采用链表保存元素,在添加元素时只需要进行一次简单的内存分配即可,效率较高;进行插入,删除操作时,只需对链表中相邻的元素进行修改即可,效率也很高;但进行按下标查询时,需要对链表进行遍历,效率较低。

Set接口:

Set集合无法记住添加元素的顺序,所以set里的集合不能重复。

HashSet是Set接口的典型实现,大多数适用Set集合的时候都是使用这个实现类。它按照Hash算法来存储集合中元素,所以具有很好的存取和查找性能。

Map接口:

Map接口并没有继承Collection接口,而是提供了Key到Value的一个映射,一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

处理Map的三种集合:

关键字集KeySet()

数值集value()

项目集enrySet()

HashMap 和 Hashtable 都是Map接口的典型实现类,Hashtable是一个古老的Map实现类,现在很少使用,因为他出现时java还没有提供Map接口,它包含了两个繁琐的方法,即elements()(类似于Map接口定义的value()方法)和keys()(类似于Map接口的keySet()方法)。

除此之外他们还有两点典型区别:

1、Hashtable是一个线程安全的Map实现,允许多线程访问集合元素,而HashMap是一个不安全的。

2、Hashtable不允许使用null作为key 和 value ,否则会触发空指针异常。而HashMap可以,但只能有一个。


0 0