1、数组是基本数据类型和字符串类型的容器(引用数据类型),而集合是类数据类型的容器;

2、数组定义的格式:
(1)一般格式:
元素类型[] 数组名 = new 元素类型[元素个数或者数组长度];
其中,元素类型[] 数组名是一个引用数据类型,存放在栈中;
new 元素类型[元素个数或者数组长度]存放在堆中数组对象,继承自Object。
(2)定义和静态初始化
元素类型[] 数组名 = {,,};
元素类型[] 数组名 = new 元素类型[元素个数或者数组长度]{
,,,,,,,};
注意:别忘了末尾的; 3、未初始化的数组的默认值问题,就是保存的基本类型的默认初始值
int[] rfInit = new int[3];
System.out.println(rfInit[0]);//0
String[] strInit = new String[3];
System.out.println(strInit[0]);//null 4、数组使用中常见问题
(1)数组越界:编译没有问题,但运行时报错。
int[] arr = new int[3];
System.out.println(arr[3]);
//ArrayIndexOfBoundsException3:操作数组时,访问到了数组中不存在的角标。
注:角标的最大值是长度减1;
(2)数组指向错误
String[] strNull = null;
System.out.println(strNull[0]);
//NullPointException :空指针异常,当引用没有任何指向为
null的情况,该引用还在用于操作实体。
5、数组引用值:
int[] a = {1,2,3,4};
System.out.println(a);
//结果: [I@1db9742 ,这个就是数组的引用值;其中,
[ 表示为数组,I 表示存放类型,1db9742哈希值表示在内存中的存放的十六进制地址。
6、数组操作(算法)
遍历、最大/最小值、排序(冒泡、选择和直接插入)、查找(折半)、删除数组元素操作和进制转化 (练习一遍)
(1)遍历
int[] arr = new int[3];
通过数组的属性arr.length可以获取数组的长度。
(2)最大/最小值:
a、存放值
(注:不能把存放最大值的变量赋值为0,因为数组中有负数,就会产生问题。)
b、存放角标
(注:存放角标的值可以为0,因为它代表数组的0角标数据)
(3)排序:从小到大
a、选择:内循环一次比较,选择出最小的放在最前面,所以减少前面
比较完的数量;(注:暂时保存最大或者最小值下标,最后再交换是一个
优化的方法。)
b、冒泡:内循环一次比较,最小值向前移动,最大值的沉底;所以减少
后面比较完的数量,
-x:让每一次比较的元素减少,-1:避免角标越界。
c、直接插入排序:就是拿出一个空位置,保存起来,接下来把这个位置前面
的元素和这个位置的值比较;如果大于,就一种元素,如果小于,就结束比较,
保存元素在现在的位置上。
注:java中,用Arrays.sort()排序;java中已经定义好的一种排序方式。
开发中,对数组排序。要使用该句代码。
(4)查找:折半查找
先排序,后折半比较;得到相应的数组的下标值。

  

import  java.util.*;  

class  ArrayTest2{
//选择排序
public static void selectSort(int[] arr){
//int temp = 0; for(int i=0;i<arr.length-1;i++){ //i下标跟j下标进行比较
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){ //先是第一个数据跟后面的元素都比较完之后(此时,第一个数据绝对是最小的元素),才开始第二个数据与后面的数据进行比较
//temp = arr[i];
//arr[i] = arr[j];
//arr[j] = temp;
swap(arr,i,j);
}
}
}
} //冒泡排序或者就沉底排序
public static void bubbleSort(int[] arr){
//int temp =0;
for(int i =0;i<arr.length-1;i++){ //j下标和j+1下标进行比较
for(int j=0;j<arr.length-1-i;j++){ //-1-i是因为最后一个元素已经确定排好,不用再比较
if(arr[j]>arr[j+1]){
//temp = arr[i];
//arr[i] = arr[j];
//arr[j] = temp;
swap(arr,j,j+1);
}
}
}
} //优化后的选择排序
public static void optimizeSort(int[] arr){
int min;
for(int i=0;i<arr.length-1;i++){
min =i;
for(int j=i+1;j<arr.length;j++){
if(arr[min]>arr[j]){
min = j;
}
}
swap(arr,i,min);
}
} //直接插入排序
public static void insertSort(int[] arr){
for (int i = 1; i < arr.length; i++)
{
//从1角标开始取值,取出一个空位置来
if (arr[i - 1] > arr[i])
{
//一次插入的过程
int temp = arr[i];
int j = i; //比较移动位置,因为有空位置存在,不会就是元素
while (j > 0 && arr[j - 1] > temp)
{
arr[j] = arr[j - 1];
j--;
} //放在合适的位置上
arr[j] = temp;
}
}
} public static void swap(int[] arr,int x,int y){
int temp = 0;
temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
} public static void printArray(int[] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1)
System.out.print(arr[i]+", ");
else
System.out.println(arr[i]+" ]");
} } public static void main(String[] args){
int[] a = new int[]{3,1,4,9,6,2};
printArray(a); //selectSort(a);
//printArray(a); //bubbleSort(a);
//printArray(a); //optimizeSort(a);
//printArray(a); insertSort(a);
printArray(a); //Arrays.sort(a);
//printArray(a);
}
}

  

