day12day15集合.docx

上传人:b****8 文档编号:10665790 上传时间:2023-02-22 格式:DOCX 页数:94 大小:115.40KB
下载 相关 举报
day12day15集合.docx_第1页
第1页 / 共94页
day12day15集合.docx_第2页
第2页 / 共94页
day12day15集合.docx_第3页
第3页 / 共94页
day12day15集合.docx_第4页
第4页 / 共94页
day12day15集合.docx_第5页
第5页 / 共94页
点击查看更多>>
下载资源
资源描述

day12day15集合.docx

《day12day15集合.docx》由会员分享,可在线阅读,更多相关《day12day15集合.docx(94页珍藏版)》请在冰豆网上搜索。

day12day15集合.docx

day12day15集合

1.集合

1.1.什么是集合

存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。

集合的出现就是为了持有对象。

集合中可以存储任意类型的对象,而且长度可变。

在程序中有可能无法预先知道需要多少个对象,那么用数组来装对象的话,长度不好定义,而集合解决了这样的问题。

1.2.集合和数组的区别

数组和集合类都是容器

数组长度是固定的,集合长度是可变的。

数组中可以存储基本数据类型,集合只能存储对象数组中存储数据类型是单一的,集合中可以存储任意类型的对象。

集合类的特点

用于存储对象,长度是可变的,可以存储不同类型的对象。

1.2.1.数组的缺点

存储类型单一的数据容器,操作复杂(数组一旦声明好不可变)CRUD

1.3.集合的分类

集合做什么

1:

将对象添加到集合

2:

从集合中删除对象

3:

从集合中查找一个对象

4:

从集合中修改一个对象就是增删改查

注意:

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

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

如何学习呢?

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

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

为什么?

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

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

集合框架体系

---|Collection:

单列集合

---|List:

有存储顺序,可重复

---|ArrayList:

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

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

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

数组是可以直接

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

---|LinkedList:

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

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

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

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

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

较低

---|Vector:

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

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

题,所以效率略低

---|Set:

无存储顺序,不可重复

---|HashSet

---|TreeSet

---|LinkedHashSet

---|Map:

键值对

---|HashMap

---|TreeMap

---|HashTable

---|LinkedHashMap

为什么出现这么多集合容器,因为每一个容器对数据的存储方式不同,这种存储方式称之为数据结构(datastructure)

注意集合和数组中存放的都是对象的引用。

1.4.什么时候该使用什么样的集合

Collection

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

List

 

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

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

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

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

 

Set

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

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

如果我们不需要排序,使用HashSet,HashSet比

TreeSet效率高.

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

 

2.集合类(Collection)

Collection接口有两个子接口:

List(链表|线性表)

Set(集)

特点:

Collection中描述的是集合共有的功能(CRUD)

List可存放重复元素,元素存取是有序的

Set不可以存放重复元素,元素存取是无序的

java.util.Collection

---|Collection描述所有接口的共性

----|List接口可以有重复元素的集合

----|Set接口不可以有重复元素的集合

2:

学习集合对象

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

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

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

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

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

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

注意在现阶段遇到的ET之类的类型,需要暂时理解为object因为涉及到了泛型.

3:

创建集合对象,使用Collection中的List的具体实现类ArrayList

1:

Collectioncoll=newArraylist();

2.1.Collection接口的共性方法

增加:

1:

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

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

2:

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

删除:

3:

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

4:

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

修改

5:

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

判断

6:

isEmpty()判断集合是否为空

7:

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

8:

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

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

获取:

9:

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

转成数组10:

toArray()集合转换数组

2.1.1.增加:

publicstaticvoidmain(String[]args){

Collectionlist=newArrayList();

//增加:

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

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

System.out.println(list);

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

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

Collectionlist2=newArrayList();

list2.add("java核心技术");

list2.addAll(list);

list2.add("java语言程序设计");

System.out.println(list2);

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

}

2.1.2.删除:

//删除1remove

booleanremove=list2.remove("java核心技术");

System.out.println(remove);//true

System.out.println(list2);//

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

booleanremoveAll=list2.removeAll(list);

System.out.println(removeAll);//true

System.out.println(list2);//[java语言程序设计]

2.1.3.修改:

publicstaticvoidmain(String[]args){

Collectionlist=newArrayList();

//增加:

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

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

list.add("java核心技术");

list.add("java语言程序设计");

System.out.println(list);

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

list.clear();

System.out.println(list);//[]

}

2.1.4.判断:

publicstaticvoidmain(String[]args){

Collectionlist=newArrayList();

//增加:

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

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

list.add("java核心技术");

list.add("java语言程序设计");

System.out.println(list);

booleanempty=list.isEmpty();

System.out.println(empty);//false

booleancontains=list.contains("java编程思想");

System.out.println(contains);//true

Collectionlist2=newArrayList();

list2.add("水许传");

booleancontainsAll=list.containsAll(list2);

System.out.println(containsAll);//false

}

2.1.5.获取:

