(二)Java数组的使用
Java数组
无序数组插入删除查询操作:
public class ArrayList {
private static int[] intArray;
private int nElems;
public ArrayList(int max){
intArray=new int[max];
nElems=0;
}
public boolean find(long searchKey){
int j;
for(j=0;j<nElems;j++){
if(intArray[j]==searchKey){
break;
}
}
if(j==nElems){
return false;
}else{
return true;
}
}
public void insert(int value){
intArray[nElems]=value;
nElems++;
}
public boolean delete(int value){
int j;
for(j=0;j<nElems;j++){
if(value==intArray[j]){
break;
}
}
if(j==nElems){
return false;
}else{
for(int k=j;k<nElems;k++){
intArray[k]=intArray[k+1];
}
nElems--;
return true;
}
}
public void display(){
for(int j=0;j<nElems;j++){
System.out.print(intArray[j]+" ");
}
System.out.println();
}
public static void main(String[] args) {
int maxSize=100;
ArrayList arr=new ArrayList(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33);
arr.display();
int searchKey=11;
if(arr.find(searchKey)){
System.out.println("found "+searchKey);
}else{
System.out.println("can't found "+searchKey);
}
arr.delete(55);
arr.display();
}
}
二分查找,按序插入
//线性查找,二分查找
public class OrderList { private static int[] intArray;
private int nElems; public OrderList(int max) {
intArray = new int[max];
nElems = 0;
} public int size() {
return nElems;
} // 猜数游戏
// 二分查找
public int find(int searchKey) {
int lowerBound = 0;
int upperBound = nElems - 1;
int curIn;
while (true) {
curIn = (lowerBound + upperBound) / 2;
if (intArray[curIn] == searchKey) {
return curIn;
} else if (lowerBound > upperBound) {
return nElems;
} else {
if (intArray[curIn] < searchKey) {
lowerBound = curIn + 1;
} else {
upperBound = curIn - 1;
}
}
}
}
//按顺序插入
public void insert(int value) {
int j;
for (j = 0; j < nElems; j++) {
if (intArray[j] > value) {
break;
}
}
for (int k = nElems; k > j; k--) {
intArray[k] = intArray[k - 1];
}
intArray[j] = value;
nElems++;
} public boolean delete(int value){
int j=find(value);
if(j==nElems){
return false;
}else{
for(int k=j;k<nElems;k++){
intArray[k]=intArray[k+1];
}
nElems--;
return true;
}
} public void display(){
for(int j=0;j<nElems;j++){
System.out.print(intArray[j]+" ");
}
System.out.println();
} public static void main(String[] args) {
int maxSize=100;
OrderList arr=new OrderList(maxSize); arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33); arr.display(); int searchKey=11;
if(arr.find(searchKey)!=arr.size()){
System.out.println("found "+searchKey+":"+arr.find(searchKey));
}else{
System.out.println("can't found "+searchKey);
}
arr.delete(55);
arr.display();
}
}
效率
| 线性查找 | O(N) |
| 二分查找 | O(log N) |
| 无序数组插入 | O(1) |
| 有序数组插入 | O(N) |
| 无序数组删除 | O(N) |
| 有序数组删除 | O(N) |
(二)Java数组的使用的更多相关文章
- java怎么定义一个二维数组?
java中使用 [][] 来定义二维数组 定义数组时也可同时初始化下面是一些例子float[][] numthree; //定义一个float类型的2维数组numthree=new float[5][ ...
- Java的二维数组的应用及杨辉三角的编写
(1) 编写一个程序,生成一个10*10的二维随机整数数组,并将该数组的每行最大值保存于一个一维数组中,将每列平均值保存于另外一个一维数组中并分别输出. (2) 编程输出杨辉三角的前10行. 找出一个 ...
- java二维数组的定义
java中的一维数组的定义都熟了,但是二位数组和一维数组的定义有些微差别.在网上看到了篇文章,总结的很详细.转载下了. 原文链接[http://blog.sina.com.cn/s/blog_6189 ...
- java 获取数组(二维数组)长度实例程序
我们可能知道 js有个length函数,java也有啊length函数 例 如果数组是data[],则data.length 代码如下 复制代码 byte[] phone =new byte[81]; ...
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
1.数组基础 1.什么是数组: 同一类型数据的集合,就是一个容器. 2.数组的好处: 可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式: (一 ...
- Java中的二维数组
Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空 ...
- java学习之二维数组
java当中的二维数组,存储一组比较特殊的对象.他存储一个数组,同时存储的数组当中又存储着元素. java二维数组的声明方式一: class Arr2Demo { public static void ...
- JAVA二维数组小记
入手JAVA第二天 //二维数组 //数据类型 [][] 数组名 = new 数据类型[行的个数][列的个数];3 String [][] name = {{"admin",&qu ...
- Java菜鸟学习笔记--数组篇(三):二维数组
定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...
- java二维数组学习(转)
转自:http://blog.csdn.net/java1992/article/details/5808709,在这里谢过了 /* * java学习: * 二维数组的使用: */public cla ...
随机推荐
- 01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】
day01[Object类.常用API] 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 java.lang.O ...
- HTTP、MQTT、WebSocket有什么区别
https://blog.csdn.net/linyunping/article/details/81950185 相同点:均为OSI 7层模型(应用层.表示层.会话层.传输层.网络层.数据链路层.物 ...
- 【C#并发】00概述
摘自<C#并发编程经典实例>[美]Stephen Cleary 并发:同时做多件事情.终端用户利用并发功能,在输入数据库的同时相应用户输入.服务器应用并发,在处理第一个请求的同时响应第二个 ...
- 量化投资_关于Multicharts砖型图(传统砖型图和非传统砖型图)最详细的解释_调用篇
1. 砖图形成数组后,我们再对他们复制到数组中然后再调用出来看一下. 2. 如下是累计只取20个数组大小为例,如果开始阶段数组长度组成初始的Array[20]的长度,然后这个数组的最后一个值填满后,进 ...
- 蓝桥杯 K好数(dp)
Description 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.1 ...
- mysql统计指定数据库的各表的条数
mysql统计指定数据库的各表的条数 SELECT table_schema,table_name,table_rows,CREATE_TIME FROM TABLES WHERE TABLE_SCH ...
- vim 高级技巧
复制粘贴 normal 或v模式下 y/d/x 复制后,p来粘贴 编辑模式 默认的 set autoindent 会导致粘贴代码会导致缩进混乱 一则可以先关掉autoindent,二则可以先设置set ...
- Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated"}的解决方法
左侧菜单栏时,发现点击路由跳转相同地址 会有这个报错 Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplic ...
- spark-shell使用指南. - 韩禹的博客
在2.0版本之前,Spark的主要编程接口是RDD(弹性分布式数据集),在2.0之后,则主推Dataset,他与RDD一样是强类型,但更加优化.RDD接口仍然支持,但为了更优性能考虑还是用Datase ...
- 吴裕雄--天生自然 JAVA开发学习:网络编程
import java.net.*; import java.io.*; public class GreetingClient { public static void main(String [] ...