版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计第7章常用实用类目录2
7.1常用工具类
7.2Java集合容器
7.3List接口
7.4Set接口
7.5Map接口7.1.1String类字符串常量使用双引号""定义字符串,使用单引号''定义字符。字符串几乎可以任意长(从0至231,约20亿)。字符串类String类StringBuffer类37.1.1String类String类的声明和初始化声明字符串变量初始化字符串直接赋值,例如:使用构造方法,例如:String类实例的值为空和空串是不同的:4 str="abc"; //直接赋值 Stringstr2=newString(); //创建长度为0的字符串 Stringstr5=null; //str5的值为空(也是默认值),它没有值 intlen=str5.length();//没有长度,因此运行时出现异常 Stringstr6=""; //str6的值为空串,它有值,只是长度为0 len=str6.length(); //长度为0String类的常用方法字符串的长度String类的length()方法返回字符串的长度Stringstr="你好,Java!";intlen=str.length();//长度为8(其中3个汉字或中文标点,5个字母符号)System.out.println("字符串的长度为:"+len);字符串的比较必须使用equals()方法而不是==号来比较字符串的值Stringstr1="Java";//如果内存中没有"Java"常量,则创建它Stringstr2="Java";//内存中已有"Java"常量,所以str2指向它Stringstr3=newString("Java");//新创建一个值为"Java"的常量Stringstr4=newString("Java");//新创建一个值为"Java"的常量booleanb1=str1==str2;//true,str1和str2指向同一个字符常量booleanb2=str2==str3;//false,str2和str3指向不同的字符常量booleanb3=str3==str4;//false,str3和str4指向不同的字符常量booleanb=str1.equals(“str2");//true5String类的常用方法字符串的比较String类的compareTo()方法和compareToIgnoreCase()方法比较字符串的大小,它返回一个int型的整数,表示两个字符串在某个字符处的Unicode码的差值。Strings1="123a";Strings2="123A";Strings3="123B";intresult1=pareTo(s2); //32,即'a'-'A'的值intresult2=pareToIgnoreCase(s3);//-1,转换为小写后,'a'-'b'的值6String类的常用方法字符串的连接String类的concat()方法将指定字符串联到此字符串的末尾。用“+”也可以达到同样的目的,而且更为常用。Stringstr="Java";Strings1=str.concat("programming.");Strings2=str+"programming."; //与concat()等价String类的常用方法(续)字符串的检索字符串的子串字符串的替换字符串转换大小写8
Stringstr="MyEclipse.exe";Strings1=str.toUpperCase();//MYECLIPSE.EXEStrings2=str.toLowerCase();//myeclipse.exe
Stringstr="Javaprogramming.";
Strings2=str.replace("pro","Pro");//JavaProgramming.
Stringstr="MyEclipse.exe";
Strings2=str.substring(2,9);//Eclipse
Strings1="这是Java程序。";charc2=s1.charAt(7);//序【例7.1】String类的使用示例。public
classStringDemo{public
static
voidmain(String[]args){Stringstr="你好,Java!";int
len=str.length();//长度为8System.out.println("字符串的长度为:"
+len);str
="Java";boolean
b1=str.equals("java");//大小写敏感时为falseboolean
b2=str.equalsIgnoreCase("java");//大小写不敏感时为trueboolean
b3="java".equals("java");//trueSystem.out.println("Java和java是否相等"
+b1);System.out.println("大小写不敏感时Java和java是否相等"
+b2);System.out.println("java和java是否相等"
+b3);Strings1="123a";Strings2="123A";Strings3="123B";int
result1=s1.compareTo(s2);//32,即'a'-'A'的值int
result2=s1.compareToIgnoreCase(s3);//'a'-'b'的值为-1System.out.println("123a与123A比较:"
+result1);System.out.println("忽略大小写时123a与123B比较:"
+result2);
}}9String类的特殊性所有引用数据类型都必须使用new操作符创建,而字符串类型还能通过直接赋值创建。字符串常量是一个对象,因此可以调用字符串常量的方法,如"Java!".length()。字符串类型属于引用数据类型,但在方法调用时,采用的是传值调用。字符串类型可以用加号“+”运算符,将字符串类的对象与其它各种类型(基本或引用数据类型)的对象连接。字符串类型可以用赋值运算符“=”和“+=”进行赋值。字符串的值本身是常量,是不可变的。107.1.2StringBuffer类字符串StringBuffer类(缓冲型字符串类)可变长的和可写的字符序列其中除字符序列之外还含有预留空间直接在字符序列上进行追加、插入或删除操作StringBuffer构造方法(只能使用构造方法创建)11
StringBuffersb1=newStringBuffer();//长度为0,容量为16(默认值)StringBuffersb2=newStringBuffer(50);//长度为0,容量为50StringBuffersb3=newStringBuffer("Java");//长度为4,容量为20(=4+16)长度与缓冲区容量长度String类和StringBuffer类都有length()方法缓冲区容量(仅StringBuffer类)方法capacity()返回StringBuffer实例的缓冲区容量。方法ensureCapacity()确保容量至少等于指定的最小值。新缓冲区容量取下述二者的较大值:参数minCapacity的值。原有容量的两倍加2。12
StringBuffersb1=newStringBuffer();//长度为0,容量为16StringBuffersb2=newStringBuffer(50);//长度为0,容量为50StringBuffersb3=newStringBuffer("Java");//长度为4,容量为16+4=20
sb1.ensureCapacity(60);//长度0,容量60,因为16*2+2=34<60sb2.ensureCapacity(60);//长度0,容量102,因为50*2+2=102>60sb3.append("12345678901234567890");//长度4+20=24,容量=2*20+2=42StringBuffer类的比较无法比较StringBuffer类的值不能用==也不能用equals()方法只能将它们转换为String类,然后进行比较13
StringBuffersb1=newStringBuffer("Java");StringBuffersb2=newStringBuffer("Java");booleanb1=sb1==sb2;//false,不能用==booleanb2=sb1.equals(sb2);//false,也不能用equals()booleanb3=sb1.toString().equals(sb2.toString());//true7.1.2StringBuffer类14String类和StringBuffer类的比较String类在内存中的表现字符串的值本身是常量,是不可变的,例如:15
Strings2="abc";
//指向已有的字符串值System.out.println(s1==s2);//返回true
Strings1="abc";//在SLP中创建"abc"
Strings1="abc";//在SLP中创建
s1=s1+"123";//在SLP中创建"abc123"值“abc”是不变的值“abc”不再被使用时,将被垃圾回收机制回收比较(二)StringBuffer类在内存中的表现16 StringBuffersb1=newStringBuffer("abc"); sb1.append("123");在缓冲内添加,因此值“abc”可被修改比较(三)String类和StringBuffer类的互换String转换为StringBuffer:StringBuffer转换为String:适用的场合String类使用方便,效率低,用于一般场合StringBuffer类使用不方便,但效率高,用于大量的字符处理,如循环中17
StringBuffersb=newStringBuffer("Java");Strings=sb.toString();
Strings="abc";StringBuffersb=newStringBuffer(s);【例7.2】StringBuffer类的使用示例。public
classStringBufferDemo{public
static
voidmain(String[]args){StringBufferbuffer=newStringBuffer("Hello,");buffer.append("Java!").append("欢迎!");System.out.println(buffer);//删除索引为5的标点符号buffer.deleteCharAt(5);System.out.println(buffer);//在索引为5的位置上插入“你好”buffer.insert(5,"你好");System.out.println(buffer);//将buffer的内容反转buffer.reverse();System.out.println(buffer);}}187.2Java集合容器集合容器类共分为两类:集合(Collection):一个集合就是存储一组对象的容器。Set(集):集合中的对象(也称为元素element)没有次序之分,且没有重复对象。List(列表):集合中的对象按照索引位置排序,可以有重复对象,可以按索引位置检索对象。映射(Map):集合中的每个对象都由一个特殊的“键-值”对组成。键对象不能重复,值对象可以重复。197.2Java集合容器207.3Collection接口21【例7.3】Collection接口示例。public
classCollectionDemo{public
static
voidmain(String[]args){//创建集合对象Collectioncollection=newArrayList();//添加集合中的元素collection.add("Hi");collection.add(123);System.out.println("集合中元素个数为:"
+collection.size());//判断是否包含字符串Hiboolean
isContains=collection.contains("Hi");System.out.println("是否包含Hi:"+isContains);//判断集合是否为空boolean
isEmpty=collection.isEmpty();System.out.println("集合是否为空:"
+isEmpty);//移除元素后,现有元素个数collection.remove("Hi");System.out.println("移除Hi后元素个数为:"
+collection.size());//清空操作collection.clear();System.out.println("清空操作后元素个数:"
+collection.size());}}227.3.1Iterator接口遍历集合中的所有元素:Iterator迭代器booleanhasNext():判断是否存在另一个可以访问的元素Objectnext():返回下一个可以访问的元素。通常与hasNext()方法结合使用,以免产生异常。Iteratoriterator=collection.iterator(); //遍历集合中的所有元素 while(iterator.hasNext()){ Objectobj=iterator.next(); System.out.println(obj); }23【例7.4】Iterator示例。public
classIteratorDemo{public
static
voidmain(String[]args){//创建集合对象Collectioncollection=newArrayList();//添加集合中的元素collection.add("Hi");collection.add(123);//获得一个迭代器对象Iteratoriterator=collection.iterator();//遍历集合中的所有元素while(iterator.hasNext()){Objectobj=iterator.next();System.out.println(obj);}}}247.3.2foreach循环foreach增加型for循环,用于遍历数组或集合中的元素for(容器中的对象类型临时变量名:容器变量){
执行语句}//用foreach遍历集合中的所有元素 for(Object
obj:collection){ System.out.println(obj); }25【例7.5】增强型for示例。public
classForeachDemo{public
static
voidmain(String[]args){//创建集合对象Collectioncollection=newArrayList();collection.add("Hi");collection.add(123);//用foreach遍历集合中的所有元素for(Objectobj:collection){System.out.println(obj);}}}267.3List接口【例7.6】ArrayList示例。public
classArrayListDemo{public
static
voidmain(String[]args){//创建ArrayList对象listListlist=newArrayList();//将指定元素添加到列表尾部list.add("小王");list.add("小张");list.add("小李");list.add("小陈");list.add("小赵");//获取容器中元素的个数System.out.println("集合中元素个数是:"
+list.size());//遍历表中的所有元素Iteratorit=list.iterator();while
(it.hasNext()){Objectobj=it.next();System.out.print(obj
+"");}System.out.println();28【例7.6】ArrayList示例。29//在指定位置2插入重复元素“小陈”list.add(2,"小陈");//显示指定位置2的元素System.out.println("指定位置2的元素是:"
+list.get(2));//将位置5改为“小赵2”list.set(5,"小赵2");//遍历方法2System.out.println("添加修改后,列表中的元素有:");for(int
i=0;i<list.size();i++){System.out.print(list.get(i)+"");}System.out.println();//返回“小陈”首次出现的位置System.out.println("小陈首次出现的位置"
+list.indexOf("小陈"));//返回“小陈”最后出现的位置System.out.println("小陈最后出现的位置"
+list.lastIndexOf("小陈"));【例7.6】ArrayList示例。//移除指定位置2的元素,并将移除元素输出Objectobj=list.remove(2);System.out.println("移除元素是:"
+obj);//移除指定元素“小赵2”boolean
b=list.remove("小赵2");System.out.println(b);//将列表转换成数组,并用数组展示System.out.println("移除元素后,列表中的元素有:");Object[]arr=list.toArray();for(int
i=0;i<arr.length;i++){System.out.print(arr[i]+"");}System.out.println();//清空列表元素,并输出元素个数list.clear();System.out.println("列表清空后的元素个数是:"
+list.size());}}30【例7.7】LinkedList类示例。使用LinkedList模拟栈结构。public
classMyStack{//创建LinkedList对象LinkedListlinkedList=newLinkedList();//入栈public
voidpush(Objecto){linkedList.addFirst(o);}//出栈publicObjectpop(){return
linkedList.removeFirst();}//获取栈顶元素publicObjectpeek(){return
linkedList.getFirst();}//栈是否为空public
booleanempty(){return
linkedList.isEmpty();}}【例7.7】LinkedList类示例。使用LinkedList模拟栈结构。public
classTestMyStack{public
static
voidmain(String[]args){//定义栈MyStackstack=newMyStack();//入栈插入三个元素stack.push("小王");stack.push("小张");stack.push("小李");//出栈System.out.println("出栈元素:"
+stack.pop());//显示栈顶元素System.out.println("栈顶元素:"
+stack.peek());//出栈System.out.println("出栈元素:"
+stack.pop());//判断栈是否为空System.out.println(stack.empty());}}7.4Set接口
33【例7.8】HashSet示例。public
classSetDemo{public
static
voidmain(String[]args){Setset=newHashSet();set.add("李明");set.add("刘丽");System.out.println("set中的元素有:");Iteratorit=set.iterator();while(it.hasNext()){Objectobj=it.next();System.out.println(obj);}Set.add("刘丽");//添加相同的元素set.add(123);System.out.println("加入两个元素后,set中有:");it=set.iterator();while(it.hasNext()){Objectobj=it.next();System.out.println(obj);}}}34【例7.9】TreeSet类示例。public
classCustomerimplementsComparable{privateStringname;private
int
age;//此处省略getters()、setters()方法和构造方法@Overridepublic
intcompareTo(Objectarg0){Customerother=(Customer)arg0;if(this.getName().compareTo(other.getName())>0){return1;}else
if(this.getName().compareTo(other.getName())<0){return-1;}else{if(this.age>other.age){return1;}else
if(this.age<other.age){return-1;}else{return0;}}}【例7.9】TreeSet类示例。public
classTreeSetTest2{public
static
voidmain(String[]args){//定义一个TreeSet对象Setset=newTreeSet();Customerc1=newCustomer("zs",18);Customerc2=newCustomer("zs",21);Customerc3=newCustomer("ls",19);Customerc4=newCustomer("ls",19);//在TreeSet中添加元素set.add(c1);set.add(c2);set.add(c3);//遍历集合Iteratorit=set.iterator();while(it.hasNext()){Customerb=(Customer)it.next();System.out.println(b.getName()+"\t"+b.getAge());}}}7.6Map接口Map是一种将键对象与值对象进行关联的容器。常用的实现:HashMapTreeMapLinkedHashMap例:Mapmap=newHashMap();提供三种Collection视图SetkeySet()——键集Collectionvalues()——值集SetentrySet()——键-值对集377.6Map接口38【例7.10】HashMap示例。public
classStudent{privateStringno;privateStringname;private
int
age;privateStringaddress;//getters、setters方法和构造方法@OverridepublicStringtoString(){return
"学生学号:"
+this.getNo()+"\t"
+"学生姓名:"
+this.getName()+"\t"
+"学生年龄:"
+this.getAge()+"\t"+"学生地址:"
+this.getAddress();}}39【例7.10】HashMap示例。public
classHashMapTest{public
static
voidmain(String[]args){//定义HashMapMapmap=newHashMap();//定义三个学生对象Studentstu1=newStudent("1001","张明",20,"江苏徐州");Studentstu2=newStudent("1002","孙旭",19,"江苏无锡");Studentstu3=newStudent("1003","李东",21,"江苏南京");//以学号为键,学生完整信息为值,保存到map中map.put(stu1.getNo(),stu1);map.put(stu2.getNo(),stu2);map.put(stu3.getNo(),stu3);//containsKey:如果此映射包含指定键的映射关系,则返回trueboolean
isContainsKey=map.containsKey(stu1.getNo());System.out.println("是否包含1001号学生:"
+isContainsKey);//containsValue:如果此映射包含指定值,则返回trueboolean
isContainsValue=map.containsValue(stu2);System.out.println("是否包含1002号学生:"
+isContainsValue);【例7.10】HashMap示例。//获得指定学号1001的值Studentstu=(Student)map.get("1001");if(stu!=null){System.out.println(stu.getNo()+"\t"+stu.getName());}//entrySet():返回此映射所包含的映射关系的Set视图SetentrySet=map.entrySet();Iteratorit=entrySet.iterator();while(it.hasNext()){System.out.println(it.next());}//keySet():返回此映射所包含的键的Set视图SetkeySet=map.keySet();it=keySet.iterator();while(it.hasNext()){System.out.println(it.next());}【例7.10】HashMap示例。//遍历values()CollectionstuValues=map.values();it=stuValues.iterator();while(it.hasNext()){Students=(Student)it.next();System.out.println(s);}//移除System.out.println("删除前的map.size="+map.size());map.remove(stu2.getNo());System.out.println("删除后的map.size="+map.size());//清空System.out.println("清空前的map.size="+map.size());map.clear();System.out.println("清空后的map.size="+map.size());}}【例7.11】TreeMap示例。public
classStudentComparatorimplementsComparator<Student>{@Overridepublic
intcompare(Studentstu1,Studentstu2){if(stu1.getAge()>stu2.getAge()){return1;}else
if(stu1.getAge()<stu2.getAge()){return-1;}else{return0;}}}【例7.11】TreeMap示例。public
classTreeMapTest{public
static
voidmain(String[]args){//定义TreeMapMapmap=newTreeMap(newStudentComparator());//定义三个学
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年秋季开学高中脱帽与戴帽训练课件
- 高考专业与职业规划匹配指南优化研究
- 气候风险环境下供应链韧性提升的战略规划研究
- 文理交叉背景下潜力学科选择指导研究
- 制造业供应链中断事件应对机制与快速恢复能力构建案例研究
- 制造业成本动态精细化管理与利润空间优化路径
- 2026 年护理带教课前评估方法实操分享
- 10万件陶瓷车间改造项目可行性研究报告模板-申批备案
- 2026年农业AIoT实践 温室气象站构建参数调控新范式
- 新人教版一年级数学上册《看图列式计算》专项练习题(含答案)
- 2026版《医师外出会诊管理暂行规定》课件
- 影像医学技术操作规程大全
- 2026年河南高考地理考试试卷及答案
- 2026年综合评标专家库专家考试(法律法规)试题及解析(浙江浙江)
- 中国老年抗中性粒细胞胞浆抗体相关肾小球肾炎治疗指南总结2026
- 2026版中华人民共和国生态环境法典深度解析课件
- 供水管网有限空间方案
- 2026年事业单位宣传岗招聘考试题及答案
- 水库沉降观测技术方案
- AI在数字孪生中的应用:技术融合与产业赋能
- 旅游投诉处理流程
评论
0/150
提交评论