一天一个变成了几天一个,最近接受的新东西太多、太快,有好多需要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. MVC4 错误: 检测到有潜在危险的 Request.Form值

    说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止.该值可能指示存在危及应用程序安全的尝试,如跨站点脚本攻击.若要允许页面重写应用程序请求验证设置,请将 httpRuntime  ...

  2. Tower of Hanoi问题

    [问题描述] 有A, B, C三个塔座,A上套有n个直径不同的圆 盘,按直径从小到大叠放,形如宝塔,编号1, 2, 3 … n. 要求将n个圆盘从A移到C,叠放顺序不变,移动过程中遵循 下列原则: w ...

  3. epoll 知识总结

    poll/select/epoll 对比 http://www.cnblogs.com/apprentice89/p/3234677.html    ---有待继续学习 http://blog.chi ...

  4. Chp18: Hard

    18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators. Solut ...

  5. UVA 10523 Very Easy!!!(大数据加法、乘法)

    题意:给出N,A,计算i*A^i(i=1~N)的和.1<=N<=30,0<=A<=15. 就是大数据运算,别的没什么,注意细节之处即可. 这题还要注意两个地方: 1.考虑A=0 ...

  6. sql 判断两个时间段是否有交集

    本文转自CSDN 链接地址:http://blog.csdn.net/dasihg/article/details/8450195 时间段:starttime_1到endtime_1,starttim ...

  7. lintcode:First Missing Positive 丢失的第一个正整数

    题目 丢失的第一个正整数 给出一个无序的整数数组,找出其中没有出现的最小正整数. 样例 如果给出 [1,2,0], return 3 如果给出 [3,4,-1,1], return 2 挑战 只允许时 ...

  8. POJ1470 Closest Common Ancestors

    LCA问题,用了离线的tarjan算法.输入输出参考了博客http://www.cnblogs.com/rainydays/archive/2011/06/20/2085503.htmltarjan算 ...

  9. swift学习笔记-UI篇之UIImageView

    1.基本使用 将要使用的图片拖入到项目里,我这里使用的是名为“1.jpg”的图片,然后创建UIImageView,并设置要显示的图片为"1.jpg"//1. 基本使用 let im ...

  10. erp中三大订单CO、PO、MO各是代表什么?

    ERP即 企业资源计划 (Enterprise Resource Planning),由美国 Gartner Group 公司于1990年提出. ERP系统是指建立在信息技术基础上,以系统化的管理思想 ...