java集合框架Word格式文档下载.docx

上传人:b****6 文档编号:18872808 上传时间:2023-01-01 格式:DOCX 页数:98 大小:205.97KB
下载 相关 举报
java集合框架Word格式文档下载.docx_第1页
第1页 / 共98页
java集合框架Word格式文档下载.docx_第2页
第2页 / 共98页
java集合框架Word格式文档下载.docx_第3页
第3页 / 共98页
java集合框架Word格式文档下载.docx_第4页
第4页 / 共98页
java集合框架Word格式文档下载.docx_第5页
第5页 / 共98页
点击查看更多>>
下载资源
资源描述

java集合框架Word格式文档下载.docx

《java集合框架Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《java集合框架Word格式文档下载.docx(98页珍藏版)》请在冰豆网上搜索。

java集合框架Word格式文档下载.docx

集合的常用操作:

增删改查

注意:

集合和数组中存放的都是对象的引用而非对象本身

Java工程师对不同的容器进行了定义,虽然容器不同,但是还是有一些共性可以抽取最后抽取了一个顶层接口,即集合框架。

如何学习呢?

当然是从顶层学起,顶层里边具有最共性,最基本的行为。

具体的使用,就要选择具体的容器了。

为什么?

因为不断向上抽取的东西有可能是不能创建对象的.抽象的可能性很大,并且子类对象的方法更多一些.所以是看顶层,创建底层。

那么集合的顶层是什么呢叫做Collection

集合框架体系

---|Collection:

单列集合

---|List:

有序(可重复),可重复:

“动态”数组

---|ArrayList:

数组实现,查找快,增删慢

由于是数组实现,在增和删的时候会牵扯到数组

增容,以及拷贝元素.所以慢。

数组是可以直接

按索引查找,所以查找时较快

---|LinkedList:

链表实现,增删快,查找慢

由于链表实现,增加时只要让前一个元素记住自

己就可以,删除时让前一个元素记住后一个元

素,后一个元素记住前一个元素.这样的增删效

率较高但查询时需要一个一个的遍历,所以效率

较低

---|Vector:

和ArrayList原理相同,但线程安全,效率略低

和ArrayList实现方式相同,但考虑了线程安全问

题,所以效率略低

---|Set:

无存储顺序,不可重复:

类似高中的“集合”

---|HashSet

---|TreeSet

---|LinkedHashSet

---|Map:

键值对

---|HashMap

---|TreeMap

---|HashTable

---|LinkedHashMap

1.5集合的使用选择

Collection

我们需要保存若干个对象的时候使用集合。

List

 

如果我们需要保留存储顺序,并且保留重复元素,使用List.

如果查询较多,那么使用ArrayList

如果存取较多,那么使用LinkedList

如果需要线程安全,那么使用Vector

Set

如果我们不需要保留存储顺序,并且需要去掉重复元素,使用Set.

如果需要将元素排序,那么使用TreeSet

如果不需要排序,使用HashSet,HashSet比TreeSet效率高.

如果需要保留存储顺序,又要过滤重复元素,那么使用LinkedHashSet

2、Collection接口的共性方法(补充)

学习Collection中的共性方法,多个容器在不断向上抽取就出现了该体系。

发现Collection接口中具有所有容器都具备的共性方法。

查阅API时,就可以直接看该接口中的方法。

并创建其子类对象对集合进行基本应用。

当要使用集合对象中特有的方法,在查看子类具体内容。

JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:

Set和List)实现

查看api文档Collection在java.util中(注意是大写Collection)

注意在现阶段遇到的ET之类的类型,需要暂时理解为object因为涉及到了泛型.创建集合对象,使用Collection中的List的具体实现类ArrayList

Collectioncoll=newArraylist();

2.1方法概览

增加:

1:

add()将指定对象存储到容器中

add方法的参数类型是Object便于接收任意对象

2:

addAll()将指定集合中的元素添加到调用该方法和集合中

删除:

3:

remove()将指定的对象从集合中删除

4:

removeAll()将指定集合中的元素删除

修改

5:

clear()清空集合中的所有元素

判断

6:

isEmpty()判断集合是否为空

7:

contains()判断集合何中是否包含指定对象

8:

containsAll()判断集合中是否包含指定集合

使用equals()判断两个对象是否相等

获取:

9:

intsize()返回集合容器的大小

转成数组10:

toArray()集合转换数组

2.2增加

