------- android培训、java培训、期待与您交流! ----------
集合:所谓集合即是用于储存多个对象元素的一个容器。
集合与数组是同为存储数据的容器,与数组的不同之处在于。数组的长度一经定义不可改变,且只能存取一种数据类型;而集合是可变长度的一种数据存储容器 ,可以存放多种数据类型。
集合即Collection是一个接口,其常用子接口是List和Set
List下面常见的子类有ArrayList、LinkedList和Vector;
Set接口下面常见的子类有HashSet和TreeSet;
为什么会出现这么多的容器呢?
因为每个容器对数据的存取方式都不同,存取方式称之为:数据结构。
Collection
方法:
add() addAll(集合)添加一组元素 clear() remove() removeAll(集合)移除一堆元素
Contains()包含某一元素 isEmpty() size() retainAll()取交集 toArray() iterator()
注意:以上方法基本上都是抽象方法,因为Collection是集合框架的根,是个接口特殊的抽象类。
方法演示:
首先需要导入包:import java.util.*;
见:exercise.colection.Collection
iterator()方法被调用时返回的是Iterator接口
调用方式:Iterator xxx=容器.iterator();
Iterator迭代器接口,其中有三个方法:
获取元素:for(Iterator it=al.iterator();it.hasNext();){sop(it.next());}
hasNext(),
next(),返回的是任意对象,所以用Object类型的对象接收
remove()
迭代器:就是用于从容器中获取元素的方式
迭代器的特点:
1、 每个容器都有存储取出数据的方式,因为底层数据结构不一样,所以存取方式是不同的
2、 由于可以直接访问集合内部元素所以就把取出判断方式直接定义在集合内部,那么取出方式就被定义成了内部类。
3、 由于每个容器的数据结构不一样,所以取出的动作细节也不一样,但是容器中都有判断取出这写共性,那么就将这些共性抽取出来,形成一个接口(规则:Iterateor)。
4、 如何获取集合的取出对象?通过对外提供一个Iterator方法。
演示见:exercise.colection.Tterator
Collectioon——
List:::::::::
特点:元素有序的,元素可以重复,因为该集合有索引。
常见特有方法:凡是能够操作角标的方法,都是该体系特有的方法。
add(index,element)
addAll(index,collection)
remove(index)
set(index,element)
get(index)
indexOf(element)
lastIndexOf(element)
subList(from,to){返回的是List类型}
listIterator()
重点:当创建Iterator时,将元素的引用存放到了迭代器里,能操作元素的方式有两种
一种是集合,另一种是迭代器,当两种方式同时操作同一个元素时便会引发一定的安全隐患(这种情况称之为并发性访问),所以不能够对同意集合进行多种操作。所以在迭代过程中不能使用集合方法进行操作,迭代过程中只能使用迭代方法对其进行操作。
ListIterator是继承了Iterrator迭代器
列表迭代器中有以下方法:
Add() hasNext() hasPrevious() next() nextIndext() previous() previousIndex() remove() set()
List特有的迭代器ListIterator是Iterator的子接口。。Iterator的方法有限,还需要其他操作只能有List里的ListIterator
List里的三个常见子类对象:
ArrayList:底层数据结构是数组结构。特点:查询数据快,修改数据慢。是不同步的
LinkedList:底层使用的是链表数据结构。特点:查询速度慢,修改数据块
Vector:底层数据结构数组结构。是同步的,被ArrayList替代,使用方式几乎与ArrayList相似,特别点在于多了枚举方式。
1.0时Vector 枚举方式elements()返回类型值为Enumeration接口类型数据。
操作数据方式:hasMoerElements() nextElement()
枚举就是Vector特有的取出方式。枚举和迭代器很像:其实枚举和地带是一样的,因为枚举的名称以及方法名称过长,所以枚举被迭代器取代了。
Set:::::::::
特点:元素是无序的(存入取出顺序不一致),元素不可以重复。
Set集合的功能和Collection的一样
常见子类:
注意:只有一种取出方式就是迭代器。
HashSet:底层数据结构哈希表。取出顺序是按哈希表顺序。。。线程是非同步的
HashSet是如何保证元素的唯一性的呢?
是通过元素的两个方法HashCode和equals来完成的。如果元素的HashCode相同,才会调用equals;如果不同,则不会调用equals。(开发式如果要写类(放到HashSet里),一般要复写HashCode和equals)
注意:对于判断元素是否存在以及删除等操作,都依赖的方法是元素的HashCode和equals方法。
TreeSet:特点:可以对Set集合中的元素进行排序,底层数据结构二叉树。。保证元素 唯一性的一句是compareTo方法return 0。。
存入对象必须具备比较性。。(对象具备比较性通过类实现Comparable复写该接口中的compareTo方法)
排序时,当主要条件相同时,一定要判断次要条件。。
TreeSet排序方式:
1、让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法, 也称为元素的自然顺序,也称默认顺序
2、当元素自身不具备比较性时,或者具备的比较性不是需要的。这时需要让集合 自身具备比较性。在集合初始化时就有了比较方式,,,,:::实现方式,通过实现 Comparator接口,复写接口里的compare方法。
------- android培训、java培训、期待与您交流! ----------