Java基础知识总结(38)

(1)Arrays工具类 Java提供了Arrays工具类,里面包含了一些方法,可以直接操作数组。 1、int binarySearch(long[] a, long key):使用二分查找法查询key元素值在数组a中出现的索引,如果a数组不包含key元素,则返回负数,调用此方法时要求数组中的元素已经按升序排列。

复制代码
            先排序再进行二分查找:
            package cn.bytecollege;
​
            public class BinarySearch {
​
                public static void main(String[] args) {
                    // TODO Auto-generated method stub
​
                    int [] a = {1,4,7,2,5,8,3,6,9};
                    int target = 6;
                    for(int i = 0;i<a.length-1;i++) {
                        for(int j = 0;j<a.length-i-1;i++) {
                            if(a[j]>a[j+1]) {
                                int temp = a[j];
                                a[j] = a[j+1];
                                a[j+1] = temp;
                            }
                        }
                    }
                    int deposit = search(a,target,0,a.length-1);
                    System.out.print("目标值对应索引:"+deposit);
                }
​
                public static int search(int [] array,int target, int startIndex,int endIndex){
                    int middle = (startIndex+endIndex)/2;
                    if(array[middle]==target) {
                        return middle;
                    }
                    if(array[middle]<target) {
                        return search(array,target,middle+1,endIndex);
                    }
                    if(array[middle]>target) {
                        return search(array,target,startIndex,middle-1);
                    }
                        return -1;      
                }
​
            }
        2、T[] copyOf(T[] original, int newLength):该方法会把original数组复制成一个新数组,其中length是新数组的长度,如果length小于original数组的长度,则新数组就是原数组的前面length个元素,如果lenght大于original数组的长度,则新数组的前面元素就是原数组的所有元素,后面补充默认值,根据数组类型确定
        3、copyOfRange(T[] original, int from, int to):这个方法与前面的类似,但是这个方法只复制原数组form索引到to索引的元素。
​
            Arrays工具类中复制数组的方法底层由System类中的arraycopy方法实现
           void java.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
            Object src:被复制的数组、相当于原件
            int srcPos:从原数组中的那个位置开始复制
            Object dest:目标数组,粘贴到的位置
            destPos:目标数组的粘贴起始位置
            length:复制几个元素
            如:
                package cn.bytecollege;
​
                import java.util.Arrays;
​
                public class SystemArrayCopy {
​
                    public static void main(String[] args) {
                        // TODO Auto-generated method stub
​
                        int[] a= {3,8,5,9,8};
                        int[] b = new int[3];
                        System.arraycopy(a, 1, b, 0, 3);
                        System.out.print(Arrays.toString(b));
                    }
​
                }
​
        4、boolean equals(type[] a, tyte[] a2) :如果数组a 和a2长度相等,并且a和a2每个元素也相等则返回true,否则返回false。
            equals方法的简单实现:
                public class ArraysEquals {
​
                    public static void main(String[] args) {
                        // TODO Auto-generated method stub
                        int [] array1 = {2,3,6,9};
                        int [] array2 = {2,3,6,9};
                        if(arrayEquals(array1,array2)) {
                            System.out.print("两个数组相等");
                        }else {
                            System.out.print("两个数组不相等");
                        }   
                    }
​
                    public static boolean arrayEquals(int[] a,int[] b) {
    
                        int array1Length = a.length;
                        int array2Length = b.length;
    
                        if(a == b) {
                            return true;
                        }
                        if(a == null || b == null) {
                            return false;
                        }
                        if(array1Length != array2Length) {
                            return false;
                        }
                        for(int i = 0 ;i<array1Length;i++) {
                            if(a[i]!=b[i]) {
                                return false;
                            }
                        }
                        return true;
                    }
​
                }
        5、void fill(long[] a, l  l):该方法会把a数组的所有元素都赋值为val
​
            public static void main(String[] args) {
                // TODO Auto-generated method stub
​
                int[] a = {1,4,7,2,5,8};
                Arrays.fill(a, 1);
                System.out.println(Arrays.toString(a));
            }
                
        6、void sort(type[] a):该方法对a数组进行排序
​
            public static void main(String[] args) {
                // TODO Auto-generated method stub
                int [] a = {8,4,7,1};
                Arrays.sort(a);//在原数组上操作,不会创建新的数组
                System.out.println(Arrays.toString(a));//[1, 4, 7, 8]
            }
​
        7、String toString(type[] a):该方法将一个数组转换成字符串,该方法按顺序吧多个元素连接在一起,元素之间用逗号隔开。
            int [] b = {8,4,2,1};
            System.out.print(Arrays.toString(b));
(2)面向对象基础
​
        Java语言提供了定义类、成员变量、方法等最基本的功能。在这里类可以被理解为一种自定义的数据类型,可以使用类定义变量,所有使用类定义的变量都是引用类型。
        类是一系列具有相同行为和属性的对象的集合,用于描述客观世界中一类对象的共同特征,例如,学生类,此时学生类是抽象的,概括的,不具体的,描述了一个群体或者一组实物的共同特征
        但是如果具体到某个学生,例如BYTE学院后端班张三同学,此时张三就是一个对象。
        概括来讲,类是对象的模板,对象是类的实例,类是抽象的,对象是具体的。二者相互依存,没有类就不会有对象,对象不可能凭空出现,而如果只有类而没有对象,类也没有存在的意义。
复制代码
(3)类和对象
        类是面向对象的重要内容,可以把类当做一种自定义类型,可以使用类来定义变量,这种类型的变量统称为引用类型变量。
