教材学习内容总结
第八章
String类
Java专门提供了用来处理字符序列的String类。
String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用String类。
需要注意的是Java把String类声明为final类,因此用户不能扩展String类,即String类不可以有子类。
可以使用String类声明对象并创建对象,例如:
String s = new String("we are students");
String t = new String("we are students");
用户无法输出String对象的引用:
Syste.out.println(s);
输出的是对象的实体。
例如:
char a[] = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
String s = new String(a,2,4);
相当于
String s = new String("贰叁肆伍");
String 类的常用方法:
-
public int length():获取一个字符串的长度
-
public boolean equals(String s):判断当前String对象的字符序列是否与参数s指定的String对象的字符序列相同
-
public boolean startsWith(String s)
判断当前String对象的字符序列前缀是否是参数指定的String对象s的字符序列 -
public int compareTo(String s):按字典序与参数s指定的字符序列比较大小。
-
5.public boolean contains(String s):String对象调用contains方法判断当前String对象的字符序列是否包含参数s的字符序列
-
public int indexOf (String str):String对象调用方法从当前String对象的字符序列的0索引位置开始检索首次出现str的字符序列的位置,并返回该位置。如果没有检索到,该方法返回的值是–1
-
public String trim() :得到一个新的String对象,这个新的String对象的字符序列是当前String对象的字符序列去掉前后空格后的字符序列。
符串与基本数据的相互转化
Java.lang包中的Integer类调用其类方法:
public static int parseInt(String s)
可以使用String 类的类方法:
public static String valueOf(byte n)
public static String valueOf(int n)
public static String valueOf(long n)
public static String valueOf(float n)
public static String valueOf(double n)
对象的字符串表示
所有的类都默认是java.lang包中Object类的子类或间接子类。
Object类有一个
public String toString()
-
String 类的构造方法:
String(char[]);
String(char[],int offset,intlength)
分别用字符数组中的全部字符和部分字符创建字符串对象 -
将String对象的部分字符序列存放到数组中的方法:
public void getChars(int start,int end,char c[],int offset )
-
将String对象的字符序列存放到数组中的方法
public char[] toCharArray()
-
String(byte[])用指定的字节数组构造一个字符串对象。
-
String(byte[],int offset,int length) 用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。
-
public byte[] getBytes()使用平台默认的字符编码,将当前String对象的字符序列存放到字节数组,并返回数组的引用。
-
public byte[] getBytes(String charsetName)使用参数指定字符编码,将当前String对象的字符序列存放到字节数组,并返回数组的引用。
第十五章
泛型
泛型(Generics),其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。
可以使用“class
名称<泛型列表>”声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,如:
class People<E>
其中People
是泛型类的名称,E
是其中的泛型,也就是说我们并没有指定E
是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据。
泛型类声明和创建对象时,类名后多了一对“<>”,而且必须要用具体的类型替换“<>”中的泛型。例如:
Cone<Circle> coneOne;
coneOne =new Cone<Circle>(new Circle());
LinkedList
LinkedList
mylist=new LinkedList ();
创建一个空双链表。
add(E obj) 向链表依次增加节点
LinkedList泛型类常用方法
public boolean add(E element)
向链表末尾添加一个新的节点,该节点中的数据是参数elememt指定的数据。
-public void add(int index ,E element)
向链表的指定位置添加一个新的节点,该节点中的数据是参数elememt指定的数据。public void clear()
删除链表的所有节点,使当前链表成为空链表。public E remove(int index)
删除指定位置上的节点。
-public boolean remove(E element)
删除首次出现含有数据elemen的节点。
-public E get(int index)
得到链表中指定位置处节点中的数据。public E getFirst()
得到链表中第一个节点中的数据。
-public E getLast()
得到链表中最后一个节点中的数据。public E removeFirst()
删除第一个节点,并返回这个节点中的数据。
链表
public static void shuffle(List<E> list)
将list中的数据按洗牌算法重新随机排列。
static void rotate(List<E> list, int distance)
旋转链表中的数据。
public static void reverse(List<E> list)
翻转list中的数据
堆栈
public E push(E item);
实现压栈操作
public E pop();
实现弹栈操作。
public boolean empty();
判断堆栈是否还有数据。
public E peek();
获取堆栈顶端的数据,但不删除该数据。
public int search(Object data);
获取数据在堆栈中的位置
代码调试中的问题和解决过程
教材中代码调试有问题先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,如果别人没有提出相同问题,可以编辑文档添加,然后把自己提出的问题复制到下面:
-
问题1:编译XXX.java文件提示使用了未经检验或不安全的操作
-
问题1解决方案:通过网上搜索得知
JAVA是一门安全性比较高的语言,它在编译之类要进行类型等一系列的检查。如果你使用了注解就可以告诉编译器不用检查,这样子就可以避过编译时期间的安全检查,这样子的效率会提高 。但同时 安全性就大打折扣了。
方法一: 在main方法面前加@SuppressWarnings("unchecked")
方法二:就是采用泛型。ArrayList<String> list = new ArrayList<String>();
例如:
import java.util.*;
public class ListDemo
{
//@SuppressWarnings("unchecked")
public static void main(String[] args)
{
StringBuilder buf = new StringBuilder("美丽"); //字符串生成器
buf.append("中"); // 输出: 美丽中
buf.append("国"); //输出:美丽中国
buf.insert(1,"达"); //输出:美达丽中国
buf.insert(0,"欢迎"); //输出:欢迎美达丽中国
System.out.println(buf);
//ArrayList list = new ArrayList();
ArrayList<String> list = new ArrayList<String>();
list.add("中");
System.out.println(list);
}
}
- 问题2:编译XXX完成,运行程序时提示:NO X11 DISPLAY variable was set,but this program perforemed an operation which requires it.
- 问题2解决方案:翻译为
没有设置X11 DISPLAY变量,但该程序执行了需要它的操作。
网上说大致说法为没有配置可视图形化界面变量,我使用的是Windows下子系统,所以只有命令行不存在可视化界面,如需要界面需要调用第三方软件,具体情况可使用虚拟机查看。 - 问题3:编译XXX完成,运行是提示:Exception in thread "main" java.lang.NoSuchMethodError:Student.
(ILjava/lang/String;)
- - 问题3解决方案:提示有同类名的类在同一个包或工程中,改变类名,保存即可正常运行。
代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 1/4 | 10/10 | |
第二周 | 300/500 | 1/5 | 10/20 | |
第三周 | 800/1300 | 1/6 | 20/40 | |
第四周 | 700/2000 | 2/8 | 20/60 | |
第五周 | 1100/ 3100 | 2/10 | 30 /90 | |
第六周 | 1100 /4200 | 1/ 11 | 15 /105 | |
第七周 | ||||
第八周 |
-
计划学习时间:15小时
-
实际学习时间:15小时
-
改进情况: