一天一个Java基础——数组
一天一个变成了几天一个,最近接受的新东西太多、太快,有好多需要blog的但没有时间,这些基础知识应该是要深挖并好好研究的,不应该每次都草草了事,只看个皮毛。
数组:
JVM将数组存储在一个称为堆(heap)的内存区域中,堆用于动态内存分配,在堆中内存块可以按随意的顺序分配和释放
1.int[] a; ——表示声明一个数组(也可写为 int a[];)
声明一个数组变量时并不在内存中给数组分配任何空间,只是创建一个对数组的引用的存储位置
如果变量不包含对数组的引用,那么这个变量的值为null
通过new操作符创建数组
使用数组初始化语法时,必须将声明、创建和初始化数组都放在一条语句中,如下面代码是错误的:
double[] myList;
myList = {1, 2, 3};
2.数组在方法中的传递
public static void main(String[] args) {
int x = 1;
int[] y = new int[10];
m(x,y);
syso("x is " + x);
syso("y[0] is" + y[0]);
}
public void m(int number, int[] numbers) {
number = 10;
numbers[0] = 10;
}
//output:
x is 1
y[0] is 10
这是因为:
对于基本数据类型参数,传递的是实参的值
对于数组类型参数,参数值是数组的引用,给方法传递的是这个引用
3.查询
线性查询与二分查询
package Test; public class Test2 {
/**
* 二分查找:
* 使用二分查找法的前提条件是数组中的元素必须已经排好序
* 二分查找法首先将关键字与数组的中间元素进行比较,有下面3种情况
* 1.如果关键字小于中间元素,只需要在数组的前一半元素中继续查找
* 2.如果关键字大于中间元素,只需要在数组的后一半元素中继续查找
* 3.如果关键字与中间元素相等,那么就找到了,查找结束
* 如一个有1024(2^10)个元素的数组,最好情况下只需要比较11次,最坏情况下要比较1023次
*/ public static void main(String[] args) {
int[] list = {1, 4, 4, 2, 5, -3, 6, 2};
int i = lineraSearch(list, 4);
System.out.println(i);
int j = lineraSearch(list, -4);
System.out.println(j);
int k = lineraSearch(list, -3);
System.out.println(k); int[] list1 = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
int i1 = binarySearch(list1, 2);
System.out.println(i1);
int j1 = binarySearch(list1, 11);
System.out.println(j1);
int k1 = binarySearch(list1, 79);
System.out.println(k1); //output:
/*
1
-1
5
0
4
12
*/
} /**
* 线性查找法——最简单、最low
* @param list
* @param key
* @return
*/
public static int lineraSearch(int[] list, int key) {
for (int i = 0; i < list.length; i++) {
if (key == list[i]){
return i;
}
}
return -1;
} /**
* 二分查找法
* @param list
* @param key
* @return
*/
public static int binarySearch(int[] list, int key) {
int low = 0;
int high = list.length - 1;
while (high >= low) {
int mid = (high + low) / 2;
if (key < list[mid]) {
high = mid - 1;
} else if (key == list[mid]) {
return mid;
} else {
low = mid + 1;
}
}
return -1;
} }
4.排序
选择排序
/*
* 选择排序
* 1.选择排序法先找到数列中最小的数
* 2.然后将它放在数列的最前面
* 3.在剩下的数中,循环1、2操作
*/
public static void selectionSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
int minValue = array[i];
int minIndex = i;
for (int j = i + 1;j < array.length;j++) {
if (array[j] < minValue) {
minValue = array[j];
minIndex = j;
}
}
if (minIndex != i) {
array[minIndex] = array[i];
array[i] = minValue;
}
}
}
插入排序
/*
* 插入排序
* 1.外层循环(循环控制变量i)的迭代是为了获取已排好序的子数列
* 2.内层循环(循环控制变量k)将list[i]插入到从list[0]到list[i-1]的子数列中
*/
public static void insertionSort(int[] array) {
for (int i = 1; i < array.length; i++) {
int minValue = array[i];
int k;
for (k = i - 1;k >= 0 && minValue < array[k]; k--) {
array[k + 1] = array[k];
}
array[k + 1] = minValue;
}
}
冒泡排序
快速排序
一天一个Java基础——数组的更多相关文章
- Java基础——数组应用之StringBuilder类和StringBuffer类
接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...
- java基础-数组的折半查找原理
java基础-数组的折半查找原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让你写一个数组的查找功能,需求如下:在一个数组中,找一个元素,是否存在于数组中, 如果存在就返回 ...
- Java基础-数组常见排序方式
Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...
- 《Java基础——数组的定义与使用》
Java基础--数组的定义与使用 一. 一维数组: 格式一: 数组类型 数组变量[]=new 数据类型[长度]; //需要后续赋值,且后续赋值时只能为单个元素赋值. 或 数组类型 数组变量 ...
- Java基础——数组Array
一.数组基本概念 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们. 数组有三 ...
- Java基础--数组(Arrays)
数组(Array),是多个相同类型数据按一定顺序排列 的集合,并使用一个名字命名,并通过编号的方式 对这些数据进行统一管理.本篇博客是对Java基础中的数组进行详细说明. 目录: 数组的概述 一维数组 ...
- java基础---数组的基本概念(1)
学习资源来自尚硅谷java基础学习 1. 数组的概念 数组(Array), 是多个相同类型数据按一定顺序排列的集合, 并使用一个名字命名, 并通过编号的方式对这些数据进行统一管理. 数组属于引用数据类 ...
- java基础-数组
浏览以下内容前,请点击并阅读 声明 定义:数组是一个能容纳固定数量,类型单一的若干个值的容器.注意,数组是一个对象. 数组一旦创建,则其长度固定不变,数组中的所有值叫元素(Element),获取元素要 ...
- 一天一个Java基础——泛型
这学期的新课——设计模式,由我仰慕已久的老师传授,可惜思维过快,第一节就被老师挑中上去敲代码,自此在心里烙下了阴影,都是Java基础欠下的债 这学期的新课——算法设计与分析,虽老师不爱与同学互动式的讲 ...
随机推荐
- SPOJ 7259 Light Switching (水题,区间01取反)
#include <iostream> #include <stdio.h> #include <algorithm> #define lson rt<< ...
- 小米2S 连接Ubuntu Android Studio
1. 首先打开手机上的开发者选项,USB调试.拨号:*#*#717717#*#* ,手机会以Toast形式出现“……enable”字样.再次拨号可disable. 2. Ubuntu安装mtpfs: ...
- 网络上下载的Ghost系统含威胁
- JTable单元格放自定义控件(一)-如何在JTable的单元格放JPanel
原文链接:http://blog.sina.com.cn/s/blog_7f1c8c710101hdpf.html 最近自己尝试着模仿着实现一款非常有名的进销库存管理系统(智慧记)里面的一个功能.功能 ...
- JavaScript基础精华01(变量,语法,数据类型)
JavaScript是一种脚本语言. 脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行 JavaScript基本组成 1.基本语法(浏览器基本都支持,有统 ...
- 神经网络第三部分:网络Neural Networks, Part 3: The Network
NEURAL NETWORKS, PART 3: THE NETWORK We have learned about individual neurons in the previous sectio ...
- 简化PHP开发的10个工具
本文介绍了可以帮助简化 PHP 开发的11个项目,包括框架,类库,工具,代码. 1. CakePHP Development Framework CakePHP 是一个 PHP 的快速开发框架.它提供 ...
- 设计模式之Inheritance versus Parameterized Types 继承和参数化类型
Another (not strictly object-oriented)technique for reusing functionality is through parameterized t ...
- maven项目配置Jetty服务器
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin ...
- TeeChart显示三维的图形,使用Surface
绘制一个球 根据公式x^2+y^2+z^2=R^2; 令x=RsinAcosB y=RcosAcosB z=RsinB using System; using System.Collections. ...