关闭

黑马程序员_集合框架

249人阅读 评论(0) 收藏 举报

---------------------- 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培训、期待与您交流! ----------------------

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3224次
    • 积分:147
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档