方法与数组.md

1、 方法的定义

为什么要有方法?

方法就是一段特定功能的代码块。 方法提高程序的复用性和可读性

访问权限修饰符 [其他的修饰符 如static] 返回值类型 方法名 (参数类型1 形参1, 参数类型2 形参2, …){

//方法体

return 返回值;

}

2、 方法的形参与实参

调用方法时传入的参数是实参

在方法定义时的参数称为形参

3、 方法的返回值

  1. 若当前方法没有返回值而理性,即返回值类型是void, 那么当前方法中可以不写return
  2. return 即表示结束一个方法, 也可以将返回值返回给调用当前方法的调用者
  3. return 返回值时一次只能返回一个值,不可以i返回多个值
  4. 一个方法中可以右多个return, 但被执行的只能有一个所以需要判断。

4、 方法的重载

在类中可以创建多个方法,它们是具有相同的名字,但具有不同的参数和不同的定义

方法的重载: 在同一个类中,方法名相同,参数列表不同,返回值不能作为重载的条件

5、 java 数组的定义

数组是引用类型

四种方式:


6、 数组的赋值方式

7、 数组的遍历

求数组的长度: x.length

通过下标来访问数组中的元素。

下标: 从0开始,在数组长度-1

如:int[] scores = {89, 90};

访问最后一个元素值: int lastElement = scores[scores.length -1];

普通for循环

for(int i = 0; i < x.length; i ++){ }

foreach

java 1.5 之后新增foreach 循环(iteratable)

8、 增强for循环与可变参数

9、数组要注意的问题

NullPointerException (null.length)

ArrayIndexOutOfBoundsException

10、数组示例

11、 最大最小值算法

12、 冒泡排序算法

(稳定)

for(int i = 0; i < nums.length -1; i++){  // 比较轮数等于数列的长度 - 1,100个数字比较99次
    for(int j = 0; j < nums.length -1-i; j++){ // 后i个元素已经是大的了
        if(nums[j] > nums[j + 1]){
            nums[j] = nums[j] + nums[j + 1];
            nums[ j + 1] = nums[j] - nums[ j + 1];
            nums[j] = nums[j] - nums[j + 1];
        }
    }
}

13、 选择排序算法

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好数列的最后,直到全部待排序的数据元素排完。(不稳定)

/*
34 4 56 17 90 65
4 34 56 17 90 65
4 17 56 34 90 65
4 17 34 56 90 65
4 17 34 56 65 90
*/
        int minIndex = 0;
        for(int i = 0; i < nums.length - 1; i ++){
            minIndex = i;
            for(int j = i+1; j <nums.length; j ++){
                if(nums[minIndex]>nums[j]){
                    minIndex = j;
                }
            }
            if(minIndex !=i){
                nums[minIndex] = nums[minIndex] + nums[i];
                nums[i] = nums[minIndex] - nums[i];
                nums[minIndex] = nums[minIndex] - nums[i];
            }
        }

14、 直接插入排序算法

从后向前找到合适位置后插入

基本思想: 每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的子序列的合适位置(从后向前找到合适位置后), 直到全部插入排序完为止。

for(int i = 1; i < nums.length; i ++){
    int temp = nums[i];
    int j = 0;
    for(j = i-1; j >=0; j--){
        if(nums[j]>temp){
            nums[j+1] = nums[j];
        }else{
            break;
        }
    }
    if(nums[ j + 1] != temp){
        nums[j+1] = temp;
    }
}

15、 二分查找算法

public int binarySearch(int[] data, int k){
        int start = 0;
        int end = data.length -1;
        while(end >= start){
            int mid = (start + end)>>>2;

            if(data[mid] > k){
                end = mid -1;
            }else if(data[mid] < k){
                start = mid + 1;
            }else{
                return mid;
            }
        }
        return -1;
    }

16、 Arrays 类

Arrays 工具类: 用来操作数组(比如排序和搜索)的各种方法

常用方法:

  • 使用二分法查找 Arrays.bibarySearch(int[] array, int value);
  • 数组内容专程字符串的形式输出 Arrays.toString(int[] array);
  • 数组排序 Arrays.sort(int[] array);
  • 复制指定的数组 Arrays.copyOf(int[] array, int length); Arrays.copyOf(int[] array, int from, int to); System.arraycopy( Object src, int srcPos, Object dest, int destPos, int length)
  • 判断两个数组是否相等 Arrays.equals();
  • 使用指定元素填充数组 Arrays.fill();
  • 将一个数组转变为一个List (asList, )这个list 是定长的,企图添加或者删除数据都会出错。

数组内容专程字符串的形式输出

17、 双色球模拟综合案例

不同数组MD5 哈希值并不总是相同的。MD5 算法的核心特性之一是其输出不可逆性以及对输入数据的高度敏感性[^1]。这意味着即使是微小的数据差异,也会导致最终生成的哈希值完全不同。 ### 数组 MD5 的关系 1. **数组内容决定哈希值** 当使用 MD5 算法计算一个数组的哈希值时,实际上是将数组中的元素按一定格式转化为字节流后进行处理。因此,只要两个数组的内容、顺序或数据类型存在任何差异,都会直接影响到最终的 MD5 值。 2. **数据编码方式影响结果** 在实际应用中,数组通常需要经过序列化和编码(如 UTF-8 或 ASCII)才能作为 MD5 输入。不同的编码规则会改变原始数据的二进制表示形式,从而影响最终的哈希结果[^4]。 3. **碰撞概率低但存在理论风险** 尽管理论上存在不同输入产生相同 MD5 值的可能性(即哈希碰撞),但在常规应用场景下,这种情况非常罕见。然而,在安全性要求较高的场景中,由于 MD5 已知的安全漏洞,应避免使用它以防止潜在的攻击[^2]。 ### 示例说明 假设存在以下两个数组: ```python array1 = [1, 2, 3] array2 = [1, 2, 4] ``` 在转换为特定编码格式(例如字符串 `"[1, 2, 3]"` 和 `"[1, 2, 4]"`)后,它们分别传递给 MD5 算法进行计算,结果如下: ```python import hashlib def compute_md5(data): return hashlib.md5(str(data).encode()).hexdigest() print(compute_md5([1, 2, 3])) # 输出类似:eccbc87e4b5ce2fe28308fd9f2a7baf3 print(compute_md5([1, 2, 4])) # 输出类似:c20ad4d76fe97759aa27a0c99bff6710 ``` 从示例可以看出,即使数组之间的差异很小,MD5 哈希值仍然完全不同。 ### 总结 不同数组MD5 哈希值一般不会相同,因为算法本身具有高度的敏感性和扩散性。不过,需要注意的是,如果对安全性的要求较高,则应考虑使用更强大的哈希算法(如 SHA-256 或 BLAKE2)来替代 MD5[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值