黑马程序员java培训就业班笔记day16集合框架基础总结.docx
- 文档编号:17251961
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:12
- 大小:84.93KB
黑马程序员java培训就业班笔记day16集合框架基础总结.docx
《黑马程序员java培训就业班笔记day16集合框架基础总结.docx》由会员分享,可在线阅读,更多相关《黑马程序员java培训就业班笔记day16集合框架基础总结.docx(12页珍藏版)》请在冰点文库上搜索。
黑马程序员java培训就业班笔记day16集合框架基础总结
Day16
1、集合框架体系
|--由来:
数据多了可以用对象类存储,对象多了用集合来存。
|--理解:
:
咱班就是一种集合,每个人都是单独封装了功能对象,并且长度是不固定,由于每天均有人请假,77人或者76人,因此这个集合长度是可变。
|--概述:
集合是一种容器、存储对象、长度可变化。
|--什么时候使用容器:
一旦数据多了就得先把数据存储起来再操作,这样效率更好
|--和数组区别:
1、数组定义时长度是固定(必要明确元素类型和长度)集合定义时,可以不用明确长度,长度是可变。
2、数组存储是同一类型数据,集合存储是对象,而对象可以是任意类型
3、数组可以存储基本数据值,而集合只能对象。
|--集合框架构成与分类:
|--数据构造?
什么是数据构造?
有哪些体现方式?
|--每一种容器由于自身数据机构不同,进行了单独描述和对象封装,觉得这些对象有共性就进行向上抽取,形成了集合框架,
|--学习体系构造技巧:
查阅顶层内容、建立低层对象(继承体系中学)
2、Collection接口常用办法:
|--增
Add();添加一种元素
AddAll();添加一种集合,把小集合添加到大集合中
|--删
Remove();删除一种,删除会返回Boolean类型,用到equals办法判断与否相似。
如果删除成功,会变化集合长度,下面同理。
removeAll();删除一某些,按照指定集合元素来删
Clear();清空
|--判断:
Contains();包括,先遍历对象元素,用到了对象判断equals办法
isEmpty();与否为空
Size();集合元素大小或者说长度
|--取
retainAll();取交集
Iterator();取出元素
|--转变
toArray();
理解总结:
把咱们当前班级想成容器即可,班上来一种新同窗add()添加一种,来了一堆同窗addAll();添加一某些,班上出去一种remove()删除一种,出去一某些removeAll()删除一某些。
班上是不是有人isEmpty();班上有多少人Size();班上人所有都出去clear()班上与否包括张三contains();和隔壁班有无相似窗生retainAll();
|--实当代码:
publicstaticvoidmain(String[]args)
{
Collectioncoll=newArrayList();
methodDemo(coll);
}
publicstaticvoidmethodDemo(Collectioncoll)
{
//添加:
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
sop(coll);//输出集合中元素,[abc1,abc2,abc3,abc4]其实在使用集合对象toString()
集合容器变成字符串:
将集合中对象元素变成字符串,用逗号隔开,用中括号括起。
此种方式仅仅是为了演示集合和办法操作后集合中变化状况而已。
//删除一种
coll.remove("abc2");删除会返回boolean类型。
用到equals办法判断与否相似。
sop(coll.size());truesize3
总结:
删除如果成功,会变化集合长度。
//清空
coll.clear();
//判断元素与否存在
booleanb=coll.contains("abc3");先遍历对象元素,用到了对象判断equals办法。
sop(b);true
coll.isEmpty();判断与否为空。
演示带All办法addAll\removeAll\containsAll\retainAll
publicstaticvoidmethodAllDemo(Collectionc1,Collectionc2)
{
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
sop(c1);
c2.add("abc1");
c2.add("abc5");
c2.add("abc6");
sop(c2);
c1.addAll(c2);会浮现重复元素,把两个集合中所有元素都添加到当中。
booleanb=c1.containsAll(c2);c1中与否包括c集合中元素、
所有均有才算是包括,有一种没有都不行。
booleanb=c1.removeAll(c2);将c1和c2中相似元素在c1中删除。
当没有相似元素时,返回false.
booleanb=c1.retianAll(c2);true取出相似某些。
将c2和c1相似元素
保存在c1中,不同元素删除。
注意:
只要集合发生了变化就会返回真,不发生变化时返回false
当c1是c2一种子集时候就会返回false(),由于c1没有发生变化。
}
}
取出;
interator();
publicstaticvoidgetElements(Collectioncoll)
{
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
Iteratorit=coll.iterator();
while(it.hasNext())
{
sop(it.next());
//sop(it.next());不能这样取。
}
迭代器取出对象元素方式。
next办法只能浮现一次,避免问题发生,没有这个元素异常。
由于它只判断一次,但是取出两个元素话。
sop(it.hasNext());//为假,上面迭代器去完了之后就没用了。
为了优化内存此外一种写法:
由于it对象使用之后并没有指向其她任何引用,任然保存在内存中。
for(Iteratorit=coll.iterator();it.hasNext();)
{
sop(it.next());
}
开发中惯用!
/*
sop(it.next());
sop(it.next());
sop(it.next());
sop(it.next());
sop(it.next());//NoSuchElementException:
没有这个元素异常。
*/这种做法不行,体现不出专业性,以及代码复用性可言。
}
3、迭代器设计原理以及思想:
其实就Collection这种集合公共取出方式,由于每一种详细容器数据构造不同,它们取出方式也是不同样,要依照每一种容器特点来定义特定取出方式,而取出方式直接在访问容器中元素,因此将取出方式定义在容器内部,是一种内部类,而对外提供Iterator接口,这样可以通过该接口访问任意collection容器中元素,因此它浮现减少了耦合性,咱们只要面对Iterator接口,使用iterator接口即可。
4、集合使用细节:
1、直接存储基本数据类型值也是可以,由于JDK1.5后有自动装箱,会将基本数据类型转成对象,JDK1.4绝对不行。
Eg:
coll.add(3)
2、集合对象中存储其实是对象元素引用。
3、Add参数是Object类型,可以接受所有类型对象,会浮现向上转型,取出元素时类型还是Object不能使用品体对象特有内容,想要使用特有内容向下转型。
Eg:
Objectobj="obj";想要取出访问子类特有办法,向下转型,Strings=(String)it.next();sop(s.length());
5、collection框架体系:
Collection
|--list(列表):
有序(存入顺序和取出顺序一致)由于该字体系中元素有索引或者角标,因此是可以存储重复元素。
|--list子体系中特有办法:
1、增长:
voidadd(index,element)
2、删除:
Objectremove(index)
3、查找
4、修改:
set(intindex,element)返回值是当前被修改对象
5、实当代码:
Publicstaticvoidmain(String[]args)
{
Listlist=newArrayList();
methodDemo();
}
PublicstaticvoidmethodDemo(Listlist)
{
List.add("abc1");
List.add("abc2");
List.add("abc3");
List.add("abc4");
Sop(list);
//添加:
List.add(1,"abc7");//[abc1,abc7,abc2,abc3]在角标1位置往后顺延。
//删除
Objectobj=list.remove
(2);//删除指定索引上元素,依照角标删除会返回来被删对象
Sop(obj);//obj:
abc2[abc1,abc7,abc3]
//获取:
获取指定角标上元素并返回,这也是和remove区别。
Objectobj=list.get
(1);
Sop(obj);//obj:
abc1[abc1,abc7,abc3]
//获取元素索引,如果元素存在返回索引,不存在返回-1,依次还可以判断元素与否存在。
Intindex=list.indexOf("abc1");
Sop(index);//index=1
//获取指定子列表sublist(fromIndex,toindex)包括头不包括尾
List=list.sublist(1,2);//[abc1]
//修改:
Objectobj=list.set(1,"haha");
Sop(obj);//[abc1,haha,abc3]
记住:
只有list集合支持增删改查。
}
}
6、listIterator:
列表迭代器:
想要在迭代过程中进行元素增长等动作,iterator就不行了,可以使用其子接口listaIterator,并且该接口对象只有通过list集合listIterator办法获取,是List集合特有取出元素方式,它包括了增删改查办法,而iterator只有hasNext()、next()、remove()办法
实当代码:
Publicstaticvoidmain(String[]args)
{
Listlist=newArrayList();
List.add("abc1");
List.add("abc2");
List.add("abc3");
List.add("abc4");
ListIteratorit=list.listIterator();
While(it.hasNext())
{
Objectobj=it.next();
If("abc2".equals(obj))
{
It.add("abc01");//添加元素
It.set("hehe");//修改元素
}
Else
{
Sop(obj);
}
}
}
Sop(it.hasNext());//false;
与iterator区别:
实当代码:
Iteratorit=list.iterator();//迭代器是集合功能,懂得集合中有多少元素。
While(it.hasNext())
{
Objectobj=it.next();
//ConcurrentModificationException
多线程导致,不能再同步遍历时候进行删除,因素是迭代过程中,又使用集合对象对元素进行了操作导致了并发修改异常发生,怎么去解决?
迭代器删除方式
If("abc2".equals(obj))
{
List.remove(obj);
It.remove();用迭代器自身办法。
}
Else
{
Sop(obj);
}
}
|--set:
还没有学到!
6、list体系构造:
|--ArrayList:
低层数据构造是数组,不同步,有别于vector,代替了它,也是可延长数组,百分之五十,提高了空间效率。
查询不久,增删很慢。
|--LinkedList:
低层数据构造是链表数据构造,查询速度慢,增删比较快,元素也是有角标,觉得内其父类list均有角标。
|--Vector:
低层数据构造是数组构造,超过长度就会创立一种新数组,长度为前数组一倍,对其进行重新赋值。
同步安全但是效率低。
|--特有办法:
Enumeration:
枚举:
支持枚举接口,但是该接口由于名称过长,被Iterator取代。
实当代码:
Publicstativoidmain(String[]arsg)
{
Vectorv=newVector();
v.addElement("abc1");
v.addElement("abc2");
v.addElement("abc3");
v.addElement("abc4");
Enumerationen=v.elements();
While(en.hasNext())
{
Sop(en.nextElement());
}
}
注意:
此接口和iteration接口功能是重复。
Arrrylist和linkedlist内存分析比较:
总结:
当增删操作较多时用linkedlist。
当查询较多时候用ArrayList,自有增删有查询还是Arraylist,由于背面还是查询使用较多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 黑马 程序员 java 培训 就业 笔记 day16 集合 框架 基础 总结
![提示](https://static.bingdoc.com/images/bang_tan.gif)