Java基础 -集合

集合,是一种存储容器,我们需要了解集合的存取,以及他们的特性。
集合有List Set Map。

一 Collection

collection 有两个分支,一个是 List,一个是 Set;
collection 中常用的方法:add、clear、contain、remove、size、toArray

注:toArray 将集合转数组之后,数组的长度是不可变的。

迭代器

public interface Collection< E> extends Iterable< E>
Collection 的父类是 Iterable,所以 Collection 及子类都多了一个 iterator 的方法,此方法可用来遍历 Collection 的子类;

泛型

泛型在集合的类中是常见的,一对尖括号< E >;
泛型的作用就是声明集合的时候加上指定的类型,这样只有同类型的对象才能存进集合,保证了安全。因为如果不指定类型,会发生强转类型错误,例如 Interger can not case to String。

List

List 三大特性:有序,有索引,元素可以重复;

List 接口下有两个实现类,一个是 ArrayList,另一个是 LinkedList;都是线程不安全的;
ArrayList 是基于数组的数据结构实现的,所以查询快,增删慢;
LinkedList 是基于链表(单向)的数据结构实现的,所以查询慢,增删快;

List 集合子类的遍历方式有三种
普通的 for 循环遍历;
foreach 遍历;
Iterator 遍历;

ArrayList && Vector 区别
这两者是一样的,只是前者是线程不同步的,线程不同步就意味着运行效率快

Set

Set 三大特性:无序,无索引,元素不可重复,但是可以存 NULL 值;

这个有序无序怎么理解呢?
有序
怎么样的顺序存进去,取出来也是怎么样的顺序;
比如说存进去是 1 2 3 4 5,取出来也是 1 2 3 4 5;
无序
取出来的顺序跟怎么样的顺序存进去无关;
比如说存进去是 1 2 3 4 5,取出来可能是 2 4 5 1 3 || 5 3 1 2 4

Set 集合下也有两大实现类,一个是 HashSet,一个是 LinkedHashSet。都是线程不安全的。
HashSet,底层是哈希表;
LinkedHashSet,底层是哈希表 + 双向链表,由于是链表,所以就变成了有序

Set 集合的子类遍历的方式有两种
foreach 遍历;
Iterator 遍历;
由于没有索引,所以不能操作普通的 for 循环遍历;

二 Map

集合容器除了上面讲的 Collection 及其子类之外,还有另外一种集合容器叫 Map。记住它不是 Collection 的实现类,是独立于 Collection 的。

Map 是一种键+值组合的集合;
键集合是 Set 集合,所以键的元素不可重复;值可以重复元素;
一个键映射到一个值,所以键值是成对出现的。

Map 集合下有两个实现类,一个是 HashMap,一个是LinkedHashMap。都是线程不安全的。
HashMap,底层是哈希表;
LinkedHashMap,底层是哈希表 + 双向链表;

Map 集合子类的遍历方式:
需要先调用 Map 下的 keySet 方法,通过遍历 keySet 集合获取到值;
遍历 keySet 方式有两种,foreach 和 Iterator;

HashMap && HashTable 的区别
两者底层都是哈希表,只是后者是线程安全的;
HashTable 跟 Vector 的命运一样,在JDK 1.2被对应的取代了;
HashMap 是允许存 NULL 键和 NULL 值的,但是 HashTable 不允许;

你可能感兴趣的:(Java,基础)