学习笔记-基础知识8-集合框架(1)上
2015-06-23 23:46
627 查看
集合框架(1)
1.集合类
为了方便对多个对象的操作,就要对对象进行存储,集合就是存储对象最常用的一种方式。
数组和集合类同是容器:
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。
数组中可以存储任意数据类型,集合只能存储对象。
集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
2.Collection接口
方法:
boolean add(Object o):该方法用于向集合里面添加一个元素,若集合对象被添加操作改变了,返回true.
boolean addAll(Collection c):把集合c里面的所有元素添加到指定集合里面去,如果集合对象被添加操作改变了返回true.
void clear():清除集合里面的所有元素,将集合长度变为0。
boolean contains(Object o):返回集合里是否包含指定的元素。
boolean containsAll(Collection c):返回集合里是否包含集合c 内所有的元素。
boolean isEmpty():返回集合是否为空(长度是否为0)。
Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素。
boolean remove(Object o):删除集合中指定元素o。
boolean removeAll(Collection c):从集合中删除集合c里面的元素。若删除一个或以上返回true。
boolean retainAll(Collection c):从集合中删除集合c里不包含的元素。
int size():得到集合元素的个数。
Object[] toArray():把集合转成一个数组,所有集合元素编程数组元素。
3.Iterator接口
Iterator主要遍历Collection集合中的元素,也称为迭代器。
boolean hasNext():若被迭代的集合元素还没有被遍历,返回true.
Object next():返回集合的下一个元素.
void remove():删除集合上一次next()方法返回的元素。(若集合中有多个相同的元素,都可以删掉)
iterator对于集合才能用,for不同,只要是循环都可用。
迭代器的next方法返回值类型是Object,所以要记得类型转换。
4.集合遍历输出方式
Iterator:迭代输出
ListIterator:Iterator子接口,专门输出List中的元素;
Enumeration:古老的输出方式,迭代Vector元素,被Iterator取代;
5.Set接口(元素不可以重复)
Set是Collection子接口;
Set无法记住添加的顺序,不允许包含重复的元素。
当试图添加两个相同元素进Set集合,添加操作失败,add()方法返回false。
Set判断两个对象是否相等用equals,而不是使用==。
即两个对象equals比较返回true,Set集合是不会接受这个两个对象的。
6.HashSet
HashSet类采用hash算法存储数据,具有良好的存储和查找功能。
散列存储:不记录添加顺序;排列顺序时,顺序有可能发生变化;
线程不安全的,多个线程访问一个HashSet要使用同步代码;
HashSet集合元素值允许是null,但是最多只能有一个;
hash(翻译为哈希,或散列)算法的功能:
保证通过一个对象快速找到另一个对象;
其算法价值体现在速度,可以保证查询快速执行;
当从HashSet中访问元素时,
HashSet先计算该元素的hashCode(也就是该对象的hashCode方法返回值),
然后直接到该HashCode对应的位置取出该元素;
7.TreeSet
TreeSet是SortedSet接口唯一的实现,
与HashSet相比额外的方法有:
Comparator comparator():返回当前Set使用的Comparator,若返回null,表示以自然顺序排序。
Object first():返回此set中当前第一个(最低)元素。
Object last():返回此set中当前最后一个(最高)元素。
SortedSet subSet(Object fromElement, E toElement):
返回此set的部子集, 其元素从fromElement(包括)到toElement(不包括)。
SortedSet headSet(Object toElement):返回此set的部分子集,其元素严格小于toElement。
SortedSet tailSet(Object fromElement):返回此set的部分子集, 其元素大于等于fromElement。
记住:排序时,当主要条件相同时,一定要判断一下次要条件。
TreeSet的自然排序:元素自身具备比较性
TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,
然后将集合里的元素按升序排列.
此时需要排序元素的类必须实现Compareble 接口,
并覆写其intcompareTo(Object o)方法;该方法用于比较对象,
若:obj1,compareTo(obj2),
返回0,表示两个对象相等,
若返回一个正整数,表示obj1 大于obj2,
若返回一个负整数,表示obj1 小于obj2;
TreeSet集合而言,判断两个对象相等的标准是:compareTo()方法比较返回0;
8.List接口
List是Collection子接口;
List是有序的集合,集合中每个元素都有对应的顺序序列。
List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0 开始),
List集合默认按元素的添加顺序设置元素的索引,比如第一个元素的索引就是0,好似数组。
List拥有Collection所有方法,同时也有自己的方法:
增:void add(int index,Object e):将元素e添加到List集合中的index处;
boolean addAll(int index,Collection c):将集合c所包含的所有元素都插入在List集合的index处;
删:remove(int index):删除并返回index索引处的元素;
改:set(int index,Object e):把集合index处的元素替换为e对象,返回以前在指定位置的元素;
查: get(int index):返回集合index索引处的元素;
indexOf(Object o):返回对象o在List集合中第一次出现位置的索引;
lastIndexOf(object o):返回对象o在List集合中最后一次出现的位置索引;
subList(from,to):from(包括)到to(不包括)处所有集合元素的子集合。
ListIterator():列表迭代器
9.List集合的子集合:
List:元素是有序的,元素可以重复,因为该集合体系有索引
-ArrayList :底层数据结构使用的是数组结构,特点:查询速度很快,但是增删稍慢. 线程不同步
-LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢
-Vector:底层是数组数据结构 jdk1.0 线程同步。被ArrayList替代了。
1.集合类
为了方便对多个对象的操作,就要对对象进行存储,集合就是存储对象最常用的一种方式。
数组和集合类同是容器:
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。
数组中可以存储任意数据类型,集合只能存储对象。
集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
集合框架的构成及分类 Java集合类主要由两个接口派生出来: Collection -Set :不能存放重复对象 -List :可存放重复对象,有序 -Queue :队列 -SortedSet:可对集合数据排序 Map -SortedMap :可对集合数据排序
2.Collection接口
方法:
boolean add(Object o):该方法用于向集合里面添加一个元素,若集合对象被添加操作改变了,返回true.
boolean addAll(Collection c):把集合c里面的所有元素添加到指定集合里面去,如果集合对象被添加操作改变了返回true.
void clear():清除集合里面的所有元素,将集合长度变为0。
boolean contains(Object o):返回集合里是否包含指定的元素。
boolean containsAll(Collection c):返回集合里是否包含集合c 内所有的元素。
boolean isEmpty():返回集合是否为空(长度是否为0)。
Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素。
boolean remove(Object o):删除集合中指定元素o。
boolean removeAll(Collection c):从集合中删除集合c里面的元素。若删除一个或以上返回true。
boolean retainAll(Collection c):从集合中删除集合c里不包含的元素。
int size():得到集合元素的个数。
Object[] toArray():把集合转成一个数组,所有集合元素编程数组元素。
3.Iterator接口
Iterator主要遍历Collection集合中的元素,也称为迭代器。
boolean hasNext():若被迭代的集合元素还没有被遍历,返回true.
Object next():返回集合的下一个元素.
void remove():删除集合上一次next()方法返回的元素。(若集合中有多个相同的元素,都可以删掉)
iterator对于集合才能用,for不同,只要是循环都可用。
迭代器的next方法返回值类型是Object,所以要记得类型转换。
4.集合遍历输出方式
Iterator:迭代输出
ListIterator:Iterator子接口,专门输出List中的元素;
Enumeration:古老的输出方式,迭代Vector元素,被Iterator取代;
集合遍历输出方式: Iterable 接口(迭代遍历) ,用于集合 Foreach 循环注:可以直接用,使用场合:数组和Iterable对象! For循环:在()内实例化Iterable对象,进行遍历! 先用toArray方法输出成为数组,再用Foreach循环!
5.Set接口(元素不可以重复)
Set是Collection子接口;
Set无法记住添加的顺序,不允许包含重复的元素。
当试图添加两个相同元素进Set集合,添加操作失败,add()方法返回false。
Set判断两个对象是否相等用equals,而不是使用==。
即两个对象equals比较返回true,Set集合是不会接受这个两个对象的。
常用子类: -HashSet:散列存放 -TreeSet:有序存放 Set:无序,不可重复元素 -HashSet:数据结构是哈希表,线程时非同步的. 判断两个元素相等的标准是:两个对象通过equals方法比较相等,并且两个对象的hashCode方法返回值也相等。 -TreeSet:底层数据结构是二叉树,可对set集合中的元素进行排序。按照元素的自然顺序排序 判断两个对象相等的标准是:compareTo()方法比较返回0;
6.HashSet
HashSet类采用hash算法存储数据,具有良好的存储和查找功能。
散列存储:不记录添加顺序;排列顺序时,顺序有可能发生变化;
线程不安全的,多个线程访问一个HashSet要使用同步代码;
HashSet集合元素值允许是null,但是最多只能有一个;
hash(翻译为哈希,或散列)算法的功能:
保证通过一个对象快速找到另一个对象;
其算法价值体现在速度,可以保证查询快速执行;
当从HashSet中访问元素时,
HashSet先计算该元素的hashCode(也就是该对象的hashCode方法返回值),
然后直接到该HashCode对应的位置取出该元素;
HashSet元素添加 当向HashSet 集合中存入一个元素时, HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值, 判断已经存储在集合中的对象的hashCode值是否与添加的对象的hashCode值一致: 若不一致:直接添加进去; 若一致,再进行equals方法比较, equals方法如果返回true,表明对象已经添加进去了,就不会再添加新的对象了, 否则添加进去; 如果我们重写了equals方法,也要重写hashCode方法,反之亦然; HashSet集合判断两个元素相等的标准是: 两个对象通过equals方法比较相等,并且两个对象的hashCode方法返回值也相等。
7.TreeSet
TreeSet是SortedSet接口唯一的实现,
与HashSet相比额外的方法有:
Comparator comparator():返回当前Set使用的Comparator,若返回null,表示以自然顺序排序。
Object first():返回此set中当前第一个(最低)元素。
Object last():返回此set中当前最后一个(最高)元素。
SortedSet subSet(Object fromElement, E toElement):
返回此set的部子集, 其元素从fromElement(包括)到toElement(不包括)。
SortedSet headSet(Object toElement):返回此set的部分子集,其元素严格小于toElement。
SortedSet tailSet(Object fromElement):返回此set的部分子集, 其元素大于等于fromElement。
记住:排序时,当主要条件相同时,一定要判断一下次要条件。
TreeSet的自然排序:元素自身具备比较性
TreeSet会调用元素的compareTo(Object o)方法来比较元素之间的大小关系,
然后将集合里的元素按升序排列.
此时需要排序元素的类必须实现Compareble 接口,
并覆写其intcompareTo(Object o)方法;该方法用于比较对象,
若:obj1,compareTo(obj2),
返回0,表示两个对象相等,
若返回一个正整数,表示obj1 大于obj2,
若返回一个负整数,表示obj1 小于obj2;
TreeSet集合而言,判断两个对象相等的标准是:compareTo()方法比较返回0;
TreeSet的定制排序:元素自身不具备比较性时,或者具备的比较性不是所需要的, 就定制排序,比如降序排序,就可以使用Comparator接口了: 该接口包含int compare(Object o1,Object o2)方法: 用于比较两个对象的大小,比较结果和compareTo方法一致; 要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象, 该对象里负责集合元素的排序逻辑;TreeSet(Comparator comparator) 定义了比较器,将比较器作为参数,传递给TreeSet集合的构造函数。
8.List接口
List是Collection子接口;
List是有序的集合,集合中每个元素都有对应的顺序序列。
List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0 开始),
List集合默认按元素的添加顺序设置元素的索引,比如第一个元素的索引就是0,好似数组。
List拥有Collection所有方法,同时也有自己的方法:
增:void add(int index,Object e):将元素e添加到List集合中的index处;
boolean addAll(int index,Collection c):将集合c所包含的所有元素都插入在List集合的index处;
删:remove(int index):删除并返回index索引处的元素;
改:set(int index,Object e):把集合index处的元素替换为e对象,返回以前在指定位置的元素;
查: get(int index):返回集合index索引处的元素;
indexOf(Object o):返回对象o在List集合中第一次出现位置的索引;
lastIndexOf(object o):返回对象o在List集合中最后一次出现的位置索引;
subList(from,to):from(包括)到to(不包括)处所有集合元素的子集合。
ListIterator():列表迭代器
ListIterator():列表迭代器 List集合特有的迭代器ListIterator是Iterator的子接口。专门用于操作List集合的输出; 在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConrrentModificationException并发修改异常。 所以,在迭代时,只能用迭代器的方法操作元素,可是Iterator的方法是有限的, 只能对元素进行判断,取出,删除的操作。如果想要其他的操作如:添加,修改等, 就需要使用其子接口ListIterator。 该接口只能通过List集合的ListIterator方法获取。该方法返回ListIterator对象, ListIterator继承了Iterator接口,提供了专门操作List的方法。 在Iterator上额外增加的方法:支持双向输出: hasNext():判断下一个元素是否存在。有true,无false--正向遍历 next():返回下一个元素 hasPrevious():判断上一个元素是否存在。有true,无false--逆向遍历 previous():返回上一个元素
9.List集合的子集合:
List:元素是有序的,元素可以重复,因为该集合体系有索引
-ArrayList :底层数据结构使用的是数组结构,特点:查询速度很快,但是增删稍慢. 线程不同步
-LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢
-Vector:底层是数组数据结构 jdk1.0 线程同步。被ArrayList替代了。
(1)ArrayList :底层是数组数据结构 ,线程不同步 (2)Vector: 底层是数组数据结构 ,线程同步 ,被ArrayList替代了。 可变长度数组: ArrayList :长度为10,超过延长50%,变为15 Vector: 长度为10,超过延长100%,变为20 Vector: elements():返回此向量的组件的枚举 Enumeration接口: 枚举 nextElement(): 枚举就是Vector特有的取出方式,发现枚举和迭代器很像,其实枚举和迭代器是一样的。 因为枚举的名称和方法名称都过长,所以被迭代器取代了。 (3)LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢 LinkedList:链接列表中的特有方法 添加元素:addFirst();往前面添加; addLast();往后面添加 获取元素,但不删除元素:getFirst();返回第一个元素;getLast();返回最后一个元素 获取元素并删除元素: removeFirst();removeLast(); 如果集合中没有元素,get和remove会出现NoSuchElementException异常 JDK1.6版本 出现了替代方法: 添加元素:offerFirst();往前面添加;offerLast();往后面添加 获取元素,但不删除元素:peekFirst();返回第一个元素;peekLast();返回最后一个元素 获取元素并删除元素:pollFirst();pollLast(); 如果集合中没有元素,会返回null 堆栈:先进后出 如同一个杯子 队列:先进先出 如同一个水管
相关文章推荐
- Python中map()函数浅析
- Android使用Google Map浅谈
- AVG 7.5.1.43 版本 序列号 集合
- SQL Server游标的使用/关闭/释放/优化小结
- C#检查指定对象是否存在于ArrayList集合中的方法
- Erlang中的映射组Map详细介绍
- Rails Routes中new、collection、member的区别浅析
- c++中map的基本用法和嵌套用法实例分析
- C#中的集合用法分析
- JavaScript Archive Network 集合
- Backbone.js中的集合详解
- jquery中map函数与each函数的区别实例介绍
- jquery中map函数遍历数组用法实例
- jquery与google map api结合使用 控件,监听器
- jQuery学习7 操作JavaScript对象和集合的函数
- 网页代码常用小技巧总结第1/3页
- 解决 The Controls collection cannot be modified because the control contains code blocks
- 详解JAVA高质量代码之数组与集合
- 基于Java回顾之集合的总结概述
- 探讨:如何使用委托,匿名方法对集合进行万能排序