Java笔记(八)……数组
数组的概念
同一种类型数据的集合。其实数组就是一个容器。
数组的好处
可以自动给数组中的元素从0开始编号,方便操作这些元素。
数组的格式
元素类型[] 数组名 = new 元素类型[个数];
int[] arr = new int[5];
元素类型[] 数组名 = new 元素类型[]{元素1,元素2,……};
int[] arr = new int[]{1,3,5,7};
元素类型[] 数组名 = {元素1,元素2,……};
int[] arr = {1,3,5,7};
内存结构
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存:
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不再被使用,会在不确定的时间内被垃圾回收器回收
数组的内存结构
二维数组
格式
格式一:int[][] arr = new int[2][3];
格式二:int[][] arr = new int[2][];
格式三:int[][] arr = {{2,3,4}{5,6,7}};
特殊格式:int[] x,y[];:此处,x为一维数组,y为二维数组
数组的常见操作
冒泡排序
1: class Sort
2: {
3: private Sort(){}
4:
5: //exchange
6: private static void exchange(int[] arr,int x,int y)
7: {
8: arr[x] = arr[x]^arr[y];
9: arr[y] = arr[x]^arr[y];
10: arr[x] = arr[x]^arr[y];
11: }
12:
13: //bubble sort
14: public static void bubbleSort(int[] arr)
15: {
16: for(int x = 0 ; x < arr.length-1 ; x ++)
17: {
18: for(int y = 0 ; y < arr.length-x-1 ; y ++)
19: {
20: if(arr[y] > arr[y+1])
21: {
22: exchange(arr,y,y+1);
23: }
24: }
25: }
26: }
27:
28: //print arr
29: public static void printArr(int[] arr)
30: {
31: for(int x = 0 ; x < arr.length ; x ++)
32: {
33: if(x != arr.length-1)
34: System.out.print(arr[x]+",");
35: else
36: System.out.println(arr[x]);
37: }
38: }
39: }
40: class SortDemo
41: {
42: public static void main(String[] args)
43: {
44: int[] arr = {8,7,6,5,4,3,1,2};
45:
46: Sort.printArr(arr);
47:
48: Sort.bubbleSort(arr);
49:
50: Sort.printArr(arr);
51: }
52: }
折半查找
1: class Search
2: {
3: private Search(){};
4:
5: //half search
6: public static int halfSearch(int[] arr,int key)
7: {
8: int min,mid,max;
9:
10: min = 0;
11: max = arr.length-1;
12:
13:
14: while(max >= min)
15: {
16: mid = (min+max)/2;
17:
18: if(key < arr[mid])
19: max = mid - 1;
20: if(key > arr[mid])
21: min = mid + 1;
22: if(key == arr[mid])
23: return mid;
24: }
25: return -1;
26: }
27:
28: }
29: class SearchDemo
30: {
31: public static void main(String[] args)
32: {
33: int[] arr = {1,2,3,4,5,6,7,8,9};
34:
35: int index = Search.halfSearch(arr,10);
36:
37: if(index == -1)
38: System.out.println("No key in this arr!");
39: else
40: System.out.println("index = "+index);
41: }
42: }
幸运儿问题
1: /*
2: 10个小孩围成一圈,从第一个小孩算起,数到3,
3: 则第三个小孩出列,接着向下数,数到3,
4: 则该小孩出列,求最后留下的小孩是哪个
5: */
6:
7: class LuckyNumber
8: {
9: public static void main(String[] args)
10: {
11: findLuck(10);
12: }
13:
14: public static void findLuck(int num)
15: {
16: int[] arr = new int[num];
17:
18: for(int i = 0 ; i < arr.length ; i ++)
19: {
20: arr[i] = 1;
21: }
22: //用于实际计数
23: int pos = 0;
24: //最终需要出圈的人数
25: int size = num;
26:
27: while(true)
28: {
29: for(int i = 0 ; i < arr.length ; i ++)
30: {
31: pos++;
32: if(arr[i] == 0)
33: pos--;
34: else if(pos%3 == 0)
35: {
36: arr[i] = 0;
37: size--;
38: //当所有人都出去之时,最后一个即为结果
39: if(size == 0)
40: {
41: System.out.println("index = "+i);
42: return;
43: }
44: }
45: }
46: }
47: }
48: }
Java笔记(八)……数组的更多相关文章
- Java笔记之数组
1.int flags[] = new int[10];数组中的每个元素初始化为0. Arrays.fill(flags, 0);将数组中每个元素置为0.
- [java笔记]动态数组
private int count;//计数器 private int ary[] = new int [3]; if(count >= ary.length){ //数组动态扩展 int ne ...
- Go语言学习笔记八: 数组
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...
- Java学习笔记四:Java的八种基本数据类型
Java的八种基本数据类型 Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. Java基本类型共有八种,基本类型可以分为三类,字符类型char,布 ...
- Java IO学习笔记八:Netty入门
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...
- [java小笔记] 关于数组内存管理的理解
数组是大多数编程语言都提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组,java语言的数组变量时引用类型的变量,因此具有java引用变量的特性.在使用数组之前必须对数组对象 ...
- 【原】Java学习笔记011 - 数组
package cn.temptation; import java.util.Scanner; public class Sample01 { public static void main(Str ...
- java笔记 -- 数组
概念: 数组是一种数据结构, 用来存储同一类型值的集合. 通过一个整型的下标可以访问数组中的每一个值. 声明: int[] a(推荐,将类型int[](整形数组)和变量名分开了) 或者int a[] ...
- 菜鸡的Java笔记 第七 - java 数组
数组的基本概念 笔试中经常出现的试题或是问题 1.1 概念 数组指的是一组相关变量的集合 如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...
随机推荐
- 51nod1079中国剩余定理
/** *中国剩余定理 */ #include<iostream> #include<cstdio> #include<map> #include<cstri ...
- 51nod动态规划-----矩阵取数
一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值. 例如:3 * 3的方格. 1 3 3 2 1 3 2 2 1 能够获得的最 ...
- CSS display:inline和float:left两者区别探讨
本文和大家重点讨论一下CSS display:inline和float:left两者的区别,CSS display是指显示状态,inline表示内联,特点是紧贴着前一个内联元素,通常默认的内联元素有 ...
- jQuery的基本信息。以及入门Demo
javascript目前最流行的框架jQuery,它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器.jQuery的作者的核心理念就是write less,do more(写得更少,做得更多).他 ...
- 最完美解决Nginx部署ThinkPHP项目的办法
网上通用解决方法的配置如下: server { ... location / { index index.htm index.html index.php; #访问路径的文件不存在则重写URL转交给T ...
- [Python][flask][flask-wtf]关于flask-wtf中API使用实例教程
简介:简单的集成flask,WTForms,包括跨站请求伪造(CSRF),文件上传和验证码. 一.安装(Install) 此文仍然是Windows操作系统下的教程,但是和linux操作系统下的运行环境 ...
- 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法
Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...
- 2014年度辛星css教程夏季版第一节
CSS是Cascading Style Sheets的缩写,即层叠样式表,它用于表现HTML的样式,即HTML只是去写该网页有哪些内容,至于如何去表现它们,由CSS去定制. ************* ...
- 一步步学习NHibernate(3)——NHibernate增删改查
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们配置了以下NHibernate的运行环境, 并介绍了NHibernate的中两个非常中重要的接口"I ...
- VS Extension: Open Web Address with Visual Studio Browser
使用VS 打开链接 using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; ... public ...
