Java集合--数组

作者: Aruforce | 来源:发表于2017-09-06 18:08 被阅读0次

1.简述

一个个独立的数据是没有任何意义的,可集合的可辨识的数据才有。数据的最基本的一种集合方式为数组。数组对于每一门编程语言来说都是重要的数据结构之一,Java 语言中提供的数组是用来存储固定大小的同类型元素。但是Java并未提供一个描述数组的类(类似于public class []<T>{} 这样的),为了便于操作数组而提供了一个工具类java.util.Arrays;

2.数组的数据结构

2.1一维数组

dataArray.jpg

如上如图所示,int [] a = new int[10]。这是整型的集合,可简单依靠地址(index)去分别;按地址寻找的复杂度为O(1)按内容寻找的复杂度为O(n);
tip:需要补充内存的工作原理,数据结构及算法的知识了。

2.2多维数组

实际上并不存在多维数组,只是对一维数组的扩展。所有的高纬数组都可以看成是低一纬度的数组的数组;例如二维数组就可以看作一维数组的数组,依次类推。

3.数组的特征

3.1大小(length):

数组的容量,由于Java是边解释边执行,我们可以在代码编写时不指定数组的具体大小而是由代码的执行结果来来确定数组大小(C好像是不可以的,代码编写期间就必须制定数组的大小,这是大学时的记忆了还是谭浩强的,不知改了没改,不能动态的搞就太蛋疼了);

3.2下标(index);

从0开始到length-1结束,用于获取每个元素。

4.对数组的操作(排序及查找)

4.1 Arrays.asList(T... a)转换为ArrayList:

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
}

4.2 Arrays.binarySearch(a, key) 二分查找:

对于已经排序的数组(从小到大的,不能有相同的值的)搜索某个元素的下标。
原理:取范围内下标在中间的值进行比较,然后不断选择合适范围,知道选出合适的值,个人实现代码如下:

public static int binarySearch(List<Comparable> objs,Comparable comp,int startIndex,int endIndex){
    Object [] objArray = objs.toArray();
    if(startIndex<0){
        startIndex=0;
    }
    if(endIndex>objArray.length-1){
        endIndex = objArray.length-1;
    }
    while (startIndex<=endIndex) {
        int midIndex = (startIndex+endIndex)/2;
        Comparable target = (Comparable)objArray[midIndex];
        if(comp.compareTo(target)<0){//comp<target
            endIndex = midIndex-1;
            continue;
        }
        if(comp.compareTo(target)==0){//comp == target
            return midIndex;
        }
        if(comp.compareTo(target)>0){//comp>target
            startIndex = midIndex+1;
            continue;
        }
    }
    return -1;
}

4.3 Arrays.copyOf()数组拷贝:

底层调用的是 System.arraycopy(native final方法);
注意对于基本数据类型等常量值的拷贝是可以的,但是对于一般引用类型数据的拷贝只能拷贝引用的值,如下代码:

public class TestObject {
    public static void main(String[] args) {
        String [] src = new String [] {new String("0"),new String("1"),new String("2"),new String("3")};
        String [] src2 = Arrays.copyOf(src, src.length);
        src2[0]= new String("0000");//返回的是String Pool常量池的引用 
        System.out.println(src[0]);//0

        Integer [] ints = new Integer[]{new Integer(0),new Integer(1),new Integer(2)};
        Integer [] ints2 = Arrays.copyOf(ints, ints.length);
        ints2[0] = new Integer(10);//返回的是Integer(10)Integer类常量池的引用
        System.out.println(ints[0]);//0
        
        Demo[] demo = new Demo[]{new Demo("0"),new Demo("1")};
        Demo [] demo2 = Arrays.copyOf(demo, demo.length);
        demo2[0].a="00000";
        System.out.println(demo[0].a);//00000
        
        int [] [] int2 = new int[2][2];
        int2[0][0]=0;
        int2[0][1]=1;
        int2[1][0]=1;
        int2[1][1]=2;
        int [] [] int2s = Arrays.copyOf(int2, int2.length);
        int2[0][0] = 10086;
        System.out.println(int2[0][0]);//10086
    } 
}
class Demo{
    String a;
    public Demo() {
        super();
    }
    public Demo(String a) {
        super();
        this.a = a;
    }
}

5.数组的排序

这个打算在以后弄个专门的集合来搞这个内容,应该是个很大的工程。

相关文章

  • JavaSE集合类

    JavaSE集合类 概述 Java中集合类概述Java中数组与集合的比较Java中集合框架层次结构 Collect...

  • Java的集合与数组的基本区别

    Java的集合与数组的基本区别 (一)数组 数组 用于存储基本数据类型,数组的长度固定。 (二)集合 集合类存放的...

  • java基础系列05--集合(1)

    JAVA集合 集合由来: 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给...

  • Java中数组和集合之间的转换

    Java中怎么将数组转换为集合或者将集合转换为数组??? Talk less,Show me the code! ...

  • Java集合干货系列-集合总体大纲

    前言 Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工...

  • Vector

    Java集合 Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Jav...

  • 【骚全带你学Java---九、认识java数组】

    java中数组 数组是指一组数据的集合,数组中的每个数据称为元素。在Java中,数组也是Java对象。数组中的元素...

  • Java 集合工具包

    Java 集合工具包 Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等...

  • java list转json 和json 转list 笔记

    java list集合转json json 数组转list集合 bean类 完整代码:

  • java集合总纲

    java集合 集合是用来存储数据的,以前有了数组为什么还要集合呢,因为数组必须要声明长度,集合不需要,更加灵活, ...

网友评论

    本文标题:Java集合--数组

    本文链接:https://www.haomeiwen.com/subject/eequjxtx.html