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

Java初学之集合(一)

2016-01-30 19:15 288 查看

Java初学之集合(一)

概述

为什么会出现集合类?

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

数组和集合类同是容器,有何不同?

数组虽然可以存储对象,但是长度是固定的;集合长度是可变的。

数组中可以存储基本数据类型,集合只能存储对象。

集合类的特点

集合只用于存储对象,集合的长度是可变的,集合可以存储不同类型的对象。

体系

因为容器中数据结构不同,容器有很多种,不断的共性功能抽取,形成了集合体系,集合框架顶层就称为Collection接口。

Collection接口中定义了集合的基本功能

Collection接口中的共性方法

添加

boolean add(Object obj):一次添加一个

boolean addAll(Collection c):将指定容器中所有元素添加

删除

void clear();

boolean remove(Object obj);

boolean remove(Object obj);

boolean retainAll(Collection c);

获取长度

int size();

判断

boolean isEmpty();

boolean contains(Object obj);

boolean containsAll(Collection c);

将集合转为数组

toArray();

toArray([]);

取出元素

Iterator iterator();

获取集合中元素上迭代功能的迭代器对象;

迭代:取出元素的一种方式

迭代器:具有迭代功能的对象

迭代器对象不需要new,可直接通过iterator()获取。

迭代器是取出集合中元素的共有方法。

List和Set的区别

List:有序(存入的顺序和取出的顺序一致),有索引,允许重复元素。

Set:不允许重复元素。

LIst中的常见方法



add(index,element);



remove(index);



set(index,element);



int indexOf(element);

element get(index);

特有的迭代器

ListIterator可以实现迭代过程中的增删改查

List集合的子类

Vector:数据结构是数组,数组是可变长度的(不断new新数组并将原数组元素复制到新数组)线程是同步的,增删和查询慢。

ArrayList:数据结构是数组,长度可变,线程不同步,替代了Vector,增删速度不快,查询快。

LinkedList:链表结构,线程不同步,增删速度快,查询慢。

Set集合的子类

HashSet:哈希(散列)表结构,不同步

不允许存储重复元素,因为会发生查找的不确定性,不保证存入和取出的顺序一致。比数组的查询效率 高。

当哈希算法得到两个元素值相同时,称为哈希冲突。冲突后,需要对元素进一步判断,判断元素内容,equals方法。

哈希算法在判断元素是否相同是,依据hashCode方法。如果哈希重复(哈希值相同),再用equals方法判断元素。如果equals方法返回true,不存;返回false,存储。

如何保证元素的唯一性?

元素必须覆盖hashCode方法和equals方法。覆盖hashCode方法是为了根据元素自身的特点确定哈希值。

覆盖equals方法是为了解决哈希冲突。

TreeSet:二叉树数据结构,可以对元素进行排序,不同步

如何保证元素的唯一性?

参考的就是比较方法的返回值:如果返回值是0,就是重复元素,否则不是。

排序方式:需要元素具备比较功能,所以元素需要实现Comparable接口,覆盖CompareTo方法。

需求中也有这样一种情况,元素具备的比较方法不是所需要的,也就是说不想按照自然排序的方法,而是按照自定义的排序方法,对元素进行排序。而且存储到TreeSet中的元素万一没有比较方法,该如何排序呢?这是就只能使用第二种比较方式:让集合具备比较功能。实现Comparator接口,覆盖Compare方法,将Comparator接口的对象作为参数传递到TreeSet集合构造函数。比较器更为灵活。

集合名称阅读技巧:前缀是数据结构名。后缀是所属体系名

ArrayList:数组结构,查询快,可以有重复元素。

LinkedList:链式结构,增删快。

HashSet:查询速度快,不保证有序,不允许重复,需要覆盖hashCode方法和equals方法

TreeSet:二叉树,可以排序,就要想到两种比较方式:一种是自然排序Comparable,一种是比较器Comparator

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