黑马程序员——高新技术---Java基础-集合框架-集合Collection,List

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

1:对象数组(掌握)

(1)数组既可以存储基本数据类型,也可以存储引用类型。它存储引用类型的时候的数组就叫对象数组。

(2)案例:

用数组存储5个学生对象,并遍历数组。

 

2:集合(Collection)(掌握)

(1)集合的由来?

我们学习的是Java --面向对象 --操作很多对象--存储 --容器(数组和StringBuffer) --数组

而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。

(2)集合和数组的区别?

A:长度区别

数组固定

集合可变

B:内容区别

数组可以是基本类型,也可以是引用类型

集合只能是引用类型

C:元素内容

数组只能存储同一种类型

集合可以存储不同类型(其实集合一般存储的也是同一种类型)

(3)集合的继承体系结构?

由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,

我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。

 

Collection

|--List(接口)有序的,可以存储重复值

|--ArrayList()实现了所有List中的方法和Collection中的方法。

|--Vector

|--LinkedList

|--Set

|--HashSet

|--TreeSet

 

Collection接口的基本方法:

 

boolean add(E e)将元素e的引用添加到集合,如果此Colection,由于调用而发生更改,就返回true

boolean remove(Object o)将元素o从集合删除。删除第一个匹配元素,之后就返回。

void clear()清空集合

boolean contains(Object o)查找集合中的元素o,如果有返回true

boolean isEmpty()判断集合是否为空

int size()获取集合的大小

 

Collection接口成员方法

 

boolean addAll(Collection c)将指定Collection2中的所有元素添加到collection1

boolean removeAll(Collection c)移除此 collection 中那些也包含在指定 collection中的所有元素(可选操作)。此调用返回后,collection 中将不包含任何与指定 collection 相同的元素。

boolean containsAll(Collection c)如果此 collection 包含指定 collection中的所有元素,则返回 true。

boolean retainAll(Collection c)仅保留此 collection 中那些也包含在指定collection 的元素(可选操作)。换句话说,移除此 collection 中未包含在指定 collection 中的所有元素。

 

Collection集合遍历:

方式一:把集合转数组(了解)Object[] toArray()

 Objiect objArray = list.toArray();(后面注意强转)

方式二:迭代器(集合专用方式)

Iteratoriterator ()

 

List接口:

List接口中增加了一些特有功能,使其具有一些特性:

1:有序的(取出时的顺序和存入时的顺序是一样的。)

2:可以存储重复的元素

 //List类中特有的方法

void add(int index,E element)在列表的指定位置插入指定元素(可选操作)。将当前处于该位置的元素(如果有的话)和所有后续元素向右移动(在其索引中加1)。

E remove(int index)移除列表中指定位置的元素(可选操作)。将所有的后续元素向左移动(将其索引减1)。返回从列表中移除的元素。 (注意:凡是E的都可以认为是Object类的)

E get(int index)返回列表中指定位置的元素。

E set(int index,E element)用指定元素替换列表中指定位置的元素(可选操作)。

ListIterator listIterator()返回此列表元素的列表迭代器(按适当顺序)。Interator只能是单向的向后遍历,ListIterator可以是双向的,可以前后遍历。利用的是ListIteratorprevious()方法,判断条件是listit.hasprevious(),但是注意,使用向前遍历时,一定要先使用向后遍历。

 

当我们通过"迭代器"遍历时,通过list的引用去修改集合内容是,会产生一个异常:java.util.ConcurrentModificationException

并发修改异常

A:出现的现象

迭代器遍历集合,集合修改集合元素

B:原因

迭代器是依赖于集合的,而集合的改变迭代器并不知道。

C:解决方案

a:迭代器遍历,迭代器修改(ListIterator)

元素添加在刚才迭代的位置

b:集合遍历,集合修改(size()get())

元素添加在集合的末尾

 

//方式1:迭代器迭代元素,迭代器修改元素

//Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator

ListIteratorlit = list.listIterator();
while(lit.hasNext()) {
Strings = (String) lit.next();
if("world".equals(s)) {
lit.add("javaee");
}

 

//方式2:集合遍历元素,集合修改元素(普通for)

for(int x = 0; x < list.size(); x++) {
Strings = (String) list.get(x);
if("world".equals(s)) {
list.add("javaee");
}
}

常见数据结构:

A:先进后出

B:队列先进先出

C:数组查询快,增删慢

D:链表查询慢,增删快

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值