java集合深入研究.docx
- 文档编号:29853139
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:18
- 大小:19.48KB
java集合深入研究.docx
《java集合深入研究.docx》由会员分享,可在线阅读,更多相关《java集合深入研究.docx(18页珍藏版)》请在冰豆网上搜索。
java集合深入研究
1集合的由来
packagecn.itcast_01;
importjava.util.ArrayList;
importjava.util.Collection;
/*
*集合的由来:
*我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。
*而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,有哪些是容器类型的呢?
*数组和StringBuffer。
但是呢?
StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。
*而对象数组又不能适应变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,Java就提供了集合类供我们使用。
*
*数组和集合的区别?
*A:
长度区别
*数组的长度固定
*集合长度可变
*B:
内容不同
*数组存储的是同一种类型的元素
*而集合可以存储不同类型的元素
*C:
元素的数据类型问题
*数组可以存储基本数据类型,也可以存储引用数据类型
*集合只能存储引用类型
*
*刚说过集合是存储多个元的,但是呢,存储多个元素我们也是有不同需求的:
比如说,我要这多个元素中不能有相同的元素,
*再比如说,我要这多个元素按照某种规则排序一下。
针对不同的需求,Java就提供了不同的集合类,这样呢,Java就提供了很多个集合类。
*这多个集合类的数据结构不同,结构不同不重要的,重要的是你要能够存储东西,并且还要能够使用这些东西,比如说判断,获取等。
*既然这样,那么,这多个集合类是有共性的内容的,我们把这些集合类的共性内容不断的向上提取,最终就能形成集合的继承体系结构。
*
*数据结构:
数据的存储方式。
*
*Collection:
是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。
(后面会慢慢的讲解)
*
*Collection的功能概述:
*1:
添加功能
*booleanadd(Objectobj):
添加一个元素
*booleanaddAll(Collectionc):
添加一个集合的元素
*2:
删除功能
*voidclear():
移除所有元素
*booleanremove(Objecto):
移除一个元素
*booleanremoveAll(Collectionc):
移除一个集合的元素(是一个还是所有)
*3:
判断功能
*booleancontains(Objecto):
判断集合中是否包含指定的元素
*booleancontainsAll(Collectionc):
判断集合中是否包含指定的集合元素(是一个还是所有)
*booleanisEmpty():
判断集合是否为空
*4:
获取功能
*Iterator
*5:
长度功能
*intsize():
元素的个数
*面试题:
数组有没有length()方法呢?
字符串有没有length()方法呢?
集合有没有length()方法呢?
*6:
交集功能
*booleanretainAll(Collectionc):
两个集合都有的元素?
思考元素去哪了,返回的boolean又是什么意思呢?
*7:
把集合转换为数组
*Object[]toArray()
*/
publicclassCollectionDemo{
publicstaticvoidmain(String[]args){
//测试不带All的方法
//创建集合对象
//Collectionc=newCollection();//错误,因为接口不能实例化
Collectionc=newArrayList();
//booleanadd(Objectobj):
添加一个元素
//System.out.println("add:
"+c.add("hello"));
c.add("hello");
c.add("world");
c.add("java");
//voidclear():
移除所有元素
//c.clear();
//booleanremove(Objecto):
移除一个元素
//System.out.println("remove:
"+c.remove("hello"));
//System.out.println("remove:
"+c.remove("javaee"));
//booleancontains(Objecto):
判断集合中是否包含指定的元素
//System.out.println("contains:
"+c.contains("hello"));
//System.out.println("contains:
"+c.contains("android"));
//booleanisEmpty():
判断集合是否为空
//System.out.println("isEmpty:
"+c.isEmpty());
//intsize():
元素的个数
System.out.println("size:
"+c.size());
System.out.println("c:
"+c);
}
}
2创建集合
packagecn.itcast_01;
importjava.util.ArrayList;
importjava.util.Collection;
/*
*booleanaddAll(Collectionc):
添加一个集合的元素
*booleanremoveAll(Collectionc):
移除一个集合的元素(是一个还是所有)
*booleancontainsAll(Collectionc):
判断集合中是否包含指定的集合元素(是一个还是所有)
*booleanretainAll(Collectionc):
两个集合都有的元素?
思考元素去哪了,返回的boolean又是什么意思呢?
*/
publicclassCollectionDemo2{
publicstaticvoidmain(String[]args){
//创建集合1
Collectionc1=newArrayList();
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
//创建集合2
Collectionc2=newArrayList();
//c2.add("abc1");
//c2.add("abc2");
//c2.add("abc3");
//c2.add("abc4");
c2.add("abc5");
c2.add("abc6");
c2.add("abc7");
//booleanaddAll(Collectionc):
添加一个集合的元素
//System.out.println("addAll:
"+c1.addAll(c2));
//booleanremoveAll(Collectionc):
移除一个集合的元素(是一个还是所有)
//只要有一个元素被移除了,就返回true。
//System.out.println("removeAll:
"+c1.removeAll(c2));
//booleancontainsAll(Collectionc):
判断集合中是否包含指定的集合元素(是一个还是所有)
//只有包含所有的元素,才叫包含
//System.out.println("containsAll:
"+c1.containsAll(c2));
//booleanretainAll(Collectionc):
两个集合都有的元素?
思考元素去哪了,返回的boolean又是什么意思呢?
//假设有两个集合A,B。
//A对B做交集,最终的结果保存在A中,B不变。
//返回值表示的是A是否发生过改变。
System.out.println("retainAll:
"+c1.retainAll(c2));
System.out.println("c1:
"+c1);
System.out.println("c2:
"+c2);
}
}
3集合遍历
packagecn.itcast_01;
importjava.util.ArrayList;
importjava.util.Collection;
/*
*集合的遍历。
其实就是依次获取集合中的每一个元素。
*
*Object[]toArray():
把集合转成数组,可以实现集合的遍历
*/
publicclassCollectionDemo3{
publicstaticvoidmain(String[]args){
//创建集合对象
Collectionc=newArrayList();
//添加元素
c.add("hello");//Objectobj="hello";向上转型
c.add("world");
c.add("java");
//遍历
//Object[]toArray():
把集合转成数组,可以实现集合的遍历
Object[]objs=c.toArray();
for(intx=0;x //System.out.println(objs[x]); //我知道元素是字符串,我在获取到元素的的同时,还想知道元素的长度。 //System.out.println(objs[x]+"---"+objs[x].length()); //上面的实现不了,原因是Object中没有length()方法 //我们要想使用字符串的方法,就必须把元素还原成字符串 //向下转型 Strings=(String)objs[x]; System.out.println(s+"---"+s.length()); } } } 4集合存储学生案例 Student.java packagecn.itcast_02; publicclassStudent{ //成员变量 privateStringname; privateintage; //构造方法 publicStudent(){ super(); } publicStudent(Stringname,intage){ super(); this.name=name; this.age=age; } //成员方法 //getXxx()/setXxx() publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } } StudentDemo.java packagecn.itcast_02; importjava.util.ArrayList; importjava.util.Collection; /* *练习: 用集合存储5个学生对象,并把学生对象进行遍历。 * *分析: *A: 创建学生类 *B: 创建集合对象 *C: 创建学生对象 *D: 把学生添加到集合 *E: 把集合转成数组 *F: 遍历数组 */ publicclassStudentDemo{ publicstaticvoidmain(String[]args){ //创建集合对象 Collectionc=newArrayList(); //创建学生对象 Students1=newStudent("林青霞",27); Students2=newStudent("风清扬",30); Students3=newStudent("令狐冲",33); Students4=newStudent("武鑫",25); Students5=newStudent("刘晓曲",22); //把学生添加到集合 c.add(s1); c.add(s2); c.add(s3); c.add(s4); c.add(s5); //把集合转成数组 Object[]objs=c.toArray(); //遍历数组 for(intx=0;x //System.out.println(objs[x]); Students=(Student)objs[x]; System.out.println(s.getName()+"---"+s.getAge()); } } } 5迭代器 packagecn.itcast_03; importjava.util.ArrayList; importjava.util.Collection; importjava.util.Iterator; /* *Iteratoriterator(): 迭代器,集合的专用遍历方式 *Objectnext(): 获取元素,并移动到下一个位置。 *NoSuchElementException: 没有这样的元素,因为你已经找到最后了。 *booleanhasNext(): 如果仍有元素可以迭代,则返回true。 ( */ publicclassIteratorDemo{ publicstaticvoidmain(String[]args){ //创建集合对象 Collectionc=newArrayList(); //创建并添加元素 //Strings="hello"; //c.add(s); c.add("hello"); c.add("world"); c.add("java"); //Iteratoriterator(): 迭代器,集合的专用遍历方式 Iteratorit=c.iterator();//实际返回的肯定是子类对象,这里是多态 //Objectobj=it.next(); //System.out.println(obj); //System.out.println(it.next()); //System.out.println(it.next()); //System.out.println(it.next()); //System.out.println(it.next()); //最后一个不应该写,所以,我们应该在每次获取前,如果有一个判断就好了 //判断是否有下一个元素,有就获取,没有就不搭理它 //if(it.hasNext()){ //System.out.println(it.next()); //} //if(it.hasNext()){ //System.out.println(it.next()); //} //if(it.hasNext()){ //System.out.println(it.next()); //} //if(it.hasNext()){ //System.out.println(it.next()); //} //if(it.hasNext()){ //System.out.println(it.next()); //} //最终版代码 while(it.hasNext()){ //System.out.println(it.next()); Strings=(String)it.next(); System.out.println(s); } } } 6迭代器遍历 packagecn.itcast_03; importjava.util.ArrayList; importjava.util.Collection; importjava.util.Iterator; /* *练习: 用集合存储5个学生对象,并把学生对象进行遍历。 用迭代器遍历。 * *注意: *A: 自己的类名不要和我们学习的要使用的API中的类名相同。 *B: 复制代码的时候,很容易把那个类所在的包也导入过来,容易出现不能理解的问题。 */ publicclassIteratorTest{ publicstaticvoidmain(String[]args){ //创建集合对象 Collectionc=newArrayList(); //创建学生对象 Students1=newStudent("林青霞",27); Students2=newStudent("风清扬",30); Students3=newStudent("令狐冲",33); Students4=newStudent("武鑫",25); Students5=newStudent("刘晓曲",22); //把学生添加到集合中 c.add(s1); c.add(s2); c.add(s3); c.add(s4); c.add(s5); //遍历 Iteratorit=c.iterator(); while(it.hasNext()){ //System.out.println(it.next()); Students=(Student)it.next(); System.out.println(s.getName()+"---"+s.getAge()); } } } 7创建学生集合 packagecn.itcast_03; importjava.util.ArrayList; importjava.util.Collection; importjava.util.Iterator; /* *问题1: 能用while循环写这个程序,我能不能用for循环呢? *问题2: 不要多次使用it.next()方法,因为每次使用都是访问一个对象。 */ publicclassIteratorTest2{ publicstaticvoidmain(String[]args){ //创建集合对象 Collectionc=newArrayList(); //创建学生对象 Students1=newStudent("林青霞",27); Students2=newStudent("风清扬",30); Students3=newStudent("令狐冲",33); Students4=newStudent("武鑫",25); Students5=newStudent("刘晓曲",22); //把学生添加到集合中 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()); //NoSuchElementException不要多次使用it.next()方法 //System.out.println(((Student)it.next()).getName()+"---" //+((Student)it.next()).getAge()); } //System.out.println("----------------------------------"); //for循环改写 //for(Iteratorit=c.iterator();it.hasNext();){ //Students=(Student)it.next(); //System.out.println(s.getName()+"---"+s.getAge()); //} } } 8创建学生类 packagecn.itcast_03; publicclassStudent{ //成员变量 privateStringname; privateintage; //构造方法 publicStudent(){ super(); } publicStudent(Stringname,intage){ super(); this.name=name; this.age=age; } //成员方法 //getXxx()/setXxx() publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ th
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 集合 深入 研究
