zoukankan      html  css  js  c++  java
  • Java数组

    数组 及Arrays实用功能

    1.问题来源

    在学习容器的时候,对容器(集合)和数组在使用时如何选择有较大的问题?

    2.数组

    数组及其他类容器的区别

    • 效率
    • 类型
    • 保存基本类型的能力

    java中时内置数组Array,就是一个简单的线性序列

    对于简单的数组

    • 创建并组装他们
    • 通过index访问元素 ,[]
    • 尺寸不能改变
    • 只读成员length

    数组的标识符只是一个引用,指向堆中创建的真实对象,数组中的对象保存指向其他对象的引用

    对象数组是引用
    基本类型数组是保存基本类型的值

    java与C/C++的区别

    java中的方法是可以直接返回数组元素
    c/c++不能返回数组元素,是要返回指向数组的指针,导致难以控制数组的生命周期,导致内存泄漏

    3.Arrays的功能

    一个重要知识点:

    1.快速的复制数组
    System.arraycopy() 实现的数组复制要比for-each循环快的多

    public static void arraycopy​(Object src, int srcPos, Object dest, int destPos, int length)
    

    需要注意的是

    • 1.基本类型和对象类型都可以复制
    • 2.对象类型的复制是复制了引用,不是对象本身的拷贝(浅拷贝)
    • 3.不会进行自动的装箱、拆箱;src,dest必须具有相同的类型

    2.Arrays中的常用static方法

    • 1.equals() ,数组的比较
    • 2.asList() ,将任意序列或数组转换为List容器(适配器模式)
    • 3.fill() ,快速填充数组
    • 4.sort() ,排序
    • 5.binarySearch() ,二分查找
    • 6.toString() ,产生数组的String表示
    • 7.hashCode() ,数组的散列码

    3.数组元素的比较 Comparble Comparator

    为了满足代码对各种类型的复用性

    • 将保持不变的事物与会发生改变的事物相分离
    • 不变的是通用排序算法,变化的是各种对象的比较形式
    • 使用策略设计模式,将会发生变换的代码封装在类中(策略对象)

    java.lang.Comparable接口

    • compareTo()方法

    实现方法后,直接Arrays.sort()

    Comparator接口

    • compare()方法

    实现方法后,Arrays.sort(a,new Comparator())

    基本类型无法使用Comparator进行排序

    4.容易混淆的概念

    • Array 数组,是居于索引的数据结构。获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的数据

    • List 是一个有序的集合(接口),可以包含重复元素

    • List 的两个实现类 ArrayList,LinkedList

    • ArrayList 是基于数组实现的能够自动增长容量的数组。

    • LinkedList 是双链表,添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList

    reference

    1.thinking in java 中文版(第四版) 16章数组
    2.CyC2018

  • 相关阅读:
    ListView的删除绑定有问题
    ListView的查询绑定
    突然发现这个VSPaste插件粘贴过来的代码居然有白色背景,还只有一部分有,好纠结。。。
    IIS8中部署WCF服务出错:HTTP 错误 404.3 Not Found
    VS2012更新Update1后帮助查看器无法打开
    VS中的一些有用的小工具
    关于ASP.NET的数据绑定
    关于SQL SERVER中TSQL语句的变量
    关于ADO.NET使用中遇到的一些错误
    C#简单的多线程
  • 原文地址:https://www.cnblogs.com/GeekDanny/p/11833836.html
Copyright © 2011-2022 走看看