(4)定义类
        类是对一批对象的抽象,可以把类理解成某个群体,对象则是具体的存在。
        [修饰符] class 类名{
•
                0个或者多个构造器
•
                0个或者多个成员变量
•
                0个或者多个方法
•
                //另外,类中还可以包含内部类,内部枚举等等    
•
        }
        如:抽象出学生的共同性质,定义一个Student类
        public class Student {
            String name;
            int age;
            char gender;
            String CardId;//状态(属性)
        }
​
        修饰符可以是public、final、abstract,或者完全省略这4个修饰符。类名符合标识符的命名规则就可以,类名使用帕斯卡命名规则。
                    
        成员变量的定义:
​
           [修饰符] 数据类型 成员变量 [=默认值]
                          修饰符:修饰符可以省略,也可以是public、protected、private、static、final、transient,其中public、protected、private只能选一个,可以与final、static组合来修饰成员变量
           类型:类型可以是Java允许的任意类型,可以是基本类型、也可以是引用类型
           成员变量名:成员变量名要符合标识符命名规则,使用驼峰命名法,要做到见名知意。
           默认值:成员变量可以指定默认值,在创建对象时,如果不指定初始值,jvm会提供默认值,其中整型默认值为0,浮点型默认值为0.0,布尔型默认值为false,字符型默认值为'\u0000'。
​
        方法的定义:
•
          [修饰符] 方法返回值类型 方法名(形参列表){
                //方法体   
          }
​
          修饰符:修饰符可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能选一个,可以与final、static组合来修饰成员变量
          方法返回值类型:返回值类型可以是Java允许的任意数据类型、包括基本类型和引用类型;如果声明了返回值类型、则方法体中必须有一个有效的return语句,该语句返回一个变量或者表达式,这个变量或表达式的类型必须与声明的类型匹配,此外,如果一个方法没有返回值,则返回值类型用void代替,表明该方法没有返回值。
            方法名:方法名要符合标识符命名规则,使用驼峰命名法,要做到见名知意。
          形参列表:形参用于定义该方法可以接受的参数,形参列表可以由0个或者多个参数组成,参数之间用逗号隔开。一旦方法定义时定义了形参列表,则调用该方法时必须传入对应类型的参数值。
            构造器则是一种特殊的方法,其作用是用于创建对象,Java语言通过new关键字来调用构造方法,从而返回该类的实例。构造器是一个类创建对象的基本方法,如果一个类没有构造器,这个类也就无法创建实例了。因此Java语言提供了一个功能:如果开发者没有为类编写构造器,编译器会为该类提供一个默认无参数的构造器,一旦开发者提供了构造器,则编译器不在提供构造器。
        构造器的定义: 需要注意的是构造器是一种特殊的方法,其方法名和类名相同,但没有方法返回值,也不用void修饰。
​
        [修饰符] 方法名(形参列表){
•
            方法体   
•
        } 
        修饰符:修饰符可以省略,也可以是public、protected、private其中之一,如果构造器的修饰符为private,则不能通过new调用,也就是说当一个类的构造器被private修饰,该类则不能通过new来创建对象
        方法名:必须与类名相同
        形参列表:和方法中的形参格式完全相同
            面试题:
                public class Student {
                    String name;
                    int age;
                    char gender;
                    String CardId;
                    int Student() {//构造器:构造器的方法名必须与类名一致,方法无返回值并且不用void修饰。
                        return 0;//该不符合构造器定义,故该方法不是构造器,特别注意!!!!
                    }
                }
(5)创建对象和使用对象
     
     public class Student {
        String name;
        int age;
        char gender;
        String CardId;
​
        public void printTest() {
            System.out.print("Test!");
        }
     }
​
     public class CreateClass {
​
        public static void main(String[] args) {
            // TODO Auto-generated method stub
 
            //创建一个student类型的对象
            Student student;
            //通过new关键字调用构造方法实例化Student类,
            student = new Student();
    
            //Student student = new Student(); 简写形式
    
            System.out.println(student.age); //访问对象的实例变量 默认值 0 
            student.printTest();//调用对象的方法 Test!
        }
​
     }
​
    static 修饰的方法和成员变量,既可通过类来调用,也可通过实例来调用;没有使用 static 修饰的普通方法和成员变量,只可通过实例来调用。(关于static关键字会在后续内容中讲解,我们现在先来谈谈实例变量)
​
(10)选择排序算法
​
public class SelectionSort {
​
public static void main(String[] args) {
    // TODO Auto-generated method stub
​
    int[] a= {8,5,2,4,7,1};
    for(int i = 0;i<a.length;i++) {
        //定义每一轮的最小值(假设第i轮最小值就是索引i对应的元素)
        int minIndex = i;
        for(int j=i+1;j<a.length;j++) {
            if(a[minIndex]>a[j]) {
                //在数组遍历过程中,如果存在比假设的元素更小的元素,那么就记录其索引
                minIndex = j;
            }
        }
        //一轮比较结束后,如果最小值就是就是之前假设的最小值,那么就不交换。否则,交换
        if(minIndex!=i) {
            int temp = a[minIndex];
            a[minIndex] = a[i];
            a[i]=temp;              
        }           
    }
}

}

相关推荐
一休哥助手8 分钟前
Redis 五种数据类型及底层数据结构详解
数据结构·数据库·redis
这可就有点麻烦了9 分钟前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
救救孩子把9 分钟前
深入理解 Java 对象的内存布局
java
落落落sss11 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
苏宸啊14 分钟前
顺序表及其代码实现
数据结构·算法
万物皆字节17 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
lin zaixi()18 分钟前
贪心思想之——最大子段和问题
数据结构·算法
FindYou.18 分钟前
C - Separated Lunch
算法·深度优先
夜雨翦春韭24 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
我行我素,向往自由30 分钟前
速成java记录(上)
java·速成