Java中数组要点总结的更多相关文章

  1. 第79节:Java中一些要点

    第79节:Java中一些要点 前言 一些知识点忘了没,可以通过一个点引出什么内容呢?做出自己的思维导图,看看自己到了哪一步了呢 内容 如果有人问jre,jdk,jvm是什么,你怎么回答呢? jre的英 ...

  2. java中数组的相关知识

      1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...

  3. Java中数组的特性

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...

  4. 在java 中,数组与 List<T> 类型的相互转换

    在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 ...

  5. Java中数组的初始化方式

    Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...

  6. JAVA 中LinkedHashMap要点记录

    JAVA 中LinkedHashMap要点记录 构造函数中可能出现的几个参数说明如下: 1.initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16 2.loadFactor ...

  7. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  8. Java中数组的插入,删除,扩张

    Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...

  9. java中数组、集合、字符串之间的转换,以及用加强for循环遍历

    java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...

随机推荐

  1. 00 python基础知识

    ''' ''' print('hello world!') ''' 变量 ''' # 变量的:‘tank’,会在内存中产生一份内存地址 #变量名:相当于一个门牌号,用于与变量进行绑定 # = :用来把 ...

  2. 零基础学习Linux培训,应该选择哪个培训班?

    云计算早已不是什么稀奇的概念,它的火爆让Linux运维工程师这个职业越来越重要.在当今各类云平台提供的系统中,Linux系统几乎毫无争议的独占鳌头,市场份额进一步扩张. 这也让Linux运维工程师职位 ...

  3. BZOJ 2096: [Poi2010]Pilots 单调队列

    Code: #include<bits/stdc++.h> #define maxn 4000000 using namespace std; void setIO(string s) { ...

  4. 模态框(layer)

    推荐一个好看的模态框(layer)   地址:http://layer.layui.com/ 相应列子及配置  全部来自于官网,可直接访问官网学习了解. //信息框-例1 layer.alert('见 ...

  5. 针对mdadm的RAID1失效测试

    背景 对软RAID(mdadm)方式进行各个场景失效测试. 一.初始信息 内核版本: root@omv30:~# uname -a Linux omv30 4.18.0-0.bpo.1-amd64 # ...

  6. debian 7 安装

    1. 从 live cd 或者 dvd 进行安装,官方文档已经够用,可以将 live cd 写进 u 盘,也可以将 dvd 放到硬盘上通过 grub 引导启动安装,文档在这里. 2.安装过程中尽量选择 ...

  7. mysql-索引、导入、导出、备份、恢复

    1.索引 索引是一种与表有关的结构,它的作用相当于书的目录,可以根据目录中的页码快速找到所需的内容. 当表中有大量记录时,若要对表进行查询,没有索引的情况是全表搜索:将所有记录一一取出,和查询条件进行 ...

  8. [Usaco2007 Dec]队列变换

    [Usaco2007 Dec]队列变换 题目 FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛”.在这场比赛中,每个参赛者都必须让他的奶牛排成一 ...

  9. 算是学完了《Servlet&JSP学习笔记》,立此存照

    我感觉从构架上来说,算是入门了, 终于可以正式进入SPRING的学习啦...爽 代码就不弄了,真的太多了...花了差不多两周呢..

  10. N天学习一个linux命令之yum

    yum命令 用途 yum(Yellowdog Updater Modified),RedHat系Linux操作系统包管理器,基于rpm,从源远程仓库下载rpm包安装,同时解决依赖关系,使用Python ...