Java数据结构之数组(动力节点之Java学院整理)
作者:mrr 发布时间:2023-09-23 21:20:12
数组的用处是什么呢?——当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用。数组可以进行插入,删除,查找等。
1)创建和内存分配
Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符。
int array[] = new int[10];
既然是对象,那么array便是数组的一个引用,根据Java编程思想(一) —— 一切都是对象 的内存分配,array会在栈中开辟空间,并且空间存储着保存数组存储的地址,真正保存对象的地方是对,new操作在堆中开辟了所需的空间,然后array指向头地址。
初始化:
public class UseArray {
public static void main(String[] args) {
int array[] = new int[10];
System.out.println(array[2]);
UseArray a[] = new UseArray[12];
System.out.println(a[1]);
int array2[] ={1,2,3,4,5,5,6};
}
}
new后的数组里面的值被默认初始化为0,而对象的初始化是空的,null,当然还可以通过{}的方式初始化。
2)数组封装后的使用
public class UseArray {
private int[] array;
private int number = 0;
public UseArray(int max){
array = new int[max];
}
public void insert(int value){
array[number] = value;
number++;
}
public int find(int value){
for (int i= 0; i < number; i++) {
if(array[i]==value)
return i;
}
return number;
}
public boolean delete(int value){
int index = find(value);
if(index != number){
for (int i = index; i < number-1; i++) {
array[i] = array[i+1];
}
number--;
return true;
}
return false;
}
public void display(){
for (int i = 0; i < number; i++) {
System.out.printf(array[i]+" ");
}
}
public static void main(String[] args) {
UseArray ua = new UseArray(5);
ua.insert(1);
ua.insert(2);
ua.insert(6);
ua.insert(7);
ua.insert(3);
ua.display();
if(ua.find(5) != ua.number){
System.out.println("find,the number index is "+ua.find(5));
}else{
System.out.println("not found!");
}
if(ua.delete(5)!=true){
System.out.println("can not delete!");
}
ua.display();
}
}
将整个数组封装,用number代替数组的个数,插入数据的时候也不必理会往哪个下标插,当然,也可以自定义一个具体下标的方法。
方法比较简单就不介绍了,但是存在的一个缺点在delete那里,其实只是从删除元素开始的左移而已,所以,虽然number减少了,但是最后一个元素并没有删除掉,只是display输出展示的时候隐藏了而已,但是,下次插入元素的时候新元素便会取代掉最后一个元素的位置。
3)查找优化——二分查找
public int find(int value){
int start = 0;
int end = number-1;
while(end>=start){
int index =(end + start)/2;
if(array[index]==value){
return index;
}else if(array[index] >value){
end = index-1;
}else {
start = index+1;
}
}
return number;
}
二分查找前提是数组已经有序。刚开始index写成end和start相减,造成死循环。其实要的是相加。1,2,3,6,7。index=2,value=7,3小于7,start=3,那么index要的是3和4间的中间数,所以是相加之后除以2,6小于7,start=4,find到7。
4)大O表示法
设N为数据总数,加入插入一个数据时间为K。那么线性查找总时间T=K*N/2,因为查找的话大概为比较数目的一半。
二分查找的话T=k*log2(N)。大O表示法,O可以看成是order of,大约是的意思,k/2也是常数,所以可以看成是O(N)。
数组的缺点呢,就是大小固定,查找慢,如果你要经常查找百万级别的数据,还会用数组吗?不会的,所以数据结构的选用要结合具体的实际情况,达到最大的效率值。
以上所述是小编给大家介绍的Java数据结构之数组(动力节点之Java学院整理)网站的支持!


猜你喜欢
- Java继承方法重写是Java语言多态的特性,必须满足以下条件在子类中,方法名称与父类方法名称完全相同方法的参数个数和类型完全相同,返回类型
- 实例如下所示:public class JsonExtracter { public static void main(String[] a
- 现在我们上网会用百度或者谷歌搜索信息,当我们在输入框里输入一两个字后,就会自动提示我们想要的信息,这种效果在Android 是通过
- 有参数传递的地方都少不了参数校验。在web开发中,前端
- SpringBoot项目当中支持的三类配置文件:application.propertiesapplication.ymlapplicati
- 本文实例为大家分享了Java实现斗地主游戏的具体代码,供大家参考,具体内容如下原理图:斗地主过程: 1、组合牌&nb
- Seata介绍Seata:Simple Extensible Autonomous Transaction Architecture,简易可
- 我们在C#编程中常见的信息提示框(MessageBox)是微软NET自带的一个用于弹出警告、错误或者讯息一类的“模式”对话框。此类对话框一旦
- 排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料。废话不多说,下面逐一看看经典的排
- IDEA配置阿里规范插件P3C进入idea -》File -》 Settings -》Plugins到搜索框中搜索:Alibaba Java
- 多点触摸技术在实际开发过程中,用的最多的就是放大缩小功能。比如有一些图片浏览器,就可以用多个手指在屏幕上操作,对图片进行放大或者缩小。再比如
- 本文实例讲述了Java构造代码块,静态代码块原理与用法。分享给大家供大家参考,具体如下:本文内容:局部代码块构造代码块静态代码块补充&nbs
- 在注册表启动项里添加一项,路径:SOFTWARE\Microsoft\Windows\CurrentVersion\Run或者直接:运行-&
- 经度指示南北方向,纵向纬度指示东西方向,横向获取经纬度使用GPS权限:<uses-permission android:name=&q
- 当采用HttpClient httpClient = HttpClients.createDefault() 实例化的时候。会导致Addre
- 随着互联网的蓬勃发展,越来越多的互联网企业面临着用户量膨胀而带来的并发安全问题。本文着重介绍了在java并发中常见的几种锁机制。1.偏向锁偏
- 翻译自 John Demetriou 2019年2月17日 的文章 《C# 8 – Introducing Index Struct And
- 前言前面说到在我们应对高并发的场景,请求量过于大的情况下给我们服务器的压力很多,造成缓存穿透、击穿、雪崩,那么我们采用布隆过滤器,有兴趣的小
- 本文实例为大家分享了C#用timer实现背单词小程序的具体代码,供大家参考,具体内容如下看到网上有类似的教程视频实现单词本,于是自己敲了一个
- 1. 异常处理概述空指针引用 NPE 是编程语言最常见的异常,数十年来无处不在的和程序打交道,在Java中,我们使用“防