java---容器

 

J2SDK提供的容器API位于java.util包内。

当我们需要保持一组一样(类型相同)的元素的时候,我们应该使用一个容器来保存,数组就是这样一个容器。

  那么,数组的缺点是什么呢?

  数组一旦定义,长度将不能再变化。

  然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需要一些能够动态增长长度的容器来保存我们的数据。而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结构。我们将数据结构在Java中实现,于是就有了我们的集合框架。

区分

长度

存放类型

集合类

可变

引用类型

数组

固定

基本类型+引用类型

 

1136:1个图,1个类,3个知识点,6个接口

1个图

java---容器

1个类----Collections类

 

区别

Collection

是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法

Collections

是针对集合类的一个包装类,它提供一系列静态方法以实现对各种集合的搜索、排序、线程安全化等操作

3个知识点---ForGenericAuto-bocing/unboxing

自动增强的For

java---容器

 

 

Generic泛型

起因:JDK1.4以前类型不明确

   装入集合的类型都被当做Object对待。从而失去自己的实际类型

从集合中取出时往往需要转型,效率低,容易产生错误。

解决办法:在定义集合的时候同时定义集合中对象的类型

好处:增强程序的可读性和稳定性。

 

Auto-boxing/unboxing

自动打包---自动将基础类型转换为对象

自动解包---自动将对象转换为基础类型

java---容器

6个接口----Collection、Iterator、Set、List、Comparable、Map接口

Collection接口定义了存取一组对象的方法

java---容器

容器类对象在调用remove、contains等方法时需要比对对象是否相等,这会涉及到对象类型的equals方法和hashCode方法;对于自定义的类型,需要重写equals和hashCode方法以实现自定义的对象相等规则。

注意:重写equals方法,必须重写hashCode方法。相等的对象应该具有相等的hash Codes。

 

Iterator接口

所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象

Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。

Iterator接口定义了如下方法:

boolean hasNext();

Object next();

void remove();

java---容器

 

储存形式

顺序

重复

List

value

有序

可以

Set

value

无序

不可以

Map

Key-value

 

 

list 

 

底层使用

优点

缺点

安全性

ArrayList

数组

便于随机访问

插入删除比较慢

线程不安全

LinkedList

链表

快速的插入和删除

查询效率低

线程不安全

Vector

 

 

 

线程安全

java---容器

 

Set

 

区别

HashSet

不保证Set的迭代顺序

TreeSet

实现了SortedSet接口,因此TreeSet容器中的元素是有序的。

 

java---容器

retailAll()交集

addAll()并集

java---容器

Map接口定义了存储“键-值映射对”的方法

 

相同点

不同点

HashMap

都可以用来存储key-value

允许null键/值

线程不安全

效率高

HashTable

不允许null键/值

线程安全

效率低

TreeMap

不允许null键

有序,因为其实现了SortMap

 

HashMap类实现的Map集合添加和删除映射关系更高,故建议使用HashMap类实现Map集合。HashMap通过哈希码对其内部的映射关系进行快速查找。

java---容器

TreeMap中的映射关系存在一定的顺序,如果希望Map集合中的对象也存在一定顺序,应该使用TreeMap类实现Map集合。

 

Comparable接口

所有可以“排序”的类都实现了java.lang.Comparable接口,Comparale接口中只有一个方法

public int compareTo(Object obj);

该方法返回0,表示this==obj;

返回正数,表示this>obj

返回负数,表示this<obj;

实现了Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式。

 

衡量标准:读的效率和改的效率

Array读快改慢

linked改快读慢

Hash两者之间