JAVA集合试题库.docx

上传人:b****5 文档编号:12535561 上传时间:2023-04-20 格式:DOCX 页数:38 大小:346.20KB
下载 相关 举报
JAVA集合试题库.docx_第1页
第1页 / 共38页
JAVA集合试题库.docx_第2页
第2页 / 共38页
JAVA集合试题库.docx_第3页
第3页 / 共38页
JAVA集合试题库.docx_第4页
第4页 / 共38页
JAVA集合试题库.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

JAVA集合试题库.docx

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

JAVA集合试题库.docx

JAVA集合试题库

集合

一、第一模块:

知识点讲解

图解集合

IteratorCollectionMap

ListIteratorListSetHashMapTreeMap

LinkedHashMap

ArrayListLinkListHashSetTreeSet

LinkedHashSet

Comparablecomparator

1、集合的由来:

我们学的语言是面向对象的语言,为了方便对多个对象进行操作,我们就必须把对象存储。

而要存储多个对象,就不能是一个基本变量,而应该是一个容器类型的变量。

这样就引入了集合。

*以前接触过得容器:

数组、StringBuffer等

由于StringBuffer的结果是一串字符,不一定能满足我们的要求,所以我们只能选择数组,这就是对象数组。

而对象数组不能适应变化的需求,因为数组的长度是固定。

2、数组和集合的区别

1长度区别

集合的长度可变

数组长度不可变

2内容区别

集合可以存储不同类型的元素

数组存储的是同一种类型的元素

3元素的数据类型问题

数组可以存储基本数据类型也可以存储引用数据类型

集合只能存储引用类型

针对不同的需求,Java提供了不同的集合类,这多个集合的数据结构不同

*数据结构:

数据的存储方式

Java提供的多种集合类,他们的数据结构不同,但是,他们肯定有共性的内容(存储、获取、判断等)。

通过不断的向上提取,我们就能够得到一个集合的继承体系结构图。

把上面这段话转化为图形的形式:

collection

ListSet

ArrayListVectorLinkedListHashSet

TreeSet

通过这个图可以清楚的理解集合

现在我们从最低层开始学习

一、Collection(接口Java.util)

1、功能:

①:

添加

booleanadd(Objectobj)添加一个元素

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

②:

删除

voidclear()移除所有元素

booleanremove(Objectobj)移除一个元素

booleanremoveAll(Collectionc)移除一个集合的元素

③:

判断

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

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

Collectionc1=newArrayList();

c1.add("hello");

c1.add("java");

c1.add("world");

Collectionc2=newArrayList();

c2.add("a");

c2.add("c");

c2.add("world");