publicstaticvoidmain(String[]args){

Collectionlist=newArrayList();

//增加:

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

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

list.add("java核心技术");

list.add("java语言程序设计");

System.out.println(list);

//获取集合容器的大小

intsize=list.size();

System.out.println(size);

}

2.1.6.练习:

集合中添加自定义对象

该案例要求完成使用集合:

publicstaticvoidmain(String[]args){

//创建集合对象

Collectioncoll=newArrayList();

//创建Person对象

Personp1=newPerson("jack",25);

Personp2=newPerson("rose",22);

Personp3=newPerson("lucy",20);

Personp4=newPerson("jack",25);

//集合中添加一些Perosn

//删除指定Person

//删除所有Person

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

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

//获取容器中Person的个数

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

}

分析:

1:

Person类

1:

姓名和年龄

2:

重写hashCode和equals方法

1:

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

1:

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

2:

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

1:

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

3:

重写toString方法

1:

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

Person类

classPerson{

privateStringname;

privateintage;

publicPerson(){

}

publicPerson(Stringname,intage){

this.name=name;

this.age=age;

}

@Override

publicinthashCode(){

returnthis.name.hashCode()+age;

}

@Override

publicbooleanequals(Objectobj){

if(!

(objinstanceofPerson)){

returnfalse;

}

Personp=(Person)obj;

returnthis.name.equals(p.name)&&this.age==p.age;

}

@Override

publicStringtoString(){

return"Person:

name="+name+",age="+age;

}

}

publicstaticvoidmain(String[]args){

Personp1=newPerson("张三",19);

Personp2=newPerson("李四",20);

Personp3=newPerson("王五",18);

Collectionlist=newArrayList();

list.add(p1);

list.add(p2);

list.add(p3);

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

booleanempty=list.isEmpty();

System.out.println(empty);

//返回集合容器的大小

intsize=list.size();

System.out.println(size);

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

booleancontains=list.contains(p1);

System.out.println(contains);

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

list.remove(p1);

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

list.clear();

System.out.println(list);

}

//使用集合存储自定义对象2

classBook{

privateStringname;

privatedoubleprice;

publicBook(){

}

publicBook(Stringname,doubleprice){

this.name=name;

this.price=price;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicdoublegetPrice(){

returnprice;

}

publicvoidsetPrice(doubleprice){

this.price=price;

}

@Override

publicinthashCode(){

return(int)(this.name.hashCode()+price);

}

@Override

publicbooleanequals(Objectobj){

if(!

(objinstanceofBook)){

returnfalse;

}

Bookbook=(Book)obj;

returnthis.name.equals(book.name)&&this.price==book.price;

}

@Override

publicStringtoString(){

return"book:

@name:

"+this.name+",price:

"+this.price;

}

}

publicclassDemo1{

publicstaticvoidmain(String[]args){

Collectioncol=newArrayList();

col.add(newBook("thinkinjava",100));

col.add(newBook("corejava",200));System.out.println(col);

}

}

2.2.List

---|Iterable接口

Iteratoriterator()

----|Collection接口

------|List接口元素可以重复,允许在指定位置插入元素,并通过索

引来访问元素

2.2.1.List集合特有方法

1:

增加

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

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

2:

删除

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

3:

修改

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

4:

查找:

Eget(intindex)注意:

IndexOutOfBoundsException

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

lastIndexOf(Objecto)

5:

求子集合

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

2.2.1.1.增加

publicstaticvoidmain(String[]args){

Listlist=newArrayList();

//增加:

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

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

list.add("java核心技术");

list.add("java语言程序设计");

System.out.println(list);

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

list.add(0,"舒克和贝塔");

System.out.println(list);

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

Listlist2=newArrayList();

list2.add("史记");

list2.add("资治通鉴");

list2.add("全球通史");

booleanaddAll=list2.addAll(1,list);

System.out.println(addAll);//trueSystem.out.println(list2);

}

2.2.1.2.删除

publicstaticvoidmain(String[]args){

Listlist=newArrayList();

//增加:

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

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

list.add("java核心技术");

list.add("java语言程序设计");

System.out.println(list);

//删除0角标元素

Objectremove=list.remove(0);

System.out.println(remove);

}

2.2.1.3.修改:

publicstaticvoidmain(String[]args){

Listlist=newArrayList();

//增加:

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

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

list.add("java核心技术");

list.add("java语言程序设计");

System.out.println(list);

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

Objectset=list.set(2,"边城");

System.out.println(set);//java编程思想

System.out.println(list);

}

查找

Listlist=newArrayList();

//增加:

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

list.add("计算机网络");

list.add("现代操作系统");

list.add("java编程思想");

list.add("java核心技术");

list.add("java语言程序设计");

System.out.println(list);

//查找:

Eget(intindex)注意角标越界

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

System.out.println(set);//java语言程序设计

System.out.println(list);

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

}

2.2.1.4.查找

publicstati

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

当前位置:首页 > 求职职场 > 简历

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

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