数据结构是以某种形式将数据组织在一起的集合。数据结构不仅存储数据,还支持访问和处理数据的操作。这些数据结构通常称为Java集合框架。
Java集合框架支持以下两种类型的容器:
•一种是为了存储一个元素集合,简称集合(collection)。
•另一种是为了存储键/值对,称为图(map)。
一、Collection接口
Java集合框架支持三种主要类型的集合:规则集(Set)、线性表(List)和队列(Queue)。其层级关系图为:
1、规则集Set
Set接口扩展了Collection接口。它没有引入新的方法或常量,只是规定了Set的实例不能包含重复的元素。实现Set的具体类必须确保没有向这个规则集添加重复的元素。也就是说,在一个规则集中,一定不存在元素value1、value2使得value1.equals(value2)的返回值为true。
Set接口的三个具体类是散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。
HashSet
HashSet实现Set接口,可以用来存储不相同的元素。当你向HashSet中重复添加一个元素,只会有一个存入HashSet中,另HashSet中元素是无序的。
LinkedHashSet
LinkedHashSet用一个链表实现来扩展HashSet,它支持对规则集中的元素按照插入顺序排序
TreeSet
TreeSet是SortedSet的一个具体子类,SortedSet是Set的一个子接口。在TreeSet中只要对象可比较,就可通过下列两种方法排序:
1、使用Comparable接口。当添加到TreeSet中的元素是Comparable的实例时,如String、Date、Calender等,就可以使用compareTo方法对它们进行比较。此种排序出的顺序通常又叫做自然顺序。
2、使用比较器接口Comparator实现。通过比较器中compare(Object obj1, Object obj2)方法实现自定义排序。此种排序出的顺序叫做比较器顺序。
2、线性表List
规则集只能存储不重复的元素,而线性表不仅可以存储相同的元素,还可以允许用户指定其存储位置。用户可以通过下标访问元素。
List接口中方法有
+add(int index) //指定下标添加元素
+addAll(int index, Collection<? extends E> c) //指定下标处添加c中所有元素
+get(int index) //返回指定下标元素
+lastIndexOf(Object o) //返回相同元素的下标
+listIterator() //返回遍历列表的迭代器
+listIterator(int startIndex) //返回从startIndex开始的所有元素的迭代器
+remove(int index) //删除指定下标的元素
+set(int index, E element) //设置指定下标的元素
+subList(int fromIndex, int toIndex) //返回从fromIndex到toIndex元素子列表
List接口的两个具体实现类为:数组线性表ArrayList和链表LinkedList。
ArrayList
ArrayList用数组存储元素,这个数组是动态创建的。如果元素个数超过了数组的容量,就创建一个更大的新数组,并将当前数组中的所有元素都复制到新数组中。
LInkedList
LinkedList是在一个链表中存储元素
3、队列
队列是一种先进先出的数据结构。元素被追加到队列末尾,然后从队列头删除。
二、Map接口
图是一种依照键值存储元素的容器。键就像一个下标。不过不同于List中,下标是整数。在Map中,键可以是任意类型的对象。Map中不能用相同的键,每个键对应一个值。
Map的具体实现类有:散列图HashMap、链式散列图LinkedHashMap和树形图TreeSet。
HashMap
与HashSet相似,存储是无序的。
LinkedHashMap
在LinkedHashMap中,元素可以按照它们插入时的顺序排序,也可以按照它们最后一次访问时的顺序,从最早到最晚排序。
TreeMap
和TreeSet一样,可以通过两种方法排序。