• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java数据结构之数组(动力节点之Java学院整理)

Java数据结构之数组(动力节点之Java学院整理)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了java数组添加数据,java数组中添加数据,java把数据存入数组,java数组存数据,java数组怎么添加数据等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

数组的用处是什么呢?——当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用。数组可以进行插入,删除,查找等。

1)创建和内存分配

Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符。

 int array[] = new int[10]; 
</div>

既然是对象,那么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}; 
   } 
 } 
</div>

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(); 
   } 
 } 
</div>

将整个数组封装,用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; 
   } 
</div>

二分查找前提是数组已经有序。刚开始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学院整理),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java数据结构之数组(动力节点之Java学院整理)
  • Java数据结构之数组(动力节点之Java学院整理)

相关文章

  • 2017-05-28Java集合框架LinkedList详解及实例
  • 2017-05-28javaweb实现文件上传示例代码
  • 2017-05-28Java多态(动力节点Java学院整理)
  • 2017-05-28Java 读取外部资源的方法详解及实例代码
  • 2017-05-28解决Tomcat修改get提交请求乱码问题
  • 2017-05-28Spring boot集成Mybatis的方法教程
  • 2017-05-28Java Web中常用的分页组件(Java端实现)
  • 2017-05-28Java自定义异常_动力节点Java学院整理
  • 2017-05-28SWT(JFace)体验之模拟BorderLayout布局
  • 2017-05-28java实现留言板功能实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 个人模拟面试之基础知识+部分线程问题
    • Java汉字转成汉语拼音工具类
    • Java Web中常用的分页组件(Java端实现)
    • java中FileOutputStream中文乱码问题解决办法
    • SWT(JFace)体验之FormLayout布局
    • java连接数据库(代码分享)
    • MyBatis简介与配置MyBatis+Spring+MySql的方法
    • Spring-data-redis操作redis知识总结
    • Java本地缓存的实现代码
    • Java自定义注解实现Redis自动缓存的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有