API基础第3天:
回顾:
- StringBuilder:用于频繁修改字符串
- StringBuilder的常用方法:
- append():追加内容
- delete():删除部分内容
- replace():替换部分内容
- insert():插入内容
- 正则表达式:用于描述字符串内容格式,匹配字符串是否符合格式要求
- String支持的正则表达式的方法:
- matches():匹配
- replaceAll():替换
- split():拆分
- Object:
- 是所有类的鼻祖,所有类都直接或间接继承了Object,万物皆对象,为了多态
- Object中有两个经常被派生类重写的方法:toString()和equals()
- 输出引用类型变量时会默认调用Object类的toString(),返回格式为:类的全称@hashcode,没有参考意义,所以常常重写toString()返回具体的属性值
- 调用Object类的equals()时,默认还是比较==(即比较地址),没有参考意义,所以常常重写equals()来比较具体的属性值
精华笔记:
-
包装类:
- java定义了8个包装类,目的就是为了解决基本数据类型不能直接参与面向对象开发的问题,使基本类型可以通过包装类的形式存在。
- 包括:Integer、Character、Byte、Short、Long、Float、Double、Boolean,其中Character和Boolean是直接继承自Object的,其余6个包装类继承自Number类。
- JDK1.5推出了一个新特性:自动拆装箱。当编译器编译时若发现是基本类型与包装类型之间相互赋值,则自动补齐代码完成转换工作,这个过程称为自动拆装箱。
-
什么是集合:
- 集合和数组一样,都可以保存一组数据,并且提供了操作集合元素的相关方法,使用更方便。
-
集合框架中的相关接口:
- java.util.Collection接口:是所有集合的顶级接口,封装了所有集合所共有的方法,下面有很多实现类,使得我们可以有更多的数据结构来选择。
- Collection接口下面有两个常用的子接口:-------------------明天详细介绍(先记住)
- java.util.List:线性表,是可重复集合,并且有序
- java.util.Set:不可重复集合,大部分实现类都是无序的
-
Collection常用方法:
- add():向集合中添加一个元素,添加成功则返回true
- size():获取当前集合的元素个数
- isEmpty():判断当前集合是否为空集,当size()为0时返回true
- clear():清空集合
- contains():判断当前集合中是否包含给定元素
- remove():从当前集合中删除元素,若删除成功则返回true
- addAll():将参数指定集合中的元素添加到当前集合中,添加后当前集合发生改变则返回true
- containsAll():判断当前集合中是否包含参数集合中的所有元素
- retainAll():取交集
- removeAll():删交集
-
集合的遍历:
- Collection接口提供了统一的遍历集合的方式:迭代器模式。通过iterator()方法可以获取一个用于遍历集合元素的迭代器(Iterator接口)。
- Iterator接口中定义了迭代器遍历集合的相关操作。不同的集合都实现了用于遍历自身集合的迭代器实现类,但是我们无需记住它们的名字,从多态的角度把它们看成Iterator即可。
- 迭代器遍历集合遵循的步骤为:问(hasNext())、取(next())、删(remove()),但删并不是必要操作
-
增强for循环/新循环:
-
JDK1.5时推出了一个特性:增强型for循环,也称为新循环,让我们使用相同的语法遍历数组和集合。
-
语法:
for(元素类型 变量名 : 数组或集合){ 循环体----注意:变量名已经就是具体的元素了 }
-
笔记:
-
包装类:
-
java定义了8个包装类,目的就是为了解决基本数据类型不能直接参与面向对象开发的问题,使基本类型可以通过包装类的形式存在。
-
包括:Integer、Character、Byte、Short、Long、Float、Double、Boolean,其中Character和Boolean是直接继承自Object的,其余6个包装类继承自Number类。
-
JDK1.5推出了一个新特性:自动拆装箱。当编译器编译时若发现是基本类型与包装类型之间相互赋值,则自动补齐代码完成转换工作,这个过程称为自动拆装箱。
public class IntegerDemo { public static void main(String[] args) { //演示包装类的常用操作: //1)可以通过包装类来获取基本类型的取值范围: int max = Integer.MAX_VALUE; int min = Integer.MIN_VALUE; System.out.println("int的最大值为:"+max+",最小值为:"+min); long max1 = Long.MAX_VALUE; long min1 = Long.MIN_VALUE; System.out.println("long的最大值为:"+max1+",最小值为:"+min1); //2)包装类可以将字符串类型转换为对应的基本类型----必须熟练掌握 String s1 = "38"; int age = Integer.parseInt(s1); //将字符串s1转换为int类型并赋值给age System.out.println(age); //38---int类型 String s2 = "123.456"; double price = Double.parseDouble(s2); System.out.println(price); //123.456---double类型 /* //触发了自动装箱,会被编译为: Integer i = Integer.valueOf(5); Integer i = 5; //基本类型到包装类型----装箱 //触发了自动拆箱,会被编译为: int j = i.intValue(); int j = i; //包装类型到基本类型----拆箱 */ /* Integer i1 = new Integer(5); Integer i2 = new Integer(5); System.out.println(i1==i2); //false,因为==比较的是地址 System.out.println(i1.equals(i2)); //true,Integer类重写了equals()方法 //Integer.valueOf()会复用-128到127范围内的数据---使用valueOf()更多一些 Integer i3 = Integer.valueOf(5); Integer i4 = Integer.valueOf(5); System.out.println(i3==i4); //true System.out.println(i3.equals(i4)); //true,Integer类重写了equals()方法 */ } }
-
-
什么是集合:
- 集合和数组一样,都可以保存一组数据,并且提供了操作集合元素的相关方法,使用更方便。
-
集合框架中的相关接口:
- java.util.Collection接口:是所有集合的顶级接口,封装了所有集合所共有的方法,下面有很多实现类,使得我们可以有更多的数据结构来选择。
- Collection接口下面有两个常用的子接口:-------------------明天详细介绍(先记住)
- java.util.List:线性表,是可重复集合,并且有序
- java.util.Set:不可重复集合,大部分实现类都是无序的
-
Collection常用方法:
-
add():向集合中添加一个元素,添加成功则返回true
-
size():获取当前集合的元素个数
-
isEmpty():判断当前集合是否为空集,当size()为0时返回true
-
clear():清空集合
-
contains():判断当前集合中是否包含给定元素
-
remove():从当前集合中删除元素,若删除成功则返回true
public class CollectionDemo { public static void main(String[] args) { Collection c = new ArrayList(); c.add(new Point(1,2)); c.add(new Point(3,4)); c.add(new Point(5,6)); c.add(new Point(7,8)); c.add(new Point(9,0)); c.add(new Point(1,2)); //集合toString()的结果: [元素1.toString(), 元素2.toString(), 元素3.toString(), ......] System.out.println(c); //[(1,2), (3,4), (5,6), (7,8), (9,0), (1,2)] Point p = new Point(1,2); /* boolean contains(Object o): 判断当前集合是否包含给定元素(o) 判断依据是给定元素是否与集合元素存在equals()比较为true的情况 */ boolean contains = c.contains(p); System.out.println("是否包含:"+contains); //true /* boolean remove(Object o):----一般都不接收boolean结果 从当前集合中删除与给定元素(o)equals()比较为true的元素 若存在重复元素则只删除一次 */ c.remove(p); System.out.println(c); //集合中存放的是元素的引用 Collection cc = new ArrayList(); Point pp = new Point(1,2); cc.add(pp); //将pp添加到cc中------将pp的引用装到了cc中 System.out.println("pp:"+pp); //(1,2) System.out.println("cc:"+cc); //[(1,2)] pp.setX(100); System.out.println("pp:"+pp); //(100,2) System.out.println("cc:"+cc); //[(100,2)] /* Collection c = new ArrayList(); c.add("one"); c.add("two"); c.add("three"); c.add("four"); c.add("five"); //集合重写了Object的toString()方法,返回格式如下: //[元素1.toString(), 元素2.toString(), 元素3.toString(), ......] System.out.println(c); //[one, two, three, four, five] System.out.println("size:"+c.size()); //5,输出集合的元素个数 //isEmpty()判断集合是否为空集(size()为0表示为空集) System.out.println("是否为空集:"+c.isEmpty()); //false c.clear(); //清空集合 System.out.println("集合已清空"); System.out.println(c); //[] System.out.println("size:"+c.size()); //0 System.out.println("是否为空集:"+c.isEmpty()); //true */ } } public class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } @Override public String toString() { return "("+x+","+y+")"; //(?,?) } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Point point = (Point) o; return x == point.x && y == point.y; } @Override public int hashCode() { return Objects.hash(x, y); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } }
-
addAll():将参数指定集合中的元素添加到当前集合中,添加后当前集合发生改变则返回true
-
containsAll():判断当前集合中是否包含参数集合中的所有元素
-
retainAll():取交集
-
removeAll():删交集
public class CollectionOperDemo { public static void main(String[] args) { Collection c1 = new ArrayList(); c1.add("java"); c1.add("c++"); c1.add(".net"); System.out.println("c1:"+c1); //[java, c++, .net] Collection c2 = new ArrayList(); c2.add("android"); c2.add("ios"); c2.add("java"); System.out.println("c2:"+c2); //[android, ios, java] c1.addAll(c2); //将c2添加到c1中 System.out.println("c1:"+c1); //[java, c++, .net, android, ios, java] System.out.println("c2:"+c2); //[android, ios, java] Collection c3 = new ArrayList(); c3.add("c++"); c3.add("android"); c3.add("php"); System.out.println("c3:"+c3); //[c++, android, php] boolean contains = c1.containsAll(c3); //判断c1中是否包含c3中的所有元素 System.out.println("包含所有:"+contains); //false /* //取交集,c1中仅保留与c3共有的元素,而c3不变 c1.retainAll(c3); System.out.println("c1:"+c1); //[c++, android] System.out.println("c3:"+c3); //[c++, android, php] */ //删交集,将c1中与c3共有的元素删除,c3不变 c1.removeAll(c3); System.out.println("c1:"+c1); //[java, .net, ios, java] System.out.println("c3:"+c3); //[c++, android, php] } }
-
-
集合的遍历:
-
Collection接口提供了统一的遍历集合的方式:迭代器模式。通过iterator()方法可以获取一个用于遍历集合元素的迭代器(Iterator接口)。
-
Iterator接口中定义了迭代器遍历集合的相关操作。不同的集合都实现了用于遍历自身集合的迭代器实现类,但是我们无需记住它们的名字,从多态的角度把它们看成Iterator即可。
-
迭代器遍历集合遵循的步骤为:问(hasNext())、取(next())、删(remove()),但删并不是必要操作
public class IteratorDemo { public static void main(String[] args) { Collection c = new ArrayList(); c.add("one"); c.add("#"); c.add("two"); c.add("#"); c.add("three"); c.add("#"); c.add("four"); c.add("#"); c.add("five"); System.out.println(c); //[one, #, two, #, three, #, four, #, five] /* 迭代器的常用方法: 1)boolean hasNext()------问(必要操作) 询问集合是否还有"下一个"元素可供迭代 注意:迭代器默认开始位置在集合第1个元素之前 无论调用了多少次的hasNext()方法,迭代器的位置都不会改变 2)Object next()----------取(必要操作) 迭代器向后移动一个位置来指向集合的下一个元素并将其获取 3)void remove()----------删(删除并非是必要操作) 删除next()方法所获取的元素 */ Iterator it = c.iterator(); //获取集合c的迭代器 while(it.hasNext()){ //若有下一个元素 String str = (String)it.next(); //获取下一个元素 System.out.println(str); if("#".equals(str)){ //若str为#号 //c.remove(str); //迭代器遍历过程中不允许通过集合的方法来增删元素,否则会报异常 it.remove(); //删除next()方法所获取的元素 } } } }
-
-
增强for循环/新循环:
-
JDK1.5时推出了一个特性:增强型for循环,也称为新循环,让我们使用相同的语法遍历数组和集合。
-
语法:
for(元素类型 变量名 : 数组或集合){ 循环体----注意:变量名已经就是具体的元素 }
public class NewForDemo { public static void main(String[] args) { String[] array = {"one","two","three","four","five"}; for(int i=0;i<array.length;i++){ System.out.println(array[i]); } for(String str : array){ //str表示数组中的具体元素 System.out.println(str); } Collection c = new ArrayList(); c.add("one"); c.add("two"); c.add("three"); c.add("four"); c.add("five"); Iterator it = c.iterator(); while(it.hasNext()){ String str = (String)it.next(); System.out.println(str); } for(Object obj : c){ //obj就是集合中的具体元素 String str = (String)obj; System.out.println(str); } } }
-
补充:
-
明日单词:
无