java集合解析课件_第1页
java集合解析课件_第2页
java集合解析课件_第3页
java集合解析课件_第4页
java集合解析课件_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、集合(Collection)

Collection

I-List|-Set

|-ArrayList|-HashSet

|-Vector|-TreeSet

|-LinkedList

1、Collection

(1)集合的由来?

我们学习的是Java-面向对象-操作很多对象-存储-

容器(数组和StringBuffer)-数组

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

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

A:长度区别

数组固定

集合可变

B:内容区别

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

集合只能是引用类型

C:元素内容

数组只能存储同一种类型

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

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

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

遍历功能的,

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

(4)Collection的功能:集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。

1:添加功能

booleanadd(Objectobj):添加一个元素

booleanaddAII(Collectionc):添加一个集合的元素

2:删除功能

voidclear。:移除所有元素

booleanremove(Objecto):移除一个元素

booleanremoveAII(Collection-个集合的元素(是个还是所有)

3:判断功能

booleancontains(Objecto):判断集合中是否包含指定的元素

booleancontainsAll(Collectionc):判断集合中是否包含指定的集合元素(是一个还是所有)

booleanisEmpty():判I斯集合是否为空

4:获取功能

lterator<E>iterator()(重点)

5:长度功能

intsize。:元素的个数

6:交集功能

booleanretainAII(Collectgnc):两个集合都有的元素?思考元素去哪了,返回的boolean乂是什么意

思呢?

7:把集合转换为数组

Object[]toArray()(5)Collection集合的遍历

A:把集合转数组(了解)

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

⑸迭代器:Iterator集合的专用遍历方式

Objectnext():获取元素,并移动到下一个位置。

booleanhasNext():如果仍有元素可以迭代,则返回true。

A:是集合的获取元素的方式。

B:是依赖于集合而存在的。

C:迭代器的原理和源码。

a:为什么定义为了一个接口而不是实现类?

b:看了看迭代器的内部类实现。

(6)Collection集合的案例(遍历方式迭代器)

集合的操作步骤:

A:创建集合对象

B:创建元素对象

C:把元素添加到集合

D:遍历集合

A:存储字符串并遍历

importjava.util.Collection;

importjava.util.ArrayList;

importjava.util.Iterator;

publicclassCollectionDemo{

publicstaticvoidmain(String[]args){

〃创建集合对象

Collectionc=newArrayListf);

〃创建并添加元素

c.add("hello");

c.add("world");

c.add("java");

〃遍历集合

Iteratorit=c.iteratorf);

while(it.hasNext()){

Strings=(String)it.next();

System.out.println(s);

2、List集合

1、List

(l)List是Collection的子接口

特点:有序(存储顺序和取出顺序一致),可重复。

(2儿ist的特有功能:

A:添加功能

voidadd(intindex,Objectelement):在指定位置添加元素

B:获取功能

Objectget(intindex):获取指定位置的元素

C:列表迭代器

Listiteratorlistlterator():List集合特有的迭代器

D:删除功能

Objectremove(intindex):根据索引删除元素,返回被删除的元素

E:修改功能

Objectset(intindex,Objectelement):根据索引修改元素,返回被修饰的元素

(3)Lst集合的特有遍历功能

A:由size。和get()结合。

B:代码演示

〃创建集合对象

Listlist=newArrayList();

〃创建并添加元素

list.add("hello");

list.addf'world");

list.add("java");

〃遍历集合

Iteratorit=list.iterator();

while(it.hasNext()){

Strings=(String)it.next();

System.out.println(s);

)

Sy<;tpm.nutprintln('----------");

for(intx=0;x<list.size();x++){

Strings=(String)list.get(x);

System.out.println(s);

)

(4)列表迭代器:Listiteratorlistlterator():List集合特有的迭代器

该迭代器继承了Iterator■迭代器,所以,就可以直接使用hasNext。和next()方法。

特有功能:

Objectprevious。:获取上一个元素

booleanhasPrevious。:判断是否有元素

注怠:ustlterator可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用,

(5)列表迭代器的特有功能;(了解)

可以逆向遍历,但是要先正向遍历,所以无意义,基本不使用。

(6)并发修改异常

A:出现的现象

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

B:原因

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

C:解决方案

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

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

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

元素添加在集合的末尾

2、ArrayList

A:没有特有功能需要学习

B:案例

a:ArrayList存储字符串并遍历

b:ArrayList存储自定义对象并遍历

3、Vector

A:有特有功能

a:添加

publicvoidaddElement(Eobj)add()

b:获取

publicEelementAt(intindex)get()

publicEnumeration<E>elements()—iterator()

B:案例

a'ectoi■存储字符串并遍历

b:Vector存储自定义对象并遍历

4、LinkedList

A:有特有功能

a:添加

addFirst()

addLast()

b删除

removeFirst()

removeLast()

c:获取

getFirst()

getLast()

B:案例

a:LinkedList存储字符串并遍历

b:LinkedList存储自定义对象并遍历

3、Set集合

Set

⑴Set集合的特点:无序,唯一

2、HashSet

(1)、HashSet:它不保证set的迭代顺序:特别是它不保证该顺序恒久不变。

注意:虽然Set集合的元素无序,但是,作为集合来说,它肯定有它自己的存储顺序,而你的顺序恰好和它的

存储顺序•致,这代表不了有序,你可以多存储•些数据,就能看到效果。

A:底层数据结构是哈希表(是一个元素为链表的数组)

B:哈希表底层依赖两个方法:hashCode。和equals()

执行顺序:

首先比较哈希值是否相同

相同:继续执行equals。方法

返回true:元素重复了,不添加

返回false:直接把元素添加到集合

不同:就直接把元素添加到集合

C:如何保证元素唯一性的呢?

由hashCode。和equals。保iE的

D:开发的时候,代码非常的简单,自动生成即可。

E:HashSet存储字符串并遍历

F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)

(2)、LinkedHashSet:底层数据结构由哈希表和徒表组成。

哈希表保证元素的唯一性。

链表保证元素有素。(存储和取出是•致)

3、TreeSet

(1)TreeSet:

A:底层数据结构是红黑树(是一个自平衡的二叉树)

B:保证元素的排序方式

a:自然排序(元素具备比较性)

让元素所属的类实现Comparable接口

b:比较器排序(集合具备比较性)

让集合构造方法接收Comparator的实现类对象

C;把我们讲过的代码看遍即可

(2)案例:

A:获取无重复的随机数

B:键盘录入学生按照总分从高到底输出

4、Collection集合总结

1、Collection

|-List有序(存储顺序和取出顺序一•致),可重复

|-ArrayList

底层数据结构是数组,查询快,增删慢。

线程不安全,效率高

|-Vector

底层数据结构是数组,查询快,增删慢。

线程安全,效率低

|-LinkedList

底层数据结构是链表,件询慢,增删快。

线程不安全,效率高

|-Set无序(存储顺序和取出RI页序不一致),唯一

|-HashSet

底层数据结构是哈希表。

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

依赖两个方法:hashCode。和equals()

开发中自动生成这两个方法即可

|-LinkedHashSet

底层数据结构是链表和哈希表

由链表保证元素有序

由哈希表保证元素唯一

|-TreeSet

底层数据结构是红黑树。

如何保证元素排序的呢?

自然排序

比较器排序

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

根据比较的返回值是否是0来决定

2、Collation集合的使用

唯一吗?

是:Set

排序吗?

是:TreeSet

否:HashSet

如果你知道是Set,但是不知道是哪个Set,就用HashSet<,

否:List

要安全吗?

是:Vector

否:ArrayList或者LinkedList

查询多:ArrayList

增删多:LinkedList

如果你知道是List,但是不知道是哪个List,就用ArrayListo

如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。

如果你知道用集合,就用ArrayListo

3、在集合中常见的数据结构

ArrayXxx:底层数据结构是数组,查询快,增册[慢

LinkedXxx:底层数据结构是链表,查询慢,增删快

HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()fllequalsl)

TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

4、常见数据结构

A:栈先进后出

B:队列先进先出

C:数组查询快,增删慢

D:链表查询慢,增删快

5、Collections

1、Collections

(1)是针对集合进行操作的工具类

(2)面试题:Collection-fllCollections的区别

A:Collection是单列集合的顶层接口,有两个子接口List和Set

B:Collections是针对集合进行操作的工具类,可以对集合进行排序和查找等

(3)常见的几个小方法:

A:publicstatic<T>voidsort(List<T>list)

B:publicstatic<T>intbinarySearch(List<?>list,Tkey)

C:publicstatic<T>Tmax(Collection<?>coll)

D:publicstaticvoidreverse(List<?>list)

E:publicstaticvoidshuffle(List<?>list)

(4)案例

A:ArrayList集合存储自定义对象的排序

B:模拟斗地主洗牌和发牌

C:模拟斗地主洗牌和发牌并对牌进行排序

6、Map

⑴将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

(2)Map和Collection的区别?

A:M叩存储的是键值对形式的元素,键唯一,值可以重复。夫妻对

B:Collection存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍

(3)Map接口功能概述

A:添加功能

Vput(Kkey,Vvalue):添加元素。这个其实还有另一个功能?先不告诉你,等会讲

如果键是第一次存储,就直接存储元素,返回null

如果键不是第•次存在,就用值把以前的值替换掉,返回以前的值

B:删除功能

voidclear。:移除所有的键值对元素

Vremove(Objectkey):根据混删除键值对元素,并把值返回

C:判断功能

booleancontainsKey(Objectkey):判断集合是否包含指定的键

booleancontainsValue(Objectvalue):判断集合是否包含指定的值

booleanisEmpty():判断集合是否为空

D:获取功能

Set<Map.Entry<K,V»entrySet():???

Vget(Objectkey):根据键获取值

Set<K>keyset。:获取集合中所有键的集合

Collection<V>values。:获取集合中所有值的集合

E:长度功能

intsize():返【可集合中的键值对的对数

(4)Map集合的遍历

A:键找值

a:获取所有键的集合

b:遍历键的集合,得到每一个键

c:根据键到集合中去找值

B:键值对对象找键和值

a:获取所有的键值对对象的集合

b:遍历键值对对象的集合,获取每一个键值对对象

c:根据键值对对象去获取键和值

代码体现:

Map<String,String>hm=newHashMap<String,String>();

hm.put("it002"/"hello");

,,

hm.put(it003","world");

,,,,

lll^.pul("ilOOl/"jdVd);

〃方式1键找值

Set<String>set=hm.keySet();

forfStringkey:set){

Stringvalue=hm.get(key);

System.out.println(key+"—"+value);

)

〃方式2健值对对象找键和值

Set<Map.Entry<String,String»set2=hm.entrySet();

for(Map.Entry<String,String>me:set2){

Stringkey=me.getKeyO;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论