先来上一个图
【图片来源自网络】
从这个图片我们可以大致了解到java集合框架的顺序关系和每个集合的大致作用。挺不错的,我随便从网上找的。接下来从上到下,从左到右来学习一下。当然,是直接学习官网API。
1.Iterator
-
首先看一下Iterator接口的位置
-
方法
它只有这四个方法。看起来很好理解,最主要的就是hasNext(判断集合下一个位置是否还有元素)和next(获取下一个位置的元素)。
2.Collection
-
位置
-
一点点说明
E是指集合中的元素的类型的统称,就像人一样,人是统称,每个人的名字是具体的称呼。
它是集合框架的根接口。 -
方法
Collection接口定义了一般集合所必须的操作方法。
3.Set
- 位置
- Set定义了不包含重复元素的集合和这些集合的一些操作
- 方法
4.HashSet
它实现了Set接口,由一个哈希表支持。
遍历的时候不保证每次遍历顺序都一样。
允许空元素存在。
1.来看一下类名
-
一些解释
这个类提供了固定时间对于add,remove,contains,size这些方法的执行。
遍历时间和HashSet对象的大小成正比
HashSet是非线程安全的。为了阻止非同步的访问可以这样做:
Set s = Collections.synchronizedSet(new HashSet(…)); -
构造方法
这里除了那个负载因子都好理解,这里单独解释一下那个负载因子的作用和来历。
作用:表示当HashSet的容量达到HashSet的大小的多少的时候HashSet自动扩容。例如如果loadfactor=0.5,HashSet=16,当容量为8的时候HashSet自动加倍扩容。
来历待续。。
5.LinkedHashSet
- 位置
由继承树可以看到,LinkedHashSet是在HashSet的基础上进一步扩展功能。 - Set接口的哈希表和链表的实现,可以保证遍历的元素顺序,以元素被加入Set时的顺序遍历。
- 此集合不允许元素重复,且是非线程安全的
- 构造函数
- 方法的话和HashSet基本上是一样的
6.List
-
介绍
-
一些特性
元素是有序的
可以精确控制元素被存放到哪个位置
允许重复元素
也可以存放空元素 -
方法
这些方法和Set集合里面的差不多,都是一些基本操作,多多练习便能掌握
7.ArrayList
-
位置
继承的一般是类,实现的是接口。 -
一些特性
大小可变
可以存放任何元素
非线程安全
和Vector类似
一些方法可以运行在固定的时间下 -
构造函数
-
方法
它实现了List接口的所有方法,都可以用
8.LinkedList
位置:
一些特性:
1,它是实现了ListQueue接口的双向链表
2,索引到列表中的操作将从头或尾遍历列表,以更接近指定索引的操作为准。
3,它是非线程安全的
构造函数:
方法:
这个方法和上面那几个集合差不多
9.ListIterator
介绍:
位置:
方法:
画红线的均是扩展的方法,针对于List的。
10.Map
介绍:
它是一个接口。
位置:
一些特性:
它是将键映射到值的对象。
不可以包含相同的键,每个键只能对应一个值。
它提供了键的集合,值的集合,键值对的集合三个视图。
有的子类如TreeMap可以保证元素的顺序,但是HashMap便不可以。
内部类:
也是一个接口。
方法:
这个接口定义了Map家族的基本操作。
11.HashMap
位置:
类名:
从类名可以获得好多信息的。
一些特性:
它是基于Map的实现。
实现了所有Map接口的方法。
允许空值和空键。
大致等于HashTable。
非线程安全的。
不保证元素的每次迭代次序。
构造方法:
负载因子前面已经说过。
方法:
平时常用的也就几个方法,熟练练习即可。
12.LinkedHashMap
位置:
类名:
一些新特性:
可以保证元素迭代顺序(按照元素被添加的顺序遍历)。
构造函数:
这里多了一个有意思的构造函数,可以指定访问顺序。true为存储顺序,false为插入的先后顺序。
方法:
这是一些新的方法,其他的方法都是在类名中出现的类和接口的方法。
13.TreeMap
位置:
类名:
一些新特性:
它是基于NavigableMap的红黑树的实现。
被以键的自然的顺序排列。
对于containsKey,get,put,remove,实现了log(n)的时间复杂度。
它是非线程安全的。
构造函数:
方法:
这里的方法得好好练习,具体看这里。
foreach遍历:
public static void main(String[] args) {
TreeMap<Integer, Integer> tm=new TreeMap<Integer, Integer>();
for(int i=0;i<100;i++)
{
tm.put(i, i);
System.out.println(tm.size());
}
System.out.println(tm.firstKey());
System.out.println(tm.higherKey(50));
tm.forEach((k,v)->{
System.out.println(k);
});
for 用for循环遍历
iterator 迭代器遍历
for: 用增强型for循环