一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情。
个人主页:HelloCode.
本文专栏:Java零基础指南
如果您觉得手机APP排版不美观,建议使用浏览器打开
阅读如有问题,欢迎指正,一起进步~~
集合基础
对象数组
// 需求:将(张三,23)(李四,24)(王五,25)封装为3个学生对象并存入数组,随后遍历数组,将学生信息输出
// 新建一个Student类
public class Student{
private String name;
private String age;
public Student(){}
public Student(String name, String age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getAge(){
return age;
}
public void setAge(String age){
this.age = age;
}
}
//---------------------------下面为一个新的class文件----------------------------------------------
public class Test{
public static void main(String[] args){
Student[] arr = new Student[3];
Student stu1 = new Student("张三","23");
Student stu2 = new Student("李四","24");
Student stu3 = new Student("王五","25");
arr[0] = stu1;
arr[1] = stu2;
arr[2] = stu3;
for(int i = 0; i < arr.length; i++){
System.out.println("姓名:" + arr[i].getName() + " 年龄:" + arr[i].getAge());
}
}
}
集合和数组的特点对比
-
集合类的特点:提供一种存储空间可变的存储类型,存储的数据容量可以发生改变
-
集合和数组的区别:
共同点:都是存储数据的容器
不同点:数组的容量是固定的,集合的容量是可变的
如果存储的数据,长度经常发生改变,推荐使用集合
ArrayList集合
构造方法:ArrayList() 构造一个初始容量为10的空列表
成员方法
-
boolean add(E e)将指定的元素添加到此列表的尾部 -
void add(int index, E element)将指定的元素插入此列表中的指定位置
如果没有进行数据类型的限制,可以添加任何数据类型的数据
如果要进行限制,格式为:
ArrayList<数据类型> list = new ArrayList<数据类型>();JDK7版本以后,可写为:
ArrayList<数据类型> list = new ArrayList<>();<E>:是一种特殊的数据类型,泛型。<>里面只能写引用数据类型,int、double等基本数据类型不行
-
public boolen remove(Object)删除指定的元素,返回是否删除成功,只能删除第一个匹配到的元素 -
public E remove(int index)删除指定索引处的元素,返回被删除的元素 -
public E set(int index, E element)修改指定索引处的元素,返回被修改的元素 -
public E get(int index)返回指定索引处的元素 -
public int size()返回集合中的元素的个数
案例
// 需求:创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}
}
}
// 需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
// 新建一个Student类
public class Student{
// 成员变量
private String name;
private int age;
// 构造方法
public Student(){}
public Student(String name, int age){
this.name = name;
this.age = age;
}
//成员方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
//---------------------------下面为一个新的class文件----------------------------------------------
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
ArrayList<Student> list = new ArrayList<>();
Student stu1 = new Student("张三",23);
Student stu2 = new Student("李四",24);
Student stu3 = new Student("王五",25);
list.add(stu1);
list.add(stu2);
list.add(stu3);
for(int i = 0; i < list.size(); i++){
System.out.println("姓名:" + list.get(i).getName() + " 年龄:" + list(i).getAge());
}
}
}
// 需求:创建一个存储String的集合,内部存储(test,张三,李四,test,test)字符串,删除所有的test字符串,将删除后的集合元素打印到控制台
import java.util.ArrayList;
public class Test{
public static void main(String[] args){
ArrayList list = new ArrayList();
list.add("test");
list.add("张三");
list.add("李四");
list.add("test");
list.add("test");
for(int i = 0; i < list.size(); i++){
if("test".equals(list.get(i))){ // 变量和常量调用方法,尽量常量去调用,减少不必要的错误
list.remove(i);
i--;
}
}
System.out.println(list);
}
}
// 需求:定义一个方法,方法接收一个集合对象(泛型为Student),方法内部将年龄低于18的学生对象找出并存入新集合对象,方法返回新集合
// 新建student类步骤省略
import java.util.ArrayList;
public static void main(String[] args){
Student stu1 = new Student("张三",23);
Student stu2 = new Student("李四",16);
Student stu3 = new Student("王五",22);
Student stu4 = new Student("赵六",13);
Student stu5 = new Student("马七",18);
ArrayList<Student> list = new ArrayList<>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.add(stu5);
ArrayList<Student> newList = getList(list);
for(int i = 0; i < newList.size(); i++){
System.out.println("姓名:" + newList.get(i).getName() + " 年龄:" + newList.get(i).getAge());
}
}
public static ArrayList<Student> getList(ArrayList<Student> list){
ArrayList<Student> newList = new ArrayList<>();
for(int i = 0; i < list.size(); i++){
if(list.get(i).getAge() < 18){
newList.add(list.get(i));
}
}
return newList;
}
学生管理系统
实现思路
- 定义学生类
public class Student{
// 成员变量
private int sid; //学号
private String name; //姓名
private int age; //年龄
private String birthday; //生日
// 构造方法
public Student(){}
public Student(int sid, String name, int age, String birthday){
this.sid = sid;
this.name = name;
this.age = age;
this.birthday = birthday;
}
// 成员方法
public void setSid(int sid){
this.sid = sid;
}
public int getSid(){
return sid;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void setBirthday(String birthday){
this.birthday = birthday;
}
public String getBirthday(){
return birthday;
}
}
- 主界面代码编写
import java.util.Scanner;
import java.util.ArrayList;
public class studentManager {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Student> list = new ArrayList<>(); // 创建一个容器
// 搭建主界面菜单
lo: //添加一个标号,配合break完成退出操作
while (true) {
System.out.println("-------欢迎来到学生信息管理系统-------");
System.out.println("1.添加学生");
System.out.println("2.删除学生");
System.out.println("3.修改学生");
System.out.println("4.查看学生");
System.out.println("5.退出");
System.out.println("---------------------------------");
System.out.print("请输入您的选择:");
int choice = sc.nextInt();
switch (choice) {
case 1:
addStudent(list);
break;
case 2:
delStudent(list);
break;
case 3:
System.out.println("修改");
break;
case 4:
queryStudent(list);
break;
case 5:
System.out.println("您已退出,感谢您的使用");
break lo;
default:
System.out.println("您的输入有误,请重新输入");
break;
}
}
}
}
- 添加学生的代码编写
// addStudent
public static void addStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
int sid; // 写在while外面,方便整个addSt
while(true){
System.out.print("请输入学号:");
sid = sc.nextInt();
int index = getIndex(list, sid);
if(index == -1){
break;
}else{
System.out.println("该学号已存在,请重新输入");
}
}
System.out.print("请输入姓名:");
String name = sc.next();
System.out.print("请输入年龄:");
int age = sc.nextInt();
System.out.print("请输入生日:");
String birthday = sc.next();
Student stu = new Student(sid, name, age, birthday);
list.add(stu);
System.out.println("恭喜您,添加成功!");
}
- 查看学生的代码编写
// queryStudent
public static void queryStudent(ArrayList<Student> list){
if(list.size() == 0){
System.out.println("当前无数据,请添加数据后重试");
}
else{
System.out.println("学号\t\t\t姓名\t\t年龄\t\t生日");
for(int i = 0; i < list.size(); i++){
Student stu = list.get(i);
System.out.println(stu.getSid() + "\t\t\t" + stu.getName() + "\t\t" + stu.getAge() + "\t\t" + stu.getBirthday());
}
}
}
- 删除/修改学生学号不存在问题
// 定义一个方法(getIndex),用于从集合中查找【学号】在【集合】中出现的索引位置
public static int getIndex(ArrayList<Student> list, int sid){
int index = -1; //假设传入的学号不存在
for(int i = 0; i < list.size(); i++){
Student stu = list.get(i);
int id = stu.getSid();
if(id == sid){
index = i;
}
}
return index;
}
- 删除学生的代码编写
// delStudent
public static void delStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.print("请输入您要删除的学生学号:");
int delSid = sc.nextInt();
int index = getIndex(list, delSid);
if(index == -1){
System.out.println("查无信息,请重新输入");
}else{
list.remove(index);
System.out.println("恭喜您,删除成功!");
}
}
- 修改学生的代码编写
// updateStudent
public static void updateStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.print("请输入您要修改的学生学号:");
int updateSid = sc.nextInt();
int index = getIndex(list, updateSid);
if(index == -1){
System.out.println("查无信息,请重新输入");
}else{
System.out.print("请输入新的学生姓名:");
String name = sc.next();
System.out.print("请输入新的学生年龄:");
int age = sc.nextInt();
System.out.print("请输入新的学生生日:");
String birthday = sc.next();
Student stu = new Student(updateSid, name, age, birthday);
list.set(index, stu);
System.out.println("恭喜您,修改成功!");
}
}
Git
概述及安装
-
版本控制:无论是代码编写,还是文档编写,我们都会遇到对文档内容反复修改的情况
-
Git和SVN的对比
-
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而开发人员工作的时候,用的都是自己的电脑,所以首先要从中央服务器下载最新的版本,然后开发,开发完后,需要把自己开发的代码提交到中央服务器
-
Git是在2005年,Liunx创建者为了帮助全球的开发者,维护Linux系统内核的开发,而开发了自己的开源分布式版本控制工具,分为两种类型的仓库,本地仓库和远程仓库
-
-
Git下载和安装
官网下载地址:git-scm.com/downloads
Git GUI : Git提供的图形界面工具
Git Bash:Git提供的命令行工具
运行Git命令客户端,使用git --version命令,可以查看git版本
-
TortoiseGit安装
基本操作
本地仓库
-
工作目录:Working Tree----代码存放的位置
-
暂存区(Index):代码提交到仓库之前的临时存储空间
-
本地历史仓库(Repository):存放不同版本的代码,例如:(完成了项目10%的代码、完成了项目20%的代码)
工作目录---->暂存区---->本地历史仓库
Git常用命令
-
git init:初始化,创建git仓库
-
git status:查看git状态(文件是否进行了添加、提交操作)
-
git add 文件名:添加,将指定文件添加到暂存区
-
git commit -m '描述信息':提交,将暂存区文件提交到历史仓库
-
git log:查看日志(git提交的历史日志)
基本操作流程
-
创建工作目录,初始化本地git仓库
-
新建一个test.txt文件(暂不执行添加操作)
-
使用status命令,查看状态
-
使用add命令添加,并查看状态
-
使用commit命令,提交到本地历史仓库
-
使用log命令,查看日志
-
修改test.txt文件
-
添加并提交,查看日志
TortoiseGit操作
可视化操作
Git版本管理
准备工作
-
查看log日志
git reflog:可以查看所有分支的所有操作记录(包括已经被删除的commit记录的操作)
-
增加一次新的修改记录
主要指令
-
git reflog
-
git reset --hard 版本唯一索引值:将代码切换到指定版本
分支管理
-
分支:由每次提交的代码,串成的一条时间线
-
特点:两条时间线,并行工作,互不打扰,多条时间线可以合并
-
使用场景:
- 周期较长的模块开发
- 尝试性的模块开发
-
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线
工作流程
-
创建新分支:
git branch 分支名 -
切换分支:
git checkout 分支名
查看文件命令:
ls查看分支列表命令:git branch不同分支之间是平行关系,在工作时不会相互影响
-
合并分支::
git merge 分支名 -
删除分支:
git branch -d 分支名
远程仓库
-
工作流程
推送(push):推送本地仓库内容到远程仓库
克隆(clone):将远程仓库中的内容复制到本地仓库
拉取(pull):更新远程仓库中新的内容到本地仓库(和克隆有区别)
常见远程仓库平台
-
GitHub:
域名:github.com
介绍:GitHub是全球最大的开源项目托管平台,俗称大型程序员社区化交友网站
各类好玩有趣的开源项目,只有想不到,没有找不到
-
码云:
域名:gitee.com
介绍:码云是全国最大的开源项目托管平台,良心平台,速度快,提供免费私有库
远程仓库平台操作
-
情况:
先有本地仓库,远程仓库为空
先有远程仓库,本地仓库为空
情况1
步骤:
-
创建远程仓库
-
将项目从本地仓库,推送到远程仓库
注意: 在推送代码之前,需要先配置SSH公钥
生成SSH公钥步骤:
设置Git账户
查看git账户:
git config user.name查看git邮箱:
git config user.email设置全局账户名和邮箱:
git config --global user.name "账户名"
git config --global user.email "邮箱"生成SSH公钥
查看是否生成过SSH公钥:
cd ~/.ssh生成SSH:
ssh-keygen -t rsa -C "邮箱"这里需要敲击三次回车查看SSH:
cat ~/.ssh/id_rsa.pub设置账户公钥(在远程仓库平台设置)
公钥测试:
ssh -T git@gitee.com
-
推送到远程平台
步骤:
-
为远程仓库的URL(网址),自定义仓库名称:
git remote add 远程名称 远程仓库URL -
推送:
git push -u 仓库名称 分支名
-
情况2
步骤:
-
将远程仓库的代码,克隆到本地仓库:
git clone 仓库地址 -
创建新文件,添加并提交到本地仓库
-
推送至远程仓库
-
项目拉取更新:
git pull 远程仓库名 分支名
代码冲突
<<<<<<<和>>>>>>>>>中间的内容,就是冲突部分
-
修改冲突行,保存,即可解决冲突
-
重新add冲突文件并commit到本地仓库,重新push到远程
IDEA集成Git
-
IDEA中配置Git
-
File ---- Settings
-
Version Control ---- Git ---- 指定git.exe存放目录
-
点击Test测试
-
-
版本切换
Reset Current Branch to Here... 会抛弃原来的提交记录
Revert Commit 需要进行版本冲突处理,历史记录还保留提交记录
-
远程仓库操作
-
本地推送到远程
-
远程克隆到本地
-
推荐阅读:【JavaSE】面向对象进阶