---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
对象是用于封装特有数据,对象多了个数又不确定,就使用集合容器去存储对象,它的长度是可变,不能存储基本数据类型。集合的容器因为内部的数据结构不同,有多种具体容器,不断的向上抽取,就形成了集合框架,框架的顶层就是Collection接口。首先,我们需要掌握住Collection的常用的一些方法,老师演示的创建Collection对象是 Collection coll = new ArrayList(),下面是它的一些常用方法,需要注意的地方我已在后面作了注释。 对于迭代器的使用 Iterator it = coll.iterator(); 调用集合中的迭代器方法,是为了获取集合中的迭代器对象。
1,添加。
boolean add(Object obj):
boolean addAll(Collection coll):
2,删除。
boolean remove(object obj):
boolean removeAll(Collection coll);两个集合中的相同元素从调用removeAll的集合中删除。
void clear();
3,判断:
boolean contains(object obj):
boolean containsAll(Colllection coll);
boolean isEmpty():判断集合中是否有元素。
4,获取:
int size():
Iterator iterator():取出元素的方式:迭代器。
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,
也就是iterator方法。
Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
其实就是抓娃娃游戏机中的夹子!
(1) while(it.hasNext()){
System.out.println(it.next());
}
(2) for(Iterator it = coll.iterator(); it.hasNext(); ){
System.out.println(it.next());
}
5,其他:
boolean retainAll(Collection coll);取交集。保留和指定的集合相同的元素,而删除不同的元素。和removeAll功能相反Object[] toArray():将集合转成数组。
另外,Collection接口下有2个非常重要的子接口
|--List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
|--Set:元素不能重复,无序。
今天我主要接触了List这个接口,List上面Collection的方法都有,我主要列出了它的一些特有的方法,尤其第5个很重要,它也说明了可以实现在迭代过程中完成对元素的增删改查。只有list集合具备该迭代功能.!list集合是可以完成对元素的增删改查。
1,添加
void add(index,element);
void add(index,collection);
2,删除;
Object remove(index):
3,修改:
Object set(index,element);
4,获取:
Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);
5. ListIterator it = list.listIterator();//获取列表迭代器对象,使用Iterator的子接口ListIterator
//它可以实现在迭代过程中完成对元素的增删改查。
//注意:只有list集合具备该迭代功能.
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("abc2")){
it.set("abc9");
}
}
6. list 特有的取出元素的方式之一。
for(int x=0; x<list.size(); x++){
System.out.println("get:"+list.get(x));
}
List当中有三个子接口,需要了解一下Vector的elements方法,首先提到了枚举这个概念;
|--Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
|--ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
|--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。
——————————————————————
LinkedList的使用:
堆栈:先进后出 First In Last Out FILO
队列:先进先出 First In First Out FIFO
我们应该描述这样一个容器,给使用提供一个容器对象完成这两种结构中的一种。
这里我写出了队列的实现:
public class DuiLie {
private LinkedList link;
public DuiLie() {
link = new LinkedList();
}
/**
* 队列的添加元素的功能。
*/
public void myAdd(Object obj) {
link.addLast(obj);
}
public Object myGet() {
return link.removeFirst();
}
public boolean isNull() {
return link.isEmpty();
}
}
public class LinkedTest {
public static void main(String[] args) {
DuiLie dl = new DuiLie();
dl.myAdd("abc1");
dl.myAdd("abc2");
dl.myAdd("abc3");
dl.myAdd("abc4");
while(!dl.isNull()){
System.out.println(dl.myGet());
}
}
}
——————————————————————
ArrayList的使用:
定义功能去除ArrayList中的重复元素
public class ArrayListTest2 {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(new Person("lisi1",21));
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
al.add(new Person("lisi4",24));
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
System.out.println(al);
al = getSingleElement(al);
}
public static ArrayList getSingleElement(ArrayList al) {
//1,定义一个临时容器。
ArrayList temp = new ArrayList();
//2,迭代al集合。
Iterator it = al.iterator();
while(it.hasNext()){
Object obj = it.next();
//3,判断被迭代到的元素是否在临时容器存在。
if(!temp.contains(obj)){
temp.add(obj);
}
}
return temp;
}
——————————————————————
通过今天的敲代码来看,需要掌握并熟悉以下这些内容:对于LinkedList,要去熟悉并写出堆栈或者队列的数据结构,在写的过程当中,我了解到堆栈的数据结构其实是先进后出,队列是先进先出,通过实现一个容器去给调用的人使用,我就以队列为例,我们要掌握LinkedList对象的方法addLast()表示先进,取出元素使用removeFirst()表示后出,在取的时候需要判断用isEmpty(),为了实现容器我们需要创建一个DuiLie类 包装好 给调用者使用‘;
对于ArrayList,掌握当它去存储自定义对象的时候,我们使用迭代器时需要强制转化成自定义的对象给it.next()起个名字,因为直接操作比如说it.next().name+".."+it.next().age会出错或者异常,第二次的next就找了下个对象的年龄。
对于Set。首先HashSet 它的不重复,无序的,它是如何保证该集合的元素唯一性呢?就要讲到其中的数据结构,即通过对象的hashCode和equals方法来完成对象唯一性的,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。----------这里想对比一下ArrayList的一个剔除重复的使用,它的contains和remove方法只看equals的方法; 对于TreeSet,不重复,无序是不用说的,它的数据结构就是compartor比较器的接口,可以对存储的自定义对象实现接口的方法或者对于TreeSet创建对象是的构造函数实现,比如TreeSet ts = new TreeSet(new ComparatorByName()); ComparatorByName我们需要去实现的类 ,后者是我们常用的,二者同时出现的话,用的是后者的数据结构。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------