您的位置:首页 > 职场人生

黑马程序员-java集合框架--list和迭代器

2015-03-16 13:36 281 查看


-----------android培训java培训、java学习型技术博客、期待与您交流!------------

集合类

一数组和集合类容器,有何不同?

数组虽然可以存储对象,但长度固定的,集合长度是可变的,

数组可以存储基本数据类型,集合只能存储对象。

二集合框架的构成:



为什么会出现这么多的容器?

因为每一个容器对暑促的存储方式不同。

这个存储方式称之为:数据结构。

三集合类特点:

集合只能存储对象,集合长度是可变的,集合可以存储不同类型的对象。

四什么是迭代器:

其实就是结合取出元素的方式

就是取出方式定义在集合内部

这样取出方式就可以直接访问集合内容的元素

那么取出的方式就定义成了内部类,二每一个容器的数据结构不同,所以取出的动作细节也不一样,但是都有共性内容和判断和取出,那么可以将共性抽取,

那么这些内部类都符合一个规则。该规则就是Iterator,如何获取集合的取出对象呢?通过一个对外提供的方法。iterator();

Collection



|--List:: 元素是有序的元素是可以重复的,因为该集合体系有索引。

|--Arraylist:底层的数据结构使用的是数组结构,特点查询元素很快,但是增删很慢

|--Linkllist: 底层使用的链表结构数据。特点:增删速度很快,查询稍慢。

|---Vector :地城数组结构。线程同步。被ArrayList替代了.

|--Set: 元素是无序,元素不可以重复

|--HashSet:底层数据结构式哈希表

HashSet是如何保证元素唯一性的呢?

是通过元素的两个方法.HashCode和equals 是否为true。

如果元素的HashCode的值相同,才会判断equals是否为true。

如果元素的HashCode的值不同,不会调用equals。

注意,对于判断元素是否存在,以及删除操作(判断唯一性)依赖的是元素的 HashCode和equals方法

|--TreeSet

List 特有方法,凡是可以用角标方法都是该体系特有的方法

增 Add(index,element); addAll(index,Collection);

删 remove(index);

改 set(index)

查 get(index) ; subList(form,to);ListIterator ();

ListIterator

List 集合特有的迭代器。ListIterator 是Iterator的子接口

在迭代式中,不可以通过集合对象的方法操作集合的元素。因为会发生ConcurrentModificationException 异常

所以在迭代时,只能用迭代器的方法操作元素,可是Iterator方法方法是有限的

只能对元素进行判断,取出,删除的操作。

如果想要其他的操作如添加,修改等,就需要使用起接口,ListIterator。

该接口只能通过List的Iterator方法获取

枚举

枚举就是Vector特有的取出方式,可以发现枚举和迭代器很想。其实枚举和迭代时一样的。因为枚举的名称和以及方法的名称都过长所以被迭代器取代了

Vector myvector=new Vector();
for(Enumeration e=myvector.elements();e.hasMoreElements();){
System.out.println(e.nextElement());



Arraylist

1 add方法的参数类型是Object,以便与接收任意类型对象。

2 集合中存储的都是对象的引用(地址)


LinkList: 特有方法

addFirst();

addLast();

getFirst();

getLast();

获取元素,但不删除元素,如果集合中没有元素,会出现NoSuckElementException

removeFirst();

removeLast();

获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

/*
使用LinkedList模拟一个堆栈或者队列数据结构。

堆栈:先进后出  如同一个杯子。
队列:先进先出 First in First out  FIFO 如同一个水管。

*/

public class Tmp{
public static void main(String[] args)
{
LinkedList l=new LinkedList();
l.addFirst("java01");
l.addFirst("java02");
l.addFirst("java03");
l.addFirst("java04");
l.addFirst("java05");

//堆栈输出
//	stack(l);

//队列输出
queue(l);

}

//堆栈
public static void stack(LinkedList l){
while (!l.isEmpty()){
System.out.println(l.removeFirst());
}
}

//队列
public static void queue(LinkedList l){
while(!l.isEmpty()){
System.out.println(l.removeLast());
}
}
}


在JDK1.6出现了地带方法

offerFirst()

offerLast()

peekFirst();

peekLast();

获取元素,但是元素被删除,如果集合中没有元素会返回null

poolFirst();

poolLast();

获取元素,但是元素被删除,如果集合中没有元素会返回null

List结合判断元素是否相同依据是元素的equals方法

set集合的功能和Collection一致的

for(Iterator it = a.iterator();it.hasNext();){//迭代器推荐方式

}

理解一:

不同对象的hashCode不同,但是有些类可能复写了hashCode代码,HashSet保证不能有相同的元素,所以每次add一个元素的时候,就会自动调用hashCode和equals方法(如果hashCode不同的则不调用)

理解二:

根据equals(Objectobj)来判断两个对象是否相等(并不会调用),如果相等则返回相同的HashCode值。

String 类的equals被复写了所以只要字符串相等就会返回相同HashCode值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: