学习笔记之Java篇(0729)

news2024/11/13 9:35:20

p 数组请添加图片描述

大纲知识点
数组的概念数组的定义、四个特点
数组的常见操作普通遍历、for-each遍历、java.util.Array类用法
多维数组多维数组的内存结构、存储表格、Javabean和数组存储表格
常见算法冒泡排序基础算法、冒泡排序优化算法、二分法查找(折半查找)

请添加图片描述

1、数组的特点

数组是相同类型数据的有序集合。其中,每一个数据称作一个元素,每个元素可以通过一个索引」(下标)来访问它们。数组的四个基本特点:

  1. 度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  2. 其元素的类型必须是相同类型,不允许出现混合类型。
  3. 数组类型可以是任何数据类型,包括基本类型和引用类型。
  4. 数组变量属于引用类型,数组也是对象,数组中的元素相当于对象的属性!

2、创建数组和初始化

数组的声明方式

type[]  arr_name;//方式一
type  arr_name[]; //方式二

注意事项

  • 声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这是才与长度有关
  • 声明一个数组的时候并没有真正被创建。
  • 构造一个数组,必须指定长度
package com.Index.Array;

public class CreateArray {
  public static void main(String[] args) {
    int a[];
    a = new int[10];
    for (int i = 0; i < 10; i++) {
      a[i] = i* 2 + 1;
    }
    for(int i = 0; i < 10; i++){
      System.out.println(a[i]);
    }

    Man m1 = new Man(1,11);
    Man m2 = new Man(2,22);
    Man m[] = new Man[5];
    m[0] = m1;
    m[1] = m2;
    System.out.println(m[0].getAge());
    System.out.println(m[0].getId());

  }
}
class Man{
  private int id;
  private int age;
  public Man(int id, int age) {
      super();
    this.id = id;
    this.age = age;
  }

  public int getId() {
    return id;
  }

  public int getAge() {
    return age;
  }
}

请添加图片描述
3、初始化

数组的初始化:静态初始化、动态初始化、默认初始化

3.1 静态初始化

除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。

int[] a = {1,2,3};
Man[] m = {new Man(1,1),new Man(2,2),new Man(3,3),};

3.2 动态初始化

数组定义与为数组元素分配空间并赋值的操作分开进行。

int[] a1=newint[2]://动态初始化数组,先分配空间;
a1[0] = 1://给数组元素赋值;
a1[1]=2://给数组元素赋

3.3 默认初始化

数组是对象,它的元素相当于对象的属性;每个元素也按照属性的方式被默认初始化。

4、数组的常见操作请添加图片描述
1.遍历指的就是“通过循环遍历数组的所有元素”

2.拷贝指的是将某个数组的内容拷贝到另一个数组中

注:实质上,后面大家学容器的扩容就是“数组的拷贝”。

for-each循环

for-each专门用于读取数组或集合中所有的元素,即数组进行遍历。

package com.Index.Array;

public class For_each {
  public static void main(String[] args) {
    String ss [] = {"aa","bb","ccc","ddd"};
    for(String temp : ss){
      System.out.print(temp+"\t");
    }
  }
}
//运行结果:aa	bb	ccc	ddd	
注意事项:
for-each增强for循环在遍历数组过程中不能修改数组中某元素的值。
for-each仅适用于遍历,不涉及有关索引(下标)的操作。

数组拷贝

System.arraycopy(object src,int srcos,object dest,int length)
    //该方法可以将src数组里的元素值赋给dest数组的元素,其中srcpos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素。

请添加图片描述
java.util.Array类

Arrays类包含了:排序、查找、填充、打印内容等常见的数组操作。

  • 使用Arrays类输出数组中的元素
package com.Index.Array;

import java.util.Arrays;

import static java.lang.System.arraycopy;

public class ArrayCopy {
  public static void main(String[] args) {
    String ss [] = {"aa","bb","ccc","ddd"};
    String s [] = new String[4];
    System.arraycopy(ss,0,s,0 , ss.length);
    for(String sss:s){
      System.out.println(sss);
    }
    System.out.println(Arrays.toString(s));;
    int a[] = {23,1,54,23,66,9,0,43};
    System.out.println("==========================Arrays.sort========================");
    Arrays.sort(a);
      //toString
    System.out.println(Arrays.toString(a));
    /*使用二分法查找*/
    System.out.println("==========================Arrays.binarySearch========================");
    System.out.println("该元素的索引时:"+Arrays.binarySearch(a,12));

  /*使用Arrays类对数组进行填充 ,左闭右开*/
    System.out.println("==========================Arrays.fill========================");
    Arrays.fill(a,2,4,100);
    System.out.println(Arrays.toString(a));
  }
}

请添加图片描述
菜鸟雷区

此处的Arrays.toString()方法是Arrays类的静态方法,不是前面讲的Object的toString()方法。

5、多维数组

多维数组可以看成以数组为元素的数组。以有二维、三维、甚至更多维数组,但是实际开发中用的非常少。最多到二维数组(学习容器后,我们一般使用容器,二维数组用的都很少。

请添加图片描述
请添加图片描述
6、数组存储表格数据请添加图片描述
我们观察表格,发现每一行可以使用一个一维数组存储:

Object[] a1 = {1001,"高淇",18,"讲师","2-14"};

Object[] a2 ={1002,"高小七",19,"助教","10-10"};

Object[] a3 ={1003,"高小琴",20,"班主任","5-5"};

注意事项

  • 此处基本数据类型“1001”,本质不是Object对象,JAVA编译器会自动把基本数据类型“自动装箱”成包装类对象。
Object[][] emps = new Object[3][ ];
       emps[0] = a1;
       emps[1] = a2;
       emps[2] = a3;
package com.Index.Array;


import java.util.Arrays;

public class ArrayTable {
  public static void main(String[] args) {
    Object a1[] = {1001,"高琪",18,"讲师","2-14"};
    Object a2[] = {1002,"高小其",23,"助教","10-10"};
    Object a3[] = {1003,"高小琴",20,"班主任","5-5"};
    Object emp [][] = new Object[3][];
    emp[0] = a1;
    emp[1] = a2;
    emp[2] = a3;
    System.out.println(Arrays.toString(emp[0]));
    System.out.println(Arrays.toString(emp[1]));
    System.out.println(Arrays.toString(emp[2]));

    System.out.println("=====================for================");
    for(int i=0;i < emp.length;i++)
    {
      for(int j=0;j < emp[i].length;j++){
        System.out.print(emp[i][j] + "\t");
      }
      System.out.println();
    }
  }
}

请添加图片描述
7、Comparable接口请添加图片描述
Comparable接口中只有一个方法:

public int compareTo (Object obj) //obj为要比较的对象

方法中,将当前对象和obj这个对象进行比较,如果大于返回1,等于返回0,小于返回-1.(此处的1也可以是正整数,-1也可以是负整数)。compareTo方法的代码也比较固定:

package com.Index.Array;

import java.util.Arrays;

public class compare {
  public static void main(String[] args) {
    Man2 m[] = {
            new Man2(23,"a"),
            new Man2(2,"b"),
            new Man2(43,"c")
    };
    System.out.println(Arrays.toString(m));
    Arrays.sort(m);
    System.out.println(Arrays.toString(m));
  }
}
class Man2 implements Comparable{
    int age;
    String name;
    int id;
  public Man2 (int age, String name) {
    this.age = age;
    this.name = name;
  }
  public int compareTo(Object o){
    Man2 man2 = (Man2)o;
    if(this.age < man2.age){
      return -1;
    }
    if(this.age > man2.age){
      return 1;
    }
    return 0;
  }

  public String toString (){
    return this.name;
  }
  public int getAge() {
    return age;
  }

  public String getName() {
    return name;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public void setName(String name) {
    this.name = name;
  }
}

请添加图片描述
8、冒泡算法

通过动画可视化数据结构和算法 - VisuAlgo:

冒泡排序的基础算法

冒泡排序算法重复地走访过要排序的数列一次比较两个元素如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:

  1. 较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

package com.Index.Array;

import java.util.Arrays;

public class BubbleSort {
  public static void main(String[] args) {
  int a[] = {0,1,2,3,5,9,4,8,6,7};
//    System.out.println("优化前:");
//    bubbleSortBefor(a);
    System.out.println("优化后:");
    bubbleSort(a);
  }
//  优化前
  public static void bubbleSortBefor(int[] arr) {
    int tmp;
    for(int  i = 0; i < arr.length -  1;i++){
      for (int j = 0; j < arr.length - i - 1; j++) {
        if(arr[j] > arr[j+1]){
          tmp = arr[j];
          arr[j] = arr[j+1];
          arr[j+1] = tmp;
        }
      }
      System.out.println((i+1)+"趟排序:"+ Arrays.toString(arr));
    }

  }

// 优化后
  public static void bubbleSort(int[] arr) {
    int tmp;
    for(int  i = 0; i < arr.length -  1;i++){
//      定义一个布尔类型的变量,标记数组是否已达到有序状态
      boolean flag = true;
//      内层循环:每一趟循环都从数列的前两个元素开始进行比较,比较到无序数组的最后
      for (int j = 0; j < arr.length - i - 1; j++) {
        if(arr[j] > arr[j+1]){
          tmp = arr[j];
          arr[j] = arr[j+1];
          arr[j+1] = tmp;
          flag = false;
        }
      }
//      根据标记量的值判断数组是否有序,如果有序,则退出;无序,则继续循环。
      if (flag)
      {
        break;
      }
      System.out.println((i+1)+"趟排序:"+ Arrays.toString(arr));
    }

  }
}

请添加图片描述
请添加图片描述
9、二分检索(binary search)(折半检索)请添加图片描述

package com.Index.Array;

import java.util.Arrays;
import java.util.Scanner;

public class BinarySort {
  public static void main(String[] args) {
    int arr[] = {43,12,54,123,54,6,34,92,541,90,10,22,33};
    System.out.println("输入你要查找的数字:");
    Scanner sc = new Scanner(System.in);
    int index  = sc.nextInt();
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));
    int Index = BinartSort(arr,index);
    if(Index == -1) System.out.println("无此元素");
    else
    System.out.println( "索引为"+Index );

  }

  public static int BinartSort(int a[], int index){
    int low = 0;
    int height = a.length - 1;
    while(low <= height){
      int mid = (low + height)/2;
      if(a[mid] > index){
        height = mid  - 1;
      }
        if(a[mid] < index){
        low = mid + 1;
      }
        if (a[mid] == index){
          return mid;
        }
    }
    return -1;
  }
}

请添加图片描述

请添加图片描述
从尚学堂老师那里找来的知识总结表,赞赞赞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb】Filter

基本使用 使用了过滤器之后&#xff0c;要想访问web服务器上的资源&#xff0c;必须先经过滤器&#xff0c;过滤器处理完毕之后&#xff0c;才可以访问对应的资源。过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;登录校验、统一编码处理、敏感字符处理等。 使用操…

nginx 子路径映射配置

如果子路径转发到另一个服务器IP&#xff0c;配置如下&#xff0c;注意都要以“/”结尾。 #指定nginx进程数 worker_processes 1; pcre_jit on;events {# 连接数上限worker_connections 30000; }#http服务 http {server {listen 20012;# 监听的端口号server_name localho…

Spring IoC DI(笔记)

一.了解SpringIoC&DI 1.1IoC 通过前面的学习,我们知道了Spring是一个开源框架,他让我们的开发更加简单.他支持广泛的应用场 景,有着活跃而庞大的社区,这也是Spring能够长久不衰的原因&#xff0c;但是这个概念相对来说,还是比较抽象&#xff0c;我们用一句更具体的话来概…

纯原创【车牌识别】基于图像处理的车牌识别——matlab项目实战(含GUI界面)详解

摘要 车牌识别系统乃计算机视觉与模式识别技术于智能交通领域的重要研究课题之一。其作用在于从复杂背景里提取运动中的汽车牌照&#xff0c;进而识别出车牌号码。车牌识别技术在高速公路电子收费、日常停车场管理以及交通违章监控等场景得到广泛运用。它的问世对于维护交通安全…

代码随想录二刷(链表章节)

代码随想录二刷(链表章节) 链表就是通过指针串联在一起的线性结构&#xff0c;每个节点都是由一个数据域和指针域(存放下一个节点的指针)。 双链表就是每个节点中既有指向前一个节点的&#xff0c;也有指向后一个节点的。 循环链表就是把头和尾连起来。 性能分析如下&#xf…

Java面试八股之@Autowired 和 @Resource的区别

Autowired 和 Resource的区别 在Spring框架中&#xff0c;Autowired 和 Resource 是两个常用的依赖注入注解&#xff0c;但它们有一些关键的区别。下面是这两个注解的主要差异&#xff1a; 1. 注解来源 Autowired&#xff1a; 是Spring框架提供的注解&#xff0c;位于包 or…

TerraSAR-XTanDEM-X卫星详解(一)

全球SAR卫星大盘点与回波数据处理专栏目录 1. TerraSAR-X简介 TerraSAR-X(Terra Synthetic Aperture Radar-X)和TanDEM-X(TerraSAR-X add-on for Digital Elevation Measurement)是由德国宇航中心(DLR)和EADS Astrium公司共同推出的一对双子卫星。Terra源自拉丁语,是地…

解决win10蓝屏“选择一个选项”的问题!

今天台式机开机&#xff0c;出现蓝屏问题&#xff0c;记录一下。 一、问题 启动修复不行&#xff0c;系统还原没还原点&#xff0c;系统映像恢复没有文件。难道要重装系统&#xff1f;手上只能Win7和XP的启动盘。此路不通。 二、解决 使用命令提示符。输入&#xff1a; bcdb…

《花100块做个摸鱼小网站! · 序》灵感来源

序 大家好呀&#xff0c;我是summo&#xff0c;这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛&#xff0c;2核2G的云服务器一年只要99块钱&#xff0c;懂行的人应该知道这个价格在业界已经是非常良心了&#xff0c;虽然优惠只有一年&a…

PMP考试难吗?好不好学?

PMP 并不难&#xff0c;虽然新考纲大家都说开盲盒&#xff0c;做阅读理解&#xff0c;但线上考试成绩出的快&#xff0c;晒 3A 的也不少。给大家分享下我的备考经历&#xff0c;希望能给后面备考的同学一点参考吧。 现在的新考纲是要学习三本书的&#xff0c;《PMBOK》第六版、…

弘景光电:技术实力与创新驱动并进

在光学镜头及摄像模组产品领域&#xff0c;广东弘景光电科技股份有限公司&#xff08;以下简称“弘景光电”&#xff09;无疑是一颗耀眼的明星。自成立以来&#xff0c;弘景光电凭借其强大的研发实力、卓越的产品性能、精密的制造工艺以及严格的质量管理体系&#xff0c;在光学…

使用 useSeoMeta 进行 SEO 配置

title: 使用 useSeoMeta 进行 SEO 配置 date: 2024/7/30 updated: 2024/7/30 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt3中的useSeoMeta组合函数&#xff0c;用于简化和优化网站的SEO配置。通过这个工具&#xff0c;开发者可以在Nuxt3项目中方便地设置页面…

C++ - 负载均衡式在线OJ

目录 一.项目的宏观结构 1.1 只实现类似 leetcode 的题⽬列表在线编程功能 1.2 项⽬宏观结构 1.3编写思路 二.所⽤技术与开发环境 2.1 所用技术 2.2 开发环境 三.compiler 服务设计 3.1 编译功能 3.2 日志功能 3.3 运⾏功能 3.4 编译并运⾏功能 3.5 把编译并运⾏功…

OpenBayes 教程上新 | 文生图、图生图、图像修复三合一神器, HiDiffusion 一键启动教程现已上线!

扩散模型已成为高分辨率图像合成的主流方法&#xff0c;传统的扩散模型虽然在图像合成方面取得了显著进展&#xff0c;但在扩展到更高分辨率时往往面临对象重复和计算成本增加的问题。 旷世科技开源的高分辨率框架 HiDiffusion&#xff0c;由分辨率感知 U-Net (RAU-Net) 和改进…

【手撕数据结构】链表高频面试题

目录 移除链表元素反转链表链表的中间节点倒数第k个节点反转链表(初阶)快慢指针法(进阶) 合并两个有序链表链表分割链表的回文结构 移除链表元素 思路:由题目可知我们需要在给定的一个链表中移除值为val的节点&#xff0c;这里需要注意的情况就是全是val的链表移除后为空链表和…

收藏!2024年GPU算力最新排名

​GPU&#xff08;图形处理单元&#xff09;算力的提升是驱动当代科技革命的核心力量之一&#xff0c;尤其在人工智能、深度学习、科学计算和超级计算机领域展现出了前所未有的影响力。2024年的GPU技术发展&#xff0c;不仅体现在游戏和图形处理的传统优势上&#xff0c;更在跨…

吴恩达老师机器学习-ex2

有借鉴网上的部分 第一题 导入库&#xff0c;读取数据并且展示前五行&#xff08;基本操作&#xff09; import numpy as np import pandas as pd import matplotlib.pyplot as plt #读取数据 path "./ex2data1.txt" data pd.read_csv(path,headerNone,names[&q…

Netty技术全解析:PooledByteBufAllocator源码视角下的详解

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

MySQL---JDBC

一、JDBC是什么&#xff1f; JDBC(Java Database Connectivity):是Java访问数据库的解决方案。 JDBC定义了一套标准的接口&#xff0c;即访问数据库的通用API&#xff0c;不同数据库的厂商根据各自数据库的特点实现这些接口。 JDBC希望用相同的方式访问不同的数据库&#xff0c…

spring:xml定义bean

spring有两种方法定义bean&#xff0c;一种是使用xml标签&#xff0c;一种是注解。在这里介绍使用xml标签定义bean。 我的文件目录如上图所示&#xff0c;在这里创建了bean.xml文件&#xff0c;bean.xml文件中定义了bean。 文件内容&#xff1a; <?xml version"1.0&…