集合总结1


集合类

       集合就是一个只能用以存储对象的容器

特点:

1, 只能存储对象

2, 长度可变的容器

 

集合和数组的区别:

1, 集合长度可变,数组长度不可变

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

 

集合有多种体现,是因为每一个容器的内部数据结构不同(存储数据的方式)导致的。

 

Collection:

       集合的最顶层容器。

增删改查

 

1, 添加

boolean add(Object):添加一个元素

boolean addAll(Collection):添加一个指定容器中的所有元素

 

2, 删除

void clear() :清空容器

boolean remove(Object) :删除指定元素

booleanremoveAll(Collection):删除与指定容器中相等的元素

 

3, 判断

boolean IsEmpty():判断容器是否为空。

boolean contains(Object):是否包含指定元素

booleancontainsAll(Collection):是否包含指定容器中的所有内容

 

4, 获取

Int size():获取容器中元素的个数。

Iteratoriterator():得到一个迭代器

booleanretainAll(Collection):保留交集

 

5, 将集合变成数组

Object[] toArray():返回容器中所有元素的数组

 

只有List可以对元素进行增删改查。

 

集合细节:

1, 创建容器其实就是在堆内存中定义了一个可以存储对象的对象

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

2, add方法什么类型都可以接收。

原因:因为add方法的参数类型是Object,所有的元素在存储时都被自动提升

         为了Object类。取出对象时,取出类型是Object。

3,对于remove contains方法。

其实内部都是用到了一个对对象进行判断相等的方法equals。

4,coll.add(4):可以不可以?

在jdk1.4 版本,不可以,必须写成coll.add(new Integer(4));

在jdk1.5版本,可以,因为有自动装箱。

 

Collection:

       |--List:有序(存入的顺序和取出的顺序一致),元素都有索引,元素可以重复。

       |--Set:元素不可以重复,无序(存入的顺序和取出的顺序不一定一致)。

 

 

 

了解一下List子接口的常见特有方法:

因为List集合是由索引的,所以它的特有的方法都是围绕索引定义的。

 

1,添加

       add(index,element):在指定位置插入元素。

       addAll(index,colletion):在指定位置插入一堆元素。

      

2,获取

       Objectget(index):根据索引获取元素。

       intindexOf(object):获取指定元素的索引。

       intlastIndexOf(Object)

       ListsubList(startIndex,endIndex);

3,删除

       remove(index):根据索引删除元素。

      

4,修改

       set(index,element):修改指定位置上的元素,用指定的元素进行替换。

        

这就是传说中的增删改查(c-create,u-update,r-read,d-delete).

记住:只有list可以对元素进行增删改查。

 

List:常见的子类对象。

       |--Vector:内部是数组数据结构。

                            而且是一个可变长度的数组(无非就是新建数组并将原数组元素复制到新数组中)

                            jdk1.0版本就存在了,jdk1.2版本才加入了java集合框架中。

                            是同步。因为效率很低,所以很少用。

                            该集合支持枚举接口Enumeration,但是被Iterator替代。

                           

                           

       |--ArrayList:内部也是数组数据结构,是不同步的。替代了Vector.查询元素的速度很快。  

                           

       |--LinkedList:内部是链表数据结构,是不同步的。该数据结构的特点:对元素的增删速度很快。

      

 

LinkedList:

       addFirst();

       addLast();

       jdk1.6时,

       offerFirst()

       offerLast();

      

      

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

       getFirst():

       getLast();

       jdk1.6时,获取元素,但不删除。集合长度不改变。如果集合中没有元素会返回null。

       peekFirst()

       peekLast();

      

      

       获取元素,但是会将该元素删除,集合长度改变。如果集合中没有元素会出现NoSuchElementException

       removeLast();

       removeFirst();

       jdk1.6时,获取元素,但是会将该元素删除,集合长度改变。如果集合中没有元素会返回null。

       pollFirst()

       pollLast();

 

 

介绍两个常见的简单数据结构:

堆栈:先进后出。firstin  last out  FILO

 

队列:先进先出。firstin first out  FIFO

面试:请使用LinkedList模拟一个堆栈或者队列。

 

 

 

对于ArrayList判断元素是否相同,依据的是元素的equals方法。

对于contains,或者remove内部都是使用equals来判断是否有相同的元素。

所以存储自定义元素时,必须覆盖equals方法,建立自定义元素的比较相同的方式,通常都依据自定义元素的属性。

 

迭代器:

       是一种取出元素的方式。

迭代器的基本使用:

Iterator接口:

iterator():返回一个Iterator接口类型的对象。

 

NoSuchElementException(常见的异常)

 

hasNext():对于迭代器取出元素,先要进行判断是否有元素,有就取。

如果元素很多,会判断多次并取出多次。

 

while和for循环的比较:

       for好些:迭代器变量在元素取完以后就释放了。

 

循环中不要写多个next()方法

 

迭代器的基本原理:

数据结构不同,取出元素方式不同。

为了方便于对每一个容器进行取出的操作,对容器进行共性的抽取。

每一个去出方式都包含:

 

hasNext()

{

       code

}

next()

{

}

 

 

好处:降低了数据结构的耦合性。

 

 

 

List集合取出元素有两种方式:1,迭代;2,遍历

 

listIterator:列表迭代器

 

ConcurrentModification:并发修改,不允许时发生的异常。

 

在迭代中操作集合中的元素:引用迭代器中的方法。

 

 

Iterator中的方法较少,只能判断、获取、删除

 

List中的listIterator方法,具备更多的操作。可以增删改查。因为list集合具备索引的属性。

       局限性:只能用在List派系中。

该方法返回ListIterator列表迭代器。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章