黑马程序员-第十四天(集合框架)

来源:互联网 发布:礼记中庸好学近乎知 编辑:程序博客网 时间:2024/05/18 11:46

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------

一,为什么出现集合类?
面向对象语言对事物的体现是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储
集合就是存储对象最用的一种方式。

二,数组和集合类同是容器,有何不同?
数组虽然可以存储对象,但长度是固定的,集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。

三,集合的特点?
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。


四。为什么会出现这么多的容器?
因为每个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构。

五,collection接口中的共性方法:
获取长度 :
int size();
添加:boolean add(E e)
boolean addAll(Collection c)
清空: clear();
移除:boolean remove(Object o)
boolean removeAll(Collection c) 删除与c相同的元素。
判断:boolean contains(Object o)是否包含指定的元素。
boolean contains(Collection c)
boolean equals(Object o)比较collection与指定对象是否相等。
bollean isEmpty()判断此集合中是否有元素。根据size()返回值判断。

集合变数组:
Object[] toArray();
取交集
boolean retainAll(Collection c)此集合会保留与c集合相同的元素。

六。注意:
·add方法参数类型是object,以便于接收任意类型的对象。
·集合中存储的都是对象的引用或者是地址


七,集合中的元素获取

Iterator  iterator():获取迭代器,用于取出集合中的元素。
Iterator类中的方法
boolean hasNext()判断是否还有下一个元素。
next()取出一下元素。

1,什么是迭代器?
就是取出集合元素的一种方式。
2,迭代器取出方式的设计?
就把取出方式定义在集合的内部 ,这样取出方式就可以直接访问集合内容的元素,那么取出方式
就被定义成了内部类,而每一个容器的数据结构不同,所以取出的动作细节也不一样,但是都有共性内容
判断和取出,那么可以其共性抽取。那么这些内部类都符合一个规则。该规则是Iterator如何获取集合的取出
对象呢?通过一个对外提供的方法iterator();

建议使用for循环来完成集合元素的迭代。
八。collection集合的两大子类接口List和Set(List集合存储的是引用)
1,区别:
List:元素是有序的,元素可以重复,因为该集合体系有索引
Set:元素是无序,元素不可以重复。
2,List特有方法:(凡是可以操作角标的方法都是list集合特有的方法。
boolean add(int index,Object obj)在指定的位置插入
boolean addAll(int index ,collection)在指定的位置插入一个集合。
Object get(int index)获取指定的角标位上的元素。
int indexOf(Object o)返回此对象在集合中的第一次出现的位置。
ListItertor listIterator():返回list集合特有的迭代器。
Object remove(int index):按照角标移除指定的元素。
Object set(int index,object obj)用指定元素替换列表中指定位置的元素。
List subList(int fromIndex,int toIndex)返回列表中指定的fromIndex和toIndex之间的部分视图
3.list集合的取出方法:
·通过循环使用get(int index)方法
·使用迭代器
4,list集合特有的ListIterator是Iterator的子接口。在迭代时,不可以通过集合对象的方法操作集合中的元素,
因为会发生ConcurrentModificationException异常所以,在迭代时, 只能用迭代器的方式操作元素,可是Iterator
方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等就需要使用其子接口
ListIterator,只能通过List集合中listIterator()方法获取。
5,listIterator中的一些方法
添加: void add(Object obj)
6.List集合常见的子类对象
ArrayList:底层的数据结构使用的是数组结构 特点:查询速度快,但是增删稍慢 jdk1.2  线程是不同步的 默认构造一个初始容量为10的空列表。超过50%延长
LinkedList:底层使用的链表数据结构  特点:增删很快,查询速度稍慢
Vector:底层是数组数据结构  jdk1.0(此时collection没有出现jdk1.2才出现)线程是同步的, 被ArrayList替代。 默认构造一个初始容量为10的空列表。超过100%延长
修改:void set(Object obj)
判断:boolean hasPrevious()从后向前判断,判断前边是否还有元素
获取:previous():返回列表中前一个元素。
九。Vector
1,方法:
Enumeration elements();返回枚举类对象。
枚举就是Vector特有的取出方式。
2,Enumeration中的方法
boolean hasMoreElements();判断是否还有元素。
Object nextElements();取出下一个元素。

注:因为枚举的名称以及方法的名称都过长,所以被迭代器取代了,

十. LinkedList

1,特有方法:
添加:
void addFirst(object)添加到开头
void addLast(Object)添加到结尾
获取:
Object getFirst();获取元素但不删除元素
Object getLast();

Object removeFirst():获取元素并删除元素。
Object removeLast();

注:当获取不到这个元素时抛出NoSuchElementException异常
移除
Object removeFirst();
Object removeLast();

2,jdk1.6版本后
获取此列表中的元素,如果此列表为空,则返回null

对remove方法的升级:
Object pollFirst():获取此列表的第一个元素如果此列表为空,则返回null
Object pollLast():获取此列表的最后 一个元素如果此列表为空,则返回null

对getFirst,getLast方法的升级:
Object peek();
Object peekFirst();
Object peekLast();
对addFirst,addLast方法的升级
void push(Object obj) == addFirst(Object obj);
offerFirst(Object ojb);
offerLast(Ojbect obj);

3.数据结构
堆栈:先进后出  如同一个杯子
队列:先进先出 first in first out fifo  如同一个水管

注:在迭代时循环中next调用一次就要hasNext判断一次

十一,
List集合在判断对象是否相同时,使用的是元素(对象)的public boolean equals(Ojbect obj)方法
boolean contain(Object obj)。remove(Object obj)方法的低层调用的都是元素的equals(Object obj)方法


---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------

0 0