您的位置:首页 > 编程语言 > Java开发

JAVA集合框架整理总结

2014-02-25 20:47 302 查看
1。什么事集合?

对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定。就使用集合容器进行存储。集合是用于存储对象的容器,集合的长度是可变的,集合中不刻意存储基本数据类类型。只能使用包装过后的类(Integer,Long,Double等)

2。集合框架的包都在java.util包中。最顶层接口的两个分别为Collection和Map。

其中Collection是所以一维集合容器的父类接口。Map是所有键值对二维结合容器的父类接口。

3。集合框架Collection接口及其子类介绍。

|--List(后缀):有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。

|--Set(后缀):元素不能重复,无序。

|--Hash(前缀):是指该容器采用的是hash算法存储的,元素具有唯一性,需要覆盖hashcode和equals方法。

|--Link(前缀):表示该集合容器内部使用的是链表数据结构实现的,增删快,如LinkedList。

|--Array(前缀):表示该集合容器内部使用的是数组数据结构实现的,查询快,有角标,如ArrayList。

|--Tree(前缀):表示该集合容器内部使用的是红黑树存储的(是一种顺序存储,且没有重复元素的,平均性能很高效)如TreeSet;

3.1 List:特有的常见方法:有一个共性特点就是都可以操作角标。

3.1.1,添加
void add(index,element);
void add(index,collection);
3.1.2,删除;
Object remove(index):
3.1.3,修改:
Object set(index,element);
3.1.4,获取:
Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);
List子类容器有(都是泛型定义的):

|--Vector:内部是数组数据结构,是线程同步的。增删,查询都很慢!

|--ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。

|--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

3.2 Set:元素不可以重复,是无序。

3.2.1 |--HashSet:内部数据结构是哈希表 ,是不同步的 

判断元素的唯一性:

是通过对象的hashCode和equals方法来完成对象唯一性的。

如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。

如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。

如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。

注意:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。

3.2.2 |--TreeSet:可以对Set集合中的元素进行排序。是不同步的。

如何判断元素的唯一性:

第一种:让元素自身具备比较功能,元就需要实现Comparable接口。覆盖compareTo方法。

第二种:让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。将该类对象作为参数传递给TreeSet集合的构造函数。

3.3.泛型:泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。

3.3.1 泛型的通配符:? 未知类型。

3.3.2 泛型的限定:  ? extends E: 接收E类型或者E的子类型对象。上限

    ? super E: 接收E类型或者E的父类型对象。 下限。

3.4 集合使用技巧:

TreeSet:元素需要唯一且元素需要制定顺序。

HashSet:元素需要唯一但是元素不需要指定顺序。

LinkedList:元素不需要唯一但是增删频繁。

ArrayList:元素不需要唯一但是需要随机访问的。

4。Map接口及其子类介绍。

Map一次添加一对元素,而Collection一次添加一个元素。Map也称为双列集合,Collection也称为单列集合。

Map集合中存储的就是键值对,而且必须保证键的唯一性。set 底层实现就是value值为null的map。

4.1 常用方法

4.1.1添加;

value put(key, vallue):返回前一个和key关联的值,如果没有返回null。

4.1.2 删除。

void clear(); 清空map集合。

value remove (key):根据指定的key翻出这个键值对。

4.1.3 判断。

boolean containsKey(key);

boolean containsValue(value);

boolean isEmpty();

4.1.4 获取。

value get(key) 通过键获取值,如果没有该键返回null。当然可以通过返回null,来判断是否包含指定键。 

int size();获取键值对的个数。

4.2 Map 常用的子类。

4.2.1 Hashtable:

内部结构是哈希表,是同步的。不允许null作为键,null作为值。其中它的子类:Properties:可以用来存储键值对型的配置文件的信息,可以和IO技术相结合。

4.2.2 HashMap:

内部结构是哈希表,不是同步的。允许null作为键,null作为值。

4.2.3 TreeMap

内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。 

下面 是百科里的一幅 结构图感觉挺清晰的。!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: