黑马程序员__集合框架(List,Set)

来源:互联网 发布:2016java人才缺口 编辑:程序博客网 时间:2024/05/16 18:25

---------------------- Android开发、java培训、期待与您交流! ----------------------

数组与集合的不同

数组长度是固定,集合长度可变,数组可以存储基本数据类型,集合只能存储对象

集合创建时:参阅顶层,创建底层;

集合中存储的都是对象的引用(地址);

迭代器:集合中取出元素的方式。

Collection

List

1、有序集合,元素可以重复。因为该集合体系有索引。List集合中判断元素是否相同,依据是元素的equals()方法。

2、List集合特有的迭代器,ListIterator 是Itertor的子接口, 在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrenModificationException异常

3、List特有方法。凡是可以操作角标的方法都是该体系特有方法 

增void add(int index E element);boolean addAll(int index ,Collection c);删Object remove(int index);改Object set(int index,Object element)查Object get(int index);List subList(int fromindex,int endindex);

4、ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删稍慢;线程不同步

5、 LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询速度稍慢。

LinkedList特有方法:如果集合中没有元素,会出现NoSuchElementsException

JDK1.6中出现了替代方法public boolean offerFirst(E e)    //在此列表的开头插入指定的元素public boolean offerLast(E e)   //在此列表末尾插入指定的元素。public E  peekFirst()   //获取但不移除此列表的第一个元素;如列表为空,则返回 nullpublic E peekLast()    //获取但不移除此列表的最后一个元素;如列表为空,则返回 nullpublic E pollFirst()    //获取并移除此列表的第一个元素;如列表为空,则返回 null


 

Vector

底层是数组数据结构。线程同步。被ArrayList替代了。枚举是Vector特有的取出方法。其实枚举和迭代时一样的。因为枚举的名称和方法名称都过长,所以被迭代器取代了。

Set

元素是无序(存入和取出的顺序不一定一致),元素不可以重复,该集合体系中没有索引。

HashSet

1、底层数据结构是哈希表,可以快速查找所需要的对象,线程是不同步。

2、通过元素的两个方法,hashcode和equals保证元素的唯一性。

如果元素的hashcode值相同,才会判断equals是否为true;

如果元素的hashcode值不同,不会调用equals()方法;

注:判断元素是否存在,及删除等操作,依赖的也是hashcode和equals()方法。

TreeSet

1、是一个有序集合,自动对元素进行排序,可以按照任何顺序将元素插入该集合,但当对该集合进行迭代时,各个值将自动以排序后的顺序出现。

2、底层数据结构是二叉树。保证元素唯一性的依据是:compareTo()方法 return 0;

3、TreeSet默认排序方式:让元素自身具备比较性,元素需要实现comparable接口,覆盖compareTo()方法。

4、TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数

实现比较器:定义一个类,实现comparator接口,覆盖compare()方法。注:当两种排序都存在时,以比较器为

主。

/*实例:使用LinkedList模拟一个堆栈或者队列数据结构堆栈:先进后出;如同一个杯子;队列:先进先出。如同一个水管;*/public class LinkedListTest{public static void main(String[] args){Queue qu = new Queue();qu.myAdd("java01");qu.myAdd("java02");while(!qu.isNull()){sop(qu.myGet());}}}class Queue{private LinkedList link;Queue(){link = new LinkedList();}public void myAdd(Object obj){link.addFirst(obj);}public Object myGet(){return link.removeFirst();}public boolean isNull(){return link.isEmpty();}}/*实例:将自定义对象作为元素存到ArrayList集合中,并去除重复元素List集合中判断元素是否相同,依据是元素的equals方法。*/public static ArrayList singleElement(ArrayList al){ArrayList newal = new ArrayList();for(Iterator it = al.iterator();it.hasNext();){Object obj = it.next();if(!newal.contains(obj)){newal.add(obj);}}return newal;}

---------------------- Android开发、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

原创粉丝点击