【JavaSE】集合&Git基础

165 阅读7分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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;
}

学生管理系统

实现思路

  1. 定义学生类
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;
    }
}
  1. 主界面代码编写
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;
            }
        }
    }
}
  1. 添加学生的代码编写
// 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("恭喜您,添加成功!");
}
  1. 查看学生的代码编写
// 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());
        }
    }
}
  1. 删除/修改学生学号不存在问题
// 定义一个方法(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;
}
  1. 删除学生的代码编写
// 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("恭喜您,删除成功!");
    }
}
  1. 修改学生的代码编写
// 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提交的历史日志)

基本操作流程

  1. 创建工作目录,初始化本地git仓库

  2. 新建一个test.txt文件(暂不执行添加操作)

  3. 使用status命令,查看状态

  4. 使用add命令添加,并查看状态

  5. 使用commit命令,提交到本地历史仓库

  6. 使用log命令,查看日志

  7. 修改test.txt文件

  8. 添加并提交,查看日志

TortoiseGit操作

可视化操作

Git版本管理

准备工作

  1. 查看log日志

    git reflog:可以查看所有分支的所有操作记录(包括已经被删除的commit记录的操作)

  2. 增加一次新的修改记录

主要指令

  • git reflog

  • git reset --hard 版本唯一索引值:将代码切换到指定版本

分支管理

  • 分支:由每次提交的代码,串成的一条时间线

  • 特点:两条时间线,并行工作,互不打扰,多条时间线可以合并

  • 使用场景:

    1. 周期较长的模块开发
    2. 尝试性的模块开发
  • 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线

工作流程

  1. 创建新分支:git branch 分支名

  2. 切换分支: git checkout 分支名

查看文件命令:ls 查看分支列表命令:git branch

不同分支之间是平行关系,在工作时不会相互影响

  1. 合并分支::git merge 分支名

  2. 删除分支:git branch -d 分支名

远程仓库

  • 工作流程

    推送(push):推送本地仓库内容到远程仓库

    克隆(clone):将远程仓库中的内容复制到本地仓库

    拉取(pull):更新远程仓库中新的内容到本地仓库(和克隆有区别)

常见远程仓库平台

  • GitHub:

    域名:github.com

    介绍:GitHub是全球最大的开源项目托管平台,俗称大型程序员社区化交友网站

    各类好玩有趣的开源项目,只有想不到,没有找不到

  • 码云:

    域名:gitee.com

    介绍:码云是全国最大的开源项目托管平台,良心平台,速度快,提供免费私有库

远程仓库平台操作

  • 情况:

    先有本地仓库,远程仓库为空

    先有远程仓库,本地仓库为空

情况1

步骤:

  1. 创建远程仓库

  2. 将项目从本地仓库,推送到远程仓库

注意: 在推送代码之前,需要先配置SSH公钥

生成SSH公钥步骤:

  1. 设置Git账户

    查看git账户:git config user.name

    查看git邮箱:git config user.email

    设置全局账户名和邮箱:git config --global user.name "账户名"

    git config --global user.email "邮箱"

  2. 生成SSH公钥

    查看是否生成过SSH公钥:cd ~/.ssh

    生成SSH:ssh-keygen -t rsa -C "邮箱" 这里需要敲击三次回车

    查看SSH:cat ~/.ssh/id_rsa.pub

  3. 设置账户公钥(在远程仓库平台设置)

  4. 公钥测试:ssh -T git@gitee.com

  1. 推送到远程平台

    步骤:

    1. 为远程仓库的URL(网址),自定义仓库名称:git remote add 远程名称 远程仓库URL

    2. 推送:git push -u 仓库名称 分支名

情况2

步骤:

  1. 将远程仓库的代码,克隆到本地仓库:git clone 仓库地址

  2. 创建新文件,添加并提交到本地仓库

  3. 推送至远程仓库

  4. 项目拉取更新:git pull 远程仓库名 分支名

代码冲突

代码冲突.png

<<<<<<<和>>>>>>>>>中间的内容,就是冲突部分

  1. 修改冲突行,保存,即可解决冲突

  2. 重新add冲突文件并commit到本地仓库,重新push到远程

IDEA集成Git

  • IDEA中配置Git

    1. File ---- Settings

    2. Version Control ---- Git ---- 指定git.exe存放目录

    3. 点击Test测试

  • 版本切换

    Reset Current Branch to Here... 会抛弃原来的提交记录

    Revert Commit 需要进行版本冲突处理,历史记录还保留提交记录

  • 远程仓库操作

    • 本地推送到远程

    • 远程克隆到本地


推荐阅读:【JavaSE】面向对象进阶