publicstaticvoidmain(String[]args){

Collectionlist=newArrayList();

//增加:

list.add("

计算机网络"

);

现代操作系统"

java编程思想"

System.out.println(list);

//[计算机网络,现代操作系统,java编程思想]

//增加2将list容器元素添加到list2容器中

Collectionlist2=newArrayList();

list2.add("

java核心技术"

list2.addAll(list);

java语言程序设计"

System.out.println(list2);

//[java核心技术,计算机网络,现代操作系统,java编程思想,java语言程序设计]

}

2.3删除

//删除1remove

booleanremove=list2.remove("

System.out.println(remove);

//true

//

//删除2removeAll()将list中的元素删除

booleanremoveAll=list2.removeAll(list);

System.out.println(removeAll);

//true

//[java语言程序设计]

2.4修改

//修改clear()清空集合中的所有元素

list.clear();

//[]

2.5判断

booleanempty=list.isEmpty();

System.out.println(empty);

//false

booleancontains=list.contains("

System.out.println(contains);

//true

水许传"

booleancontainsAll=list.containsAll(list2);

System.out.println(containsAll);

2.6获取

//获取集合容器的大小

intsize=list.size();

System.out.println(size);

2.7练习-集合中添加自定义对象

//创建集合对象

Collectioncoll=newArrayList();

//创建Person对象

Personp1=newPerson("

jack"

25);

Personp2=newPerson("

rose"

22);

Personp3=newPerson("

lucy"

20);

Personp4=newPerson("

//集合中添加一些Perosn

//删除指定Person

//删除所有Person

//判断容器中是否还有Person

//判断容器中是否包含指定Person

//获取容器中Person的个数

//将容器变为数组,遍历除所有Person

分析:

Person类

1.姓名和年龄

2.重写hashCode和equals方法——前面学Object时讲过

1)如果不重写,调用Object类的equals方法,判断内存地址,为false

重写规则:

如果是Person类对象,并且姓名和年龄相同就返回true

2)如果不重写,调用父类的hashCode方法

如果equals方法相同,那么hashCode也要相同,需要重写hashCode方法

3)重写toString方法

不重写,直接调用Object类的toString方法,打印该对象的内存地址

classPerson{

privateStringname;

privateintage;

publicPerson(){

publicPerson(Stringname,intage){

this.name=name;

this.age=age;

@Override

publicinthashCode(){

returnthis.name.hashCode()+age;

publicbooleanequals(Objectobj){

if(!

(objinstanceofPerson)){

returnfalse;

}

Personp=(Person)obj;

returnthis.name.equals(p.name)&

&

this.age==p.age;

publicStringtoString(){

return"

Person:

name="

+name+"

age="

+age;

}

张三"

19);

李四"

王五"

18);

list.add(p1);

list.add(p2);

list.add(p3);

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

//返回集合容器的大小

//contains()判断集合何中是否包含指定对象

booleancontains=list.contains(p1);

//remove();

将指定的对象从集合中删除

list.remove(p1);

//clear()清空集合中的所有元素

3、List

3.1List集合特有方法

1.增加

voidadd(intindex,Eelement)指定位置添加元素

booleanaddAll(intindex,Collectionc)指定位置添加集合

2.删除

Eremove(intindex)删除指定位置元素

3:

Eset(intindex,Eelement)返回的是需要替换的集合中的元素

4:

查找:

Eget(intindex)注意:

IndexOutOfBoundsException

intindexOf(Objecto)//找不到返回-1

lastIndexOf(Objecto)

5:

求子集合

List<

E>

subList(intfromIndex,inttoIndex)//不包含toIndex

publicstaticvoidmain(String[]args){

Listlist=newArrayList();

//add,在0角标位置添加一本书

list.add(0,"

舒克和贝塔"

//在list2集合的1角标位置添加list集合元素

Listlist2=newArrayList();

史记"

资治通鉴"

全球通史"

booleanaddAll=list2.addAll(1,list);

System.out.println(addAll);

//trueSystem.out.println(list2);

//删除0角标元素

Objectremove=list.remove(0);

3.修改

//修改2角标位置的书,返回的原来2角标位置的书

Objectset=list.set(2,"

边城"

System.out.println(set);

//java编程思想

4.查找

//查找:

Eget(intindex)注意角标越界

Objectset=list.get(list.size()-1);

//java语言程序设计

//list.get(list.size());

//IndexOutOfBoundsException

//indexOf(Objecto)返回第一次出现的指定元素的角标

intindexOf=list.indexOf("

System.out.println(indexOf);

//2

//没有找到,返回-1

intindexOf2=list.indexOf("

三国志"

System.out.println(indexOf2);

//-1

//lastIndexOf返回最后出现的指定元素的角标

intlastIndexOf=list.lastIndexOf("

System.out.println(lastIndexOf);

//5

3.2ArrayList

1.实现原理—面试重点

在实际的开发中ArrayList是使用频率最高的一个集合。

ArrayList:

底层采用数组实现,默认容量10。

1.5倍扩容查询快,增删慢。

底层代码如下:

privatestaticfinalintDEFAULT_CAPACITY=10;

//默认初始容量

//对象数组存储

privatestaticfinalObject[]EMPTY_ELEMENTDATA={};

publicArrayList(){

super();

this.elementData=EMPTY_ELEMENTDATA;

//最大容量

privatestaticfinalintMAX_ARRAY_SIZE=Integer.MAX_VALUE-8;

privatevoidgrow(intminCapacity){

//overflow-consciouscode

intoldCapacity=elementData.length;

//1.5倍扩容

intnewCapacity=oldCapacity+(oldCapacity>

>

1);

if(newCapacity-minCapacity<

0)

newCapacity=minCapacity;

if(newCapacity-MAX_ARRAY_SIZE>

newCapacity=hugeCapacity(minCapacity);

//minCapacityisusuallyclosetosize,sothisisawin:

elementData=Arrays.copyOf(elementData,newC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1