一天一个变成了几天一个,最近接受的新东西太多、太快,有好多需要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基础——数组的更多相关文章

  1. Java基础——数组应用之StringBuilder类和StringBuffer类

    接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...

  2. java基础-数组的折半查找原理

    java基础-数组的折半查找原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让你写一个数组的查找功能,需求如下:在一个数组中,找一个元素,是否存在于数组中, 如果存在就返回 ...

  3. Java基础-数组常见排序方式

    Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...

  4. 《Java基础——数组的定义与使用》

    Java基础--数组的定义与使用       一. 一维数组: 格式一: 数组类型 数组变量[]=new 数据类型[长度]; //需要后续赋值,且后续赋值时只能为单个元素赋值. 或 数组类型 数组变量 ...

  5. Java基础——数组Array

    一.数组基本概念 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们. 数组有三 ...

  6. Java基础--数组(Arrays)

    数组(Array),是多个相同类型数据按一定顺序排列 的集合,并使用一个名字命名,并通过编号的方式 对这些数据进行统一管理.本篇博客是对Java基础中的数组进行详细说明. 目录: 数组的概述 一维数组 ...

  7. java基础---数组的基本概念(1)

    学习资源来自尚硅谷java基础学习 1. 数组的概念 数组(Array), 是多个相同类型数据按一定顺序排列的集合, 并使用一个名字命名, 并通过编号的方式对这些数据进行统一管理. 数组属于引用数据类 ...

  8. java基础-数组

    浏览以下内容前,请点击并阅读 声明 定义:数组是一个能容纳固定数量,类型单一的若干个值的容器.注意,数组是一个对象. 数组一旦创建,则其长度固定不变,数组中的所有值叫元素(Element),获取元素要 ...

  9. 一天一个Java基础——泛型

    这学期的新课——设计模式,由我仰慕已久的老师传授,可惜思维过快,第一节就被老师挑中上去敲代码,自此在心里烙下了阴影,都是Java基础欠下的债 这学期的新课——算法设计与分析,虽老师不爱与同学互动式的讲 ...

随机推荐

  1. SPOJ 7259 Light Switching (水题,区间01取反)

    #include <iostream> #include <stdio.h> #include <algorithm> #define lson rt<< ...

  2. 小米2S 连接Ubuntu Android Studio

    1. 首先打开手机上的开发者选项,USB调试.拨号:*#*#717717#*#*  ,手机会以Toast形式出现“……enable”字样.再次拨号可disable. 2. Ubuntu安装mtpfs: ...

  3. 网络上下载的Ghost系统含威胁

  4. JTable单元格放自定义控件(一)-如何在JTable的单元格放JPanel

    原文链接:http://blog.sina.com.cn/s/blog_7f1c8c710101hdpf.html 最近自己尝试着模仿着实现一款非常有名的进销库存管理系统(智慧记)里面的一个功能.功能 ...

  5. JavaScript基础精华01(变量,语法,数据类型)

    JavaScript是一种脚本语言. 脚本,一条条的文字命令.执行时由系统的一个解释器,将其一条条的翻译成机器可识别的指令,然后执行 JavaScript基本组成 1.基本语法(浏览器基本都支持,有统 ...

  6. 神经网络第三部分:网络Neural Networks, Part 3: The Network

    NEURAL NETWORKS, PART 3: THE NETWORK We have learned about individual neurons in the previous sectio ...

  7. 简化PHP开发的10个工具

    本文介绍了可以帮助简化 PHP 开发的11个项目,包括框架,类库,工具,代码. 1. CakePHP Development Framework CakePHP 是一个 PHP 的快速开发框架.它提供 ...

  8. 设计模式之Inheritance versus Parameterized Types 继承和参数化类型

    Another (not strictly object-oriented)technique for reusing functionality is through parameterized t ...

  9. maven项目配置Jetty服务器

    <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin ...

  10. TeeChart显示三维的图形,使用Surface

    绘制一个球 根据公式x^2+y^2+z^2=R^2; 令x=RsinAcosB  y=RcosAcosB z=RsinB using System; using System.Collections. ...