System.out.println("containsAll:

"+c1.containsAll(c2));

System.out.println(c1);

System.out.println(c2);

打印结果:

containsAll:

false

c1[hello,java,world]

c2[a,c,world]

booleanisEmpty()判断是否是空

④获取

Iteratoriterator()

⑤长度

intsize()

⑥交集功能(了解)

booleanretainAll(Collectionc)交集

两个集合中都有的元素,返回值的意思?

假设有两个集合A,B。

A对B做交集,最终存在A中,B不变,返回值表示的是A是否发生过改变。

Collectionc1=newArrayList();

c1.add("hello");

c1.add("java");

c1.add("world");

Collectionc2=newArrayList();

c2.add("a");

c2.add("c");

c2.add("world");

System.out.println("retainAll:

"+c1.retainAll(c2));

System.out.println("c1:

"+c1);

System.out.println("c2:

"+c2);

打印结果:

retainAll:

true

c1:

[world]

c2:

[a,c,world]

⑦把集合转成数组

Object[]toArray()

注意:

*通过测试得出的一些结论

removeAll():

只要有一个被移除就叫移除

containsAll():

只有包含所有的元素才叫包含

retainsAll():

谁调用谁变,没有交集元素,那个集合就变为空。

返回值的含义就是有集合变了就返回true,否则返回false。

2、创建Collection对象

Collectionc=newArrayList();//因为Collection是接口,并且它没有直接实现类,而ArrayList是其子接口,通过测试,可以看出它重写了toString()方法,直接输出打印的是[],ArrayList集合里面的元素可以重复

3、集合的遍历

①把集合转成数组,可以实现集合的遍历

//创建对象

Collectionc=newArrayList();

c.add(“hello”);

c.add(“world”);

c.add(“java”);

//遍历(toArray())

Object[]objs=c.toArray();

for(intx=0;x

System.out.println(objs[x]);

}

//但是要想得到个字符串的长度,则需要向下转型

Strings=(String)objs[x];

System.out.println(s.length());

②Iterator迭代器

//创建对象

Collectionc=newArrayList();

c.add(“hello”);

c.add(“world”);

c.add(“java”);

//遍历

Iteratorit=c.iterator();

while(it.hasNext()){

Strings=(String)it.next();//next()的返回值是

System.out.println(s);

}

另一种方式改进,for循环改进

for(Iteratorit=c.iterator();it.hasNext();){

Strings=(String)it.next();

System.Out.println(s);

}

4、迭代器

是遍历集合的一种方式。

迭代器依赖于集合而存在。

迭代器的方法next(),hasNext()

5、集合的使用步骤

①创建集合对象

②创建元素对象

③把元素添加到集合

④遍历集合

<1>通过集合对象获取迭代器对象

<2>通过迭代器对象的hasNext()方法判断是否还有下一个元素

<3>通过迭代器对象的next()方法获取元素,并移动到下一个位置

*迭代器为什么不定义成一个类,而是一个接口

假设迭代器是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历。

但是Java中提供了很多的集合类,这些集合类的数据结构是不同的,所以,存储方式和遍历方式不同,最终,就没有定义迭代器类

而无论是哪种集合,你都应该具备获取元素的操作,并且,最好具有判断功能,这样,在获取前,先判断就不容易出错,也就是说,判断功能和获取功能是一个集合所具备的,而每种集合的方式又不太一样,所以我们把这两个功能给取出来并不提供具体实现类,这种方式就是接口。

那么真正的具体实现类在哪呢?

在真正的具体的子类中,以内部类的方式体现。

二、List集合(Collection的子类)

1、List集合的特有功能

①添加功能

voidadd(intindex,Objectelment);在指定位置添加元素

//创建对象

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

list.add(4,"javaee");

System.out.print("list:

"+list);

报错:

IndexOutOfBoundsException

//创建对象

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

list.add(3,"javaee");

System.out.print("list:

"+list);

打印结果:

list:

[hello,world,java,javaee]

②获取功能

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

//创建对象

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

System.out.print("list:

"+list.get(3));

报错:

IndexOutOfBoundsException

//创建对象

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

System.out.print("get():

"+list.get

(2));

打印结果:

get():

java

③列表迭代器

ListIteratorlistIterator();List集合中特有的迭代器

④删除功能

Objectremove(intindex);根据索引删除元素

//创建对象

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

System.out.print("remove():

"+list.get

(2));

打印结果:

remove():

java

⑤修改功能

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

//创建对象

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

System.out.println("set():

"+list.set(2,"javaee"));

System.out.print(list);

打印结果:

set():

java

[hello,world,javaee]

2、List集合的遍历

//创建对象

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

//遍历

for(intx=0;x

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

System.out.println(s);

}

3、listIterator()的使用(只能创建list对象,一般不用)

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

ListIteratorlit=list.listIterator();

while(lit.hasNext()){

Strings=(String)lit.next();

System.out.println(s);

//可以从后面开始打印,逆向遍历

}

System.out.println("--------------");

while(lit.hasPrevious()){

Strings=(String)lit.previous();

System.out.println(s);

}

//这段代码只有在正向遍历之后才有效,所以一般无意义,不使用

打印结果:

hello

world

java

--------------

java

world

hello

4、List的子类特点

ArrayList:

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

线程不安全,效率高

Vector:

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

线程安全,效率低

LinkedList:

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

线程不安全,效率高

5、并发修改的异常(ConcurrentModificationException)

①出现的现象

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

代码演示:

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

Iteratorit=list.iterator();

while(it.hasNext()){

Strings=(String)it.next();

if("world".equals(s)){

list.add("javaee");

}

}

System.out.println("list:

"+list);

②原因

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

③解决方案

<1>迭代器遍历,迭代器修改(ListIterator)

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

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

ListIteratorlit=list.listIterator();

while(lit.hasNext()){

Strings=(String)lit.next();

if(("world").equals(s)){

lit.add("javaee");

}

}

System.out.print("list:

"+list);

打印结果:

list:

[hello,world,javaee,java]

<2>集合遍历,集合修改(size(),get())

元素添加在集合的末尾

Listlist=newArrayList();

list.add("hello");

list.add("world");

list.add("java");

for(inti=0;i

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

if("world".equals(s)){

list.add("javaee");

}

}

System.out.print("list"+list);

打印结果:

list[hello,world,java,javaee]

三、1、ArrayList集合(List的子类)

由于ArrayList是list的子类,所以多种方法都是从基类上继承下来的。

下面看ArrayList是如何遍历的

//创建对象

ArrayListarray=newArrayList();

//创建元素对象,并添加元素

array.add("hello");

array.add("world");

array.add("java");

//第一种遍历

Iteratorit=array.iterator();

while(it.hasNext()){

Strings=(String)it.next();

System.out.println(s);

}

//第二种遍历

for(intx=0;x

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

System.out.println(s);

}

*例题:

ArrayList去除集合中字符串的重复值(字符串的内容相同)

分析:

*A:

创建集合对象

*B:

添加多个字符串元素(包含内容相同的)

*C:

创建新集合

*D:

遍历旧集合,获取得到每一个元素

*E:

拿这个元素到新集合去找,看有没有

*有:

不搭理它

*没有:

就添加到新集合

*F:

遍历新集合

publicclassArrayListDemo{

publicstaticvoidmain(String[]args){

ArrayListarray=newArrayList();

//添加多个字符串元素(包含内容相同的)

array.add("hello");

array.add("world");

array.add("java");

array.add("world");

array.add("java");

array.add("world");

array.add("world");

array.add("world");

array.add("world");

array.add("java");

array.add("world");

//创建新集合

ArrayListnewArray=newArrayList();

//遍历旧集合,获取得到每一个元素

Iteratorit=array.iterator();

while(it.hasNext()){

Strings=(String)it.next();

//拿这个元素到新集合去找,看有没有

if(!

newArray.contains(s)){

newArray.add(s);

}

}

//遍历新集合

for(intx=0;x

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

System.out.println(s);

}

}

}

2、案例:

例一:

基因牛的繁殖

张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛,

生出来的母牛三年后,又可以每年生出一头母牛。

如此循环下去,请问张教授n年后有多少头母牛?

/**

*张教授采用基因干预技术成功培养出一头母牛,

*三年后,这头母牛每年会生出1头母牛,

*生出来的母牛三年后,又可以每年生出一头母牛。

*如此循环下去,请问张教授n年后有多少头母牛?

*

*这个题的理解

*刚开始造了一头牛,循环三次后,第二头牛造了出来,循环第四次时,第一头牛又造了一头牛,第二头牛循环三次后又造了一头牛。

依次类推

*

*思路:

首先定义一个牛类,这个类里面有一个成员变量age,这个age的作用是用来记牛的年龄的

*其次在这个类里有一个方法,是来判断这个牛的age是否符合生小牛的条件的。

*假设每调用一次该方法age就加1

*另一个方法是一个静态方法,带一个参数n,这个n指的是传过来的年数

*这个方法是用来造牛的

*/

importjava.util.ArrayList;

importjava.util.List;

//定义一个Cow类

classCow{

intage;//变量

//方法:

作用:

到了第三年就创建一个牛

publicCowafterYear(){

age++;

returnage>2?

newCow():

null;//填空

}

//方法:

作用:

此方法带一个参数n,是用来传递年数的。

publicstaticvoidshowTotalCowNum(intn){//显示13年后全部牛的数量

//这个地方用到了List集合,但由于List是接口,所以找到了它的直接实现类ArrayList

//创建一个集合对象,这个集合的类型为Cow

Listlist=newArrayList();

//创建了一个牛,把它加到了集合中

list.add(newCow());

//n为年数

for(inti=0;i

intcowCount=list.size();//集合的长度即牛的个数

for(intj=0;j

Cowcow=list.get(j).afterYear();//三年后,母牛就会每年生一只小牛,

//如果cow对象不为空时

if(cow!

=null){

cow.afterYear();//这个对象调用afterYear填空

list.add(cow);

}

}

}

System.out.println(n+"yearafter,sum:

"+list.size());

}

}

publicclassMain{

publicstaticvoidmain(String[]args){

Cow.showTotalCowNum(13);

}

}

四、Vector集合(List的子类)

1、Vector的特有功能:

A、添加功能

publicvoidaddElement(Objectobj);

B、获取功能

publicObjectelementAt(intindex);

publicEnumerationelements();

boolean

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

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

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

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