在描述java集合类之前,先说一下关于集合的几个概念。
- 为什么出现集合类?
为了保存数量不确定的元素,以及保存具有映射关系的数据(也被称为关联数组)。
- 数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;机和长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。
- 为什么会出现这么多的容器?
因为每个容器的存储方式都有不同。
这个存储方式称之为:数据结构。
- 集合类的特点
集合只用于存储对像,集合长度可变,集合可以存储不同类型的对象。
集合框架构成及分类
Java集合类主要有两个接口派生:Collection和Map
Collection和Map这两个接口是Java集合类里的根接口,这两个接口又包含了一些子接口和实现类。
Collection接口
Collection接口有两个子接口
List(列表),Set(集)
List:可存放重复元素,元素存取是有序的。
Set:不可以存放重复元素,元素存取是无序的。
List接口中常用类
Vector:线程安全,但速度慢,已被ArrayList替代。
ArrayList:底层数据结构使用数组结构。
特点:查询速度快,但是增删稍慢,线程不安全。
LinkedList:底层使用链表结构。
特点:增删速度快,查询速度慢
取出LIst集合
中元素的方式:
• get(int index):通过脚标获取元素。
• iterator():通过迭代方法获取迭代器对象。
迭代
- 迭代是取出集合中元素的一种方式。
- 因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
用法 :
Iterator iter = l.iterator();
while(iter.hasNext())
{
System.out.println(iter.next());
}
for(Iterator iter = iterator();iter.hasNext(); )
{
System.out.println(iter.next());
}
上面两种方法建议使用第二种,因为第一种方法创建的iter对象无法释放点,会一直占用内存,而第二种方法使用一次后就会被释放掉。
Set接口中常用的类
- HashSet:
线程不安全,存取速度快。
它是如何保证元素唯一性的呢? - TreeSet:
线程不安全,可以对Set集合中的元素进行排序。
它的排序是如何进行的呢?
Set集合唯一性的原因
- HashSet:
通过equals方法和hashCode方法来保证元素的唯一性。 - TreeSet:
通过compareTo或者compare方法中的来保证元素的唯一性。元素是以二叉树的形式存放的
Map接口
所有的Map实现类用于保存具有映射关系的数据。Map接口的众多实现类在功能,用法上存在一定差异,但他们都有一个功能特征:Map保存的每项数据都是key-value对,也就是由key和value两个值组成。
例如:成绩单,各项成绩都有科目名和成绩组成(语文-88),对于一张成绩单而言,科目是不能重复的,而成绩是可重复的,通常习惯根据科目来查阅成绩,而不会根据成绩来查阅科目。Map与此类似,Map里的key是不可重复的,key用于标识集合里的每项数据,如果需要查阅Map中的数据时,总是根据Map的key来获取。
集合实现类(集合类)
Java提供了一套实现了Collection接口的标准集合类。其中一些是具体类,这些类可以直接拿来使用,而另外一些是抽象类,提供了接口的部分实现。
标准集合类汇总于下表:
至于集合类的详细介绍将在后面的博客中写到。