黑马程序员-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值。
相关文章推荐
- 黑马程序员--07.集合框架--03.【列表List集合的共性方法】【列表迭代器ListIterator】
- 黑马程序员 知识点总结-Java集合框架(List)
- 黑马程序员_day14 集合(迭代器,Vector中的枚举,LinkedList,HashSet)
- 黑马程序员——>第十四天<集合框架(迭代器-List-ArrayList-HashSet)>
- 黑马程序员---集合体系的继承关系图。顶层接口Collection中的方法,迭代器Iterator使用和原理,List派系特点
- 黑马程序员------集合框架(No.1)(概述、迭代器、List集合、Iterator)
- 黑马程序员——java集合框架之List,Set
- 黑马程序员-Java集合框架List
- 黑马程序员_Java第14天知识总结_集合类(集合框架)_Collection_迭代器_List_Set_HashSet
- 黑马程序员--List集合的子类和迭代器应用浅析
- 黑马程序员—Java集合框架(LinkedList)
- 奋斗黑马程序员----Java集合框架之List
- 黑马程序员-集合框架的List集合和迭代器
- 黑马程序员——Java集合框架—List
- 黑马程序员_JAVA学习日记_JAVA中API:集合框架1(Collection,List,Set及其子类和迭代器的应用)
- 黑马程序员——Java集合框架(一)之迭代器、Collection层次结构等
- 黑马程序员_java集合框架——List
- 黑马程序员 Java集合框架List,Map,Set等全面介绍
- 黑马程序员12——枚举数和迭代器
- Java Collections Framework - Java集合框架之List篇 ArrayList与LinkedList等的性能比较