java集合初学者必备.docx
《java集合初学者必备.docx》由会员分享,可在线阅读,更多相关《java集合初学者必备.docx(15页珍藏版)》请在冰点文库上搜索。
java集合初学者必备
1:
对象数组(掌握)
(1)数组既可以存储基本数据类型,也可以存储引用类型。
它存储引用类型的时候的数组就叫对象数组。
(2)案例:
用数组存储5个学生对象,并遍历数组。
2:
集合(Collection)(掌握)
(1)集合的由来?
我们学习的是Java--面向对象--操作很多对象--存储--容器(数组和StringBuffer)--数组
而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。
(2)集合和数组的区别?
A:
长度区别
数组固定
集合可变
B:
内容区别
数组可以是基本类型,也可以是引用类型
集合只能是引用类型
C:
元素内容
数组只能存储同一种类型
集合可以存储不同类型(其实集合一般存储的也是同一种类型)
(3)集合的继承体系结构?
由于需求不同,Java就提供了不同的集合类。
这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,
我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。
Collection
|--List
|--ArrayList
|--Vector
|--LinkedList
|--Set
|--HashSet
|--TreeSet
(4)Collection的功能概述(自己补齐)
A:
添加功能
B:
删除功能
C:
判断功能
D:
获取功能
E:
长度功能
F:
交集(了解)
G:
把集合转数组(了解)
(5)Collection集合的遍历
A:
把集合转数组(了解)
B:
迭代器(集合专用方式)
(6)迭代器
A:
是集合的获取元素的方式。
B:
是依赖于集合而存在的。
C:
迭代器的原理和源码。
a:
为什么定义为了一个接口而不是实现类?
b:
看了看迭代器的内部类实现。
(7)Collection集合的案例(遍历方式迭代器)
集合的操作步骤:
A:
创建集合对象
B:
创建元素对象
C:
把元素添加到集合
D:
遍历集合
A:
存储字符串并遍历
importjava.util.Collection;
importjava.util.ArrayList;
importjava.util.Iterator;
publicclassCollectionDemo{
publicstaticvoidmain(String[]args){
//创建集合对象
Collectionc=newArrayList();
//创建并添加元素
c.add("hello");
c.add("world");
c.add("java");
//遍历集合
Iteratorit=c.iterator();
while(it.hasNext()){
Strings=(String)it.next();
System.out.println(s);
}
}
}
B:
存储自定义对象并遍历
publicclassStudent{
privateStringname;
privateintage;
publicStudent(){}
publicStudent(Stringname,intage){
this.name=name;
this.age=age;
}
//getXxx()/setXxx()
}
importjava.util.Collection;
importjava.util.ArrayList;
importjava.util.Iterator;
publicclassStudentDemo{
publicstaticvoidmain(String[]args){
//创建集合对象
Collectionc=newArrayList();
//创建学生对象
Students1=newStudent("林青霞",27);
Students2=newStudent("风清扬",30);
Students3=newStudent("刘意",30);
Students4=newStudent("武鑫",25);
Students5=newStudent("刘晓曲",16);
//添加元素
c.add(s1);
c.add(s2);
c.add(s3);
c.add(s4);
c.add(s5);
//遍历集合
Iteratorit=c.iterator();
while(it.hasNext()){
Students=(Student)it.next();
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
3:
集合(List)(掌握)
(1)List是Collection的子接口
特点:
有序(存储顺序和取出顺序一致),可重复。
(2)List的特有功能:
(自己补齐)
A:
添加功能
B:
删除功能
C:
获取功能
D:
迭代器功能
E:
修改功能
(3)List集合的特有遍历功能
A:
由size()和get()结合。
B:
代码演示
//创建集合对象
Listlist=newArrayList();
//创建并添加元素
list.add("hello");
list.add("world");
list.add("java");
//遍历集合
Iteratorit=list.iterator();
while(it.hasNext()){
Strings=(String)it.next();
System.out.println(s);
}
System.out.println("----------");
for(intx=0;xStrings=(String)list.get(x);
System.out.println(s);
}
(4)列表迭代器的特有功能;(了解)
可以逆向遍历,但是要先正向遍历,所以无意义,基本不使用。
(5)并发修改异常
A:
出现的现象
迭代器遍历集合,集合修改集合元素
B:
原因
迭代器是依赖于集合的,而集合的改变迭代器并不知道。
C:
解决方案
a:
迭代器遍历,迭代器修改(ListIterator)
元素添加在刚才迭代的位置
b:
集合遍历,集合修改(size()和get())
元素添加在集合的末尾
(6)常见数据结构
A:
栈先进后出
B:
队列先进先出
C:
数组查询快,增删慢
D:
链表查询慢,增删快
(7)List的子类特点(面试题)
ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
到底使用谁呢?
看需求?
分析:
要安全吗?
要:
Vector(即使要,也不使用这个,后面再说)
不要:
ArrayList或者LinkedList
查询多;ArrayList
增删多:
LinkedList
什么都不知道,就用ArrayList。
(8)List集合的案例(遍历方式迭代器和普通for)
A:
存储字符串并遍历
B:
存储自定义对象并遍历
迭代器使用图解和原理解析
对象数组内存解析
集合继承体系
数据结构数组和链表
数据结构栈和队列
7随机获取10个1-20之间的随机数
packagecn.itcast_02;
importjava.util.ArrayList;
importjava.util.Random;
/*
*获取10个1-20之间的随机数,要求不能重复
*
*用数组实现,但是数组的长度是固定的,长度不好确定。
*所以我们使用集合实现。
*
*分析:
*A:
创建产生随机数的对象
*B:
创建一个存储随机数的集合。
*C:
定义一个统计变量。
从0开始。
*D:
判断统计遍历是否小于10
*是:
先产生一个随机数,判断该随机数在集合中是否存在。
*如果不存在:
就添加,统计变量++。
*如果存在:
就不搭理它。
*否:
不搭理它
*E:
遍历集合
*/
publicclassRandomDemo{
publicstaticvoidmain(String[]args){
//创建产生随机数的对象
Randomr=newRandom();
//创建一个存储随机数的集合。
ArrayListarray=newArrayList();
//定义一个统计变量。
从0开始。
intcount=0;
//判断统计遍历是否小于10
while(count<10){
//先产生一个随机数
intnumber=r.nextInt(20)+1;
//判断该随机数在集合中是否存在。
if(!
array.contains(number)){
//如果不存在:
就添加,统计变量++。
array.add(number);
count++;
}
}
//遍历集合
for(Integeri:
array){
System.out.println(i);
}
}
}
8键盘录入多个视频并且输出最大值
packagecn.itcast_03;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.Scanner;
/*
*键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值
*
*分析:
*A:
创建键盘录入数据对象
*B:
键盘录入多个数据,我们不知道多少个,所以用集合存储
*C:
以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了
*D:
把集合转成数组
*E:
对数组排序
*F:
获取该数组中的最大索引的值
*/
publicclassArrayListDemo{
publicstaticvoidmain(String[]args){
//创建键盘录入数据对象
Scannersc=newScanner(System.in);
//键盘录入多个数据,我们不知道多少个,所以用集合存储
ArrayListarray=newArrayList();
//以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了
while(true){
System.out.println("请输入数据:
");
intnumber=sc.nextInt();
if(number!
=0){
array.add(number);
}else{
break;
}
}
//把集合转成数组
//publicT[]toArray(T[]a)
Integer[]i=newInteger[array.size()];
//Integer[]ii=array.toArray(i);
array.toArray(i);
//System.out.println(i);
//System.out.println(ii);
//对数组排序
//publicstaticvoidsort(Object[]a)
Arrays.sort(i);
//获取该数组中的最大索引的值
System.out.println("数组是:
"+arrayToString(i)+"最大值是:
"
+i[i.length-1]);
}
publicstaticStringarrayToString(Integer[]i){
StringBuildersb=newStringBuilder();
sb.append("[");
for(intx=0;xif(x==i.length-1){
sb.append(i[x]);
}else{
sb.append(i[x]).append(",");
}
}
sb.append("]");
returnsb.toString();
}
}