黑马程序员__集合框架(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
- 黑马程序员__集合框架(List,Set)
- 黑马程序员_day18_集合框架 List 、Set
- 黑马程序员_集合框架(List,Set)
- 黑马程序员--集合框架(List,Set)
- 黑马程序员__集合框架
- 黑马程序员__集合框架
- 黑马程序员__集合框架
- 黑马程序员___13java基础 集合框架 LIST和SET集合
- 黑马程序员----List,Set集合
- 黑马程序员-----List,Set集合
- 黑马程序员------------List,Set集合
- 黑马程序员-----List,Set集合
- 黑马程序员-----List,Set集合
- 黑马程序员-----List,Set集合
- 黑马程序员java学习—集合框架List和Set
- 黑马程序员--集合框架:List、Set和Map体系
- 黑马程序员-Java 集合框架(一)-概述、List、Set
- 黑马程序员:集合框架Set
- java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
- 用二进制显示图片时如果没有图片可以进行的设置
- 文本语言模型的参数估计-最大似然估计、MAP及贝叶斯估计——转自北大杨柳同学
- linux中安装Clamav以及配置和使用(扫描感染文件)
- java中queue的使用
- 黑马程序员__集合框架(List,Set)
- Android 如何隐藏应用程序的图标
- Floyd 算法小结
- 往死里写——ECAT_Main()状态机处理
- Apple Developer Website Update
- 豆瓣的curl测试
- Java 的 vector 中非基本类型的删除
- 初始化一个list集合
- 关于__attribute__中section部分的一些了解