当前位置:文档之家› java集合类总结

java集合类总结

1.本讲内容:集合collection
(数组和集合90%功能相似,但是最大的区别是,数组在初始化的时候必须确定大小,而集合不用,而且集合是一堆的类,使用起来非常方便。


讲集合collection之前,我们先分清三个概念:
1colection 集合,可用来存储任何对象的一种数据结构(容器)。

2Collection 集合接口,指的是,是Set、List 和Queue 接口的超类接口
3Collections 集合工具类,指的是类。

SCJP考试要求了解的接口有:Collection , Set , SortedSet , List , Map , SortedMap , Queue , NavigableSet , NavigableMap, 还有一个Iterator 接口也是必须了解的。

SCJP考试要求了解的类有:HashMap , Hashtable ,TreeMap , LinkedHashMap , HashSet , LinkedHashSet ,TreeSet , ArrayList , Vector , LinkedList , PriorityQueuee , Collections , Arrays
下面给出一个集合之间的关系图:
上图中加粗线的ArrayList 和HashMap 是我们重点讲解的对象。

下面这张图看起来层级结构更清晰些。

我们这里说的集合指的是小写的collection,集合有4种基本形式,其中前三种的父接口是Collection。

4List 关注事物的索引列表
5Set 关注事物的唯一性
6Queue 关注事物被处理时的顺序
7Map 关注事物的映射和键值的唯一性
一、Collection 接口
Collection接口是Set 、List 和Queue 接口的父接口,提供了多数集合常用的方法声明,包括add()、remove()、contains() 、size() 、iterator() 等。

add(E e) 将指定对象添加到集合中
remove(Object o) 将指定的对象从集合中移除,移除成功返回true,不成功返回false
contains(Object o) 查看该集合中是否包含指定的对象,包含返回true,不包含返回flase
size() 返回集合中存放的对象的个数。

返回值为int
clear() 移除该集合中的所有对象,清空该集合。

iterator() 返回一个包含所有对象的iterator对象,用来循环遍历
toArray() 返回一个包含所有对象的数组,类型是Object
toArray(T[] t) 返回一个包含所有对象的指定类型的数组
我们在这里只举一个把集合转成数组的例子,因为Collection本身是个接口所以,我们用它的实现类ArrayList做这个例子:例子1:
package edu.xjfu;
import ;
import ;
public class CollectionTest {
public static void main(String[] args) {
String a = "a", b = "b", c = "c";
Collection list = new ArrayList();
list.add(a);
list.add(b);
list.add(c);
String[] array = (String[]) list.toArray(new String[1]);
for (String s : array) {
;
}
}
}
二、几个比较重要的接口和类简介
1、List接口
List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、add(int index, Object o) 、indexOf(Object o) 。

ArrayList可以将它理解成一个可增长的数组,它提供快速迭代和快速随机访问的能力。

LinkedList中的元素之间是双链接的,当需要快速插入和删除时LinkedList成为List中的不二选择。

Vector是ArrayList的线程安全版本,性能比ArrayList要低,现在已经很少使用
2、Set接口
Set关心唯一性,它不允许重复。

HashSet当不希望集合中有重复值,并且不关心元素之间的顺序时可以使用此类。

LinkedHashset当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。

TreeSet当不希望集合中有重复值,并且希望按照元素的自然顺序进行排序时可以采用此类。

(自然顺序意思是某种和插入顺序无关,而是和元素本身的内容和特质有关的排序方式,譬如“abc”排在“abd”前面。


3、Queue接口
Queue用于保存将要执行的任务列表。

LinkedList同样实现了Queue接口,可以实现先进先出的队列。

PriorityQueue用来创建自然排序的优先级队列。

4、Map接口(key,value)
Map关心的是唯一的标识符。

他将唯一的键映射到某个元素。

当然键和值都是对象。

HashMap当需要键值对表示,又不关心顺序时可采用HashMap。

Hashtable注意Hashtable中的t是小写的,它是HashMap的线程安全版本,现在已经很少使用。

LinkedHashMap当需要键值对,并且关心插入顺序时可采用它。

TreeMap当需要键值对,并关心元素的自然排序时可采用它。

三、ArrayList的使用
ArrayList是一个可变长的数组实现,读取效率很高,是最常用的集合类型。

1、ArrayList的创建
在Java5版本之前我们使用:
1 List list =new ArrayList();
在Java5版本之后,我们使用带泛型的写法:
1 List<String> list =new ArrayList<String>();
上面的代码定义了一个只允许保存字符串的列表,尖括号括住的类型就是参数类型,也成泛型。

带泛型的写法给了我们一个类型安全的集合。

关于泛型的知识可以自行查询baidu。

2、ArrayList的使用:
01 List<String> list =new ArrayList<String>();
02 list.add("nihao!");
03 list.add("hi!");
04 list.add("konikiwa!");
05 list.add("hola");
06 list.add("Bonjour");
07 ;
08 ;
09 "hi!"));
10 ;
关于List接口中的方法和ArrayList中的方法,大家可以看看JDK中的帮助。

3、基本数据类型的的自动装箱:
我们知道集合中存放的是对象,而不能是基本数据类型,在Java5之后可以使用自动装箱功能,更方便的导入基本数据类型。

1 List<Integer> list =newArrayList<Integer>();
2 list.add(new Integer(42));
3 list.add(43);
4、ArrayList的排序:
ArrayList本身不具备排序能力,但是我们可以使用Collections类的sort方法使其排序。

我们看一个例子:
package edu.xjfu;
import ;
import ;
import ;
public class ListTest {
public static void main(String[] args) {
List<String> myArrayList=new LinkedList<String>();
myArrayList.add("小强3");
myArrayList.add("小强1");
myArrayList.add("小强2");
myArrayList.add("小强5");
myArrayList.add("小强4");
"排序前:"+myArrayList);
Collections.sort(myArrayList);
"排序后:"+myArrayList);。

相关主题