java(数组及常用简单算法 )
数组
数组:数组是存储同一种数据类型数据的集合容器。
数组的定义格式:
数据类型[] 变量名 = new 数据类型[长度];
数组的好处:对分配到数组对象中每一个数据都分配一个编号(索引值、角标、下标),索引值的范围是从0开始,最大是:长度-1。
局部变量:如果一个变量是在一个方法(函数)的内部声明的,那么该变量就是一个局部变量。
成员变量:成员变量就是定义在方法之外,类之内的.
数组中最常见的问题:
1.NullPointerException 空指针异常原因:引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
2.ArrayIndexOutOfBoundsException索引值越界。原因:访问了不存在的索引值。
数组的初始化方式:
动态初始化:
数据类型[] 变量名 = new 数据类型[长度];
静态初始化:
数据类型[] 变量名 = {元素1,元素2.....};
如果程序一开始你就已经确定了数据,那么这时候建议使用静态初始化。如果数据一开始还不太明确,这时候就建议使用动态初始化。
class Demo7 {
public static void main(String[] args) {
//动态初始化
//int[] arr = new int[10];
//静态初始化
int[] arr = {10,20,30,40,50};
for(int index = 0 ; index<arr.length ; index++){
System.out.print(arr[index]+",");
}
/*
int[] arr = new int[50];
Scanner scanner = new Scanner(System.in);
for(int i = 0 ; i< arr.length ; i++){
arr[i] = scanner.nextInt();
}
*/
}
}
class Demo8 {
public static void main(String[] args)
{
int[] arr = {-12,-14,-5,-26,-4};
int max = getMax(arr);
System.out.println("最大值:"+ max);
}
public static int getMax(int[] arr) {
int max = arr[0]; //用于记录最大值
for(int i = 1 ; i < arr.length ; i++){
if(arr[i]>max){ //如果发现有元素比max大,那么max变量就记录该元素。
max = arr[i];
}
}
return max;
}
}
选择排序(直接排序):使用一个元素与其他 的元素挨个比较一次,符合条件交换位置。
class Demo9 {
public static void main(String[] args) {
int[] arr = {12,5,17,8,9}; //对于5元素的数组,只需要找出4个最大值就可以排序了。
selectSort(arr);
}
public static void selectSort(int[] arr) {
//把最大值放在首位置。
for(int j = 0; j<arr.length-1; j++){ // 控制的是轮数。
for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值
if(arr[i]>arr[j]){
//交换位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//遍历数组,查看效果
System.out.print("目前的元素:");
for (int i = 0 ; i<arr.length ;i++){
System.out.print(arr[i]+",");
}
}
}
冒泡排序:冒泡排序的思想就是使用相邻的两个 元素挨个比较一次,符合条件交换位置。
class Demo10 {
public static void main(String[] args) {
int[] arr = {12,8,17,5,9}; // 最大的索引值: 4 容量:5
bubbleSort(arr);
}
public static void bubbleSort(int[] arr){
// 把最大值放在最后一个位置
for(int j = 0 ; j<arr.length-1 ; j++){ //控制轮数
for(int i = 0 ; i<arr.length-1-j ; i++){ // 找出一个最大值
//相邻的元素比较
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
//遍历数组,查看效果
System.out.print("目前的元素:");
for (int i = 0 ; i<arr.length ;i++){
System.out.print(arr[i]+",");
}
}
}
折半查找法(二分法): 使用前提必需是有序的数组。
class Demo12 {
public static void main(String[] args) {
int[] arr = {12,16,19,23,54};
//int index = searchEle(arr,23);
int index = halfSearch(arr,116);
System.out.println("元素所在的索引值是:"+ index);
}
public static int halfSearch(int[] arr, int target){
//定义三个变量分别记录最大、最小、中间的查找范围索引值
int max = arr.length-1;
int min = 0;
int mid = (max+min)/2;
while(true){
if(target>arr[mid]){
min = mid+1;
}else if(target<arr[mid]){
max = mid -1;
}else{
//找到了元素
return mid;
}
//没有找到的情况
if (max<min){
return -1;
}
//重新计算中间索引值
mid = (min+max)/2;
}
}
public static int searchEle(int[] arr, int target) {
for(int i = 0 ; i<arr.length ; i++){
if(arr[i]==target){
return i;
}
}
return -1;
}
}
二维数组: 二维数组就是数组中的数组。
二维数组的定义格式:
数据类型[][] 变量名 = new 数据类型[长度1][长度2];
二维数组 的初始化方式:
动态初始化:
数据类型[][] 变量名 = new 数据类型[长度1][长度2];
静态初始化:
数据类型[][] 变量名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...} ..}
class Demo16 {
public static void main(String[] args) {
int[][] arr = {{10,11,9},{67,12},{33,35,39,40}};
//遍历二维数组
for(int i = 0; i <arr.length ; i++){
for(int j = 0 ; j<arr[i].length ; j++){
System.out.print(arr[i][j]+",");
}
//换行
System.out.println();
}
}
}
数组的特点:
1.数组只能存储同一种数据类型的数据。
2.数组是会给存储到数组中的元素分配一个索引值的,索引值从0开始,最大的索引值是length-1;
3.数组一旦初始化,长度固定。
4.数组中的元素与元素之间的内存地址是连续的。
java(数组及常用简单算法 )的更多相关文章
- Java数组的一些基本算法
数组的一些算法问题: 排序:(升序) 选择排序: 求每一轮的最小值:再输出 冒泡排序: 相邻的两个数相比较,把两个数相比较,第一个大于好面的就交换位置 shell排序: ...
- java数组的常用函数
import java.util.*; class 数组索引{ public static void main(String args[]){ //数组中的使用工具:Arrays int[] arr ...
- JAVA 数组的常用操作
目录: 声明数组: 初始化数组: 查看数组长度: 遍历数组: int数组转成string数组: 从array中创建arraylist: 数组中是否包含某一个值: 将数组转成set集合: 将数组转成li ...
- java数组复制的简单方法(一)
总结:主要是用a数组的长度等于b数组,然后a数组赋值给b数组,我不能想到这个办法,我还是不理解数组中length属性的含义 这里数组并没有正真复制过来,而是一个引用 package com.a; // ...
- 一些常ArcGIS常用简单算法 C#
最近开始重构不顺眼的辣鸡代码,顺带将某个模块的一个算法辅助类贴到这里. /// <summary> /// 算法逻辑辅助类 /// </summary> internal st ...
- java数据结构之常用排序算法
冒泡排序 private void maopao(int arr[]) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j &l ...
- Java数组的12个常用方法
以下是12个关于Java数组最常用的方法,它们是stackoverflow得票最高的问题. 声明一个数组 String[] aArray = new String[5]; String[] bArra ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
随机推荐
- php八大设计模式之工厂模式
简单点来说,就是用到什么类,就去实例化对应的类.比如:php 可能连接 mysql,可能连接 sqlserver,也可能是 oracle 数据库,可以动态的去链接. 书籍<php权威编程> ...
- POJ-1456 Supermarket 贪心问题 有时间限制的最小化惩罚问题
题目链接:https://cn.vjudge.net/problem/POJ-1456 此题与HDU-1789完全是一道题 题意 有N件商品,分别给出商品的价值和销售的最后期限,只要在最后日期之前销售 ...
- [POI2008]PLA-Postering(单调栈)
题意 N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. (n<=250000,wi,di<=109) 题解 这种一堆矩形,又不像数据结构的题,一般都是单调栈. 考虑一个贪 ...
- (转载)详细图解mongodb下载、安装、配置与使用
记得在管理员模式下运行CMD,否则服务将启动失败 转载:http://blog.csdn.net/boby16/article/details/51221474 详细图解,记录 win7 64 安装m ...
- linux命令find命令详解
find 查找文件 find 哪里 什么类型 什么名字 -maxdepth 最大的深度 查找目录的最大深度 find -maxdepth 1 -type d -type 找什么类型的 f fil ...
- 关于memset赋最值
出处[辗转山河弋流歌 by 空灰冰魂] blog.csdn.net/vmurder/article/details/46537613 memset(a, 0x3f, sizeof(a)) //int, ...
- 【转】 java RSA加密解密实现
[转] java RSA加密解密实现 该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar 下载地址:http://download.csdn.net/detai ...
- dynamic_cast与能力查询
在C++里面,dynamic_cast 通常用于横向转换,而不是向上或者向下的转换. 这个常常用于检查某个实例,是否实现了某个接口类,那么就把这个实例,用dynamic_cast来转换成这个接口类的实 ...
- 【Android 进阶】图片载入框架之Glide
简单介绍 在泰国举行的谷歌开发人员论坛上,谷歌为我们介绍了一个名叫 Glide 的图片载入库,作者是 bumptech.这个库被广泛的运用在 google 的开源项目中,包含 2014 年 googl ...
- vue4 属性 class style
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...