黑马程序员-集合

来源:互联网 发布:国内java大牛的博客 编辑:程序博客网 时间:2024/06/07 10:22

------- android培训、java培训、期待与您交流! ----------

什么叫集合

  持有对象!与数组功能相似。

  java中的集合类都在java.util包中。

集合与数组的区别

  从存储的数据类型来看:

可以定义基本类型的数组,用来存储基本类型数据。也可以定义引用类型的数组,存储引用类型的数据;

集合只能存储引用类型,而不能存储基本类型。

  从长度来看:

数组一旦定义后,其长度就不能改变;

集合的长度会自动变化。

Collection功能介绍

 使用ArrayList实现类

添加功能

boolean add(int index, Object o):在指定位置插入元素

boolean add(int index, Collection c):指定位置插入集合

2 删除功能

boolean remove(Object o):在集合中移除指定元素,移除成功返回true;否则返回false。

boolean removeAll(Collection c):在集合中指定集合,移除一个就算成功。

boolean retainAll(Collection c):

void clear():清空集合!

3 判断功能

boolean contains(Object o):判断当前集合中是否包含参数对象。

boolean containsAll(Collection c):判断当前集合中是否包含指定集合对象,包含所有才算包含。

boolean isEmpty():判断集合是否为空,size为0就是空。

4 元素个数(集合长度)

int size():返回集合元素个数

5 转换数组

Object[] toArray():把集合对象转换成数组

6 遍历功能

Iterator iterator():把迭代器对象!

List

List特有功能

List特有功能介绍

void add(int index, Object o):插入元素

boolean addAll(int index, Collection c):插入集合

Object get(int index):通过下标获取元素

int indexOf(Object o):返回参数在list中的下标位置,从前向后找。

int lastIndexOf(Object o):返回参数在 list的下标位置,从后向前找。

ListIterator listIterator():返回一个List独有的迭代器!

ListIterator listIterator(int index):返回一个List独有的迭代器,但指定从哪个下标位置开始。

Object remove(int index):移除指定下标位置上的元素。返回值是被移除的元素!

Object set(int index, Object o):设置指定下标位置上的元素为o。

List sublist(int fromIndex, int toIndex):返回一个子列表List。从当前List的fromIndex位置到toIndex位置截取一个子集合返回。其实只集合只是新集合的一个投影!

  因为List也是有索引的,所以很多方法都需要小心下标越界的问题!

2 List一般性方法使用

void add(int index, Object o)

Object remove(int index)

Object set(int index, Object o)

Object get(int index)

boolean addAll(int index, Collection c)

int indexOf(Object o)

int lastIndexOf(Object o)

3 遍历List

使用迭代器来遍历:Iterator it = list.iterator()

使用size()和get()来遍历。

4 获取子列表(subList()方法)

  获取子序列:List subList(int fromIndex, int toIndex)

LinkedList特有方法

l void addFirst(Object):把元素添加到列表头。

l void addLast(Object):把元素添加到列表尾。

l Object getFirst():获取列表头元素

l Object getLast():获取列表尾元素

l Object removeFirst():返回并移除列表头

l Object removeLast():返回并移除列表尾

Vector特有方法

  Vector在1.2时也实现了List接口。

Vector是老类,1.0版本的!

Vector与ArrayList很相似,它们的关系就好比StringBuffer和StringBuilder的关系。

Vector是线程安全的,即所有方法都同步,但效率低!

ArrayList是线程不安全的,但效率要高!

l void addElement(Object):等同与add()方法。

l Object elementAt(int):等同与get()方法。

l Object removeElement(Object):等同与remove()方法。

l Enumeration elements():很怪异的东西,返回值Enumeration,叫枚举器!这个东东是老迭代器。老类们只认识Enumberation,不认识Iterator,而且现在这些老类们还有很多有价值的,所以它们在使用Enumberation,我们也就只能去学习一下Enumeration了。

Set

HashSet

Ÿ HashSetSet的子类,因此也没有重复元素

Ÿ 底层使用哈希算法保证没有重复元素

Ÿ 存储对象时,先调用对象的hashCode()方法计算一个哈希值,在集合中查找是否有哈希值相同的对象。

如果没有哈希值相同的对象,直接存入。

如果有哈希值相同的对象,则和哈希值相同的对象进行equals()方法比较。

equals()方法比较结果相同则不存,不同就存入。

Ÿ 往HashSet集合里存储的对象必须正确重写hashCodeequals方法

Ÿ HashSet存储元素效率非常高

TreeSet

Ÿ TreeSet集合通过二叉树算法保证无重复元素,并对元素进行排序

Ÿ 在使用TreeSet时必须指定比较的算法,指定的方式有两种:

自然顺序:将要存储的类实现Comparable接口,重写compareTo方法,在方法中指定算法

比较器顺序:在创建TreeSet时,传入一个比较器Comparator,在比较器的compare方法中指定算法

常用实现类

HashSetTreeSetLinkedHashSet

默认使用HashSet

Map

Ø Map集合的特点

Ÿ Map存储了一系列键值的映射关系

Ÿ Map集合需要保证键的唯一性

Ÿ 可以通过键获得值,反之则不能

Ÿ Map集合存储元素使用put(key,value)方法

Ø Map集合的两种遍历方式

Ÿ 通过keySet方法返回由键组成的集合,迭代该集合的元素就拿到了所有的键,再调用get方法根据键拿到值

Ÿ 通过entrySet方法返回键值映射关系组成的集合,迭代该集合就拿到了一个个的键值映射关系,通过getKey方法拿到键,通过getValue方法拿到值。

HashMap

通过HashSet原理保证键唯一性

底层使用哈希表结构

无序!

线程不安全的!,存取速度快,允许存放null键,null值。 

对于常用方法可以保证稳定的性能!

因为使用哈希表,所以键元素类型必须重写equals()hashCode()方法

HashMap没有独有方法,所有方法都是从Map继承而来。

Hashtable

线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。

HashtableHashMap比较

Hashtable1.0的老版本类,是线程安全的,键和值都不能为null

HashMap1.2的新版本类,是线程不安全的,键和值都可以为null

TreeMap

底层使用二叉树结构;

有序!使用键类型的自然顺序,或者TreeMap的比较器排序;

使用TreeMap要求键类型有自然顺序,或者给TreeMap提供比较器;

Properties

1 Properties特性

1.0的老版本类

Hashtable的子类(线程安全的、底层哈希表、键值都不能为null

有自己的映射获取方法,不建议使用父类的映射获取方法

可以与IO流交互(很强大的功能)

2Properties独有方法

Object setProperty(String name, String value):代替父类的put()方法来映射值;

String getProperty(String name):代替父类的get()方法;

Enumeration<?> propertyNames():获取所有键。

LinkedHashMap的特性

l HashMap的子类

l 没有独有方法

l 保证元素迭代顺序与添加顺序相同

l 好比LinkedHashSetHashSet的关系


原创粉丝点击