Java容器深入浅出之数组

写在前面

关于Java的学习,特别是对于非计算机专业的同学来说,我总是主张从实践中来,到实践中去的学习方法。Java本身是一门应用性特别强的高级编程语言,因此如果能在基于实际开发的经验基础上,对JavaSE的核心知识做总结和梳理,将非常有利于沉淀自身的技术知识,并且为进一步的深入研究打好基础。

JavaSE的知识层次,基于我的经验,可以分为4点:

1. 基础知识:包括基本数据类型、语法规范、运算符、流程控制和异常。

2. 面向对象:包括封装、继承和多态的Java实现及相关语言特性。

3. 基础进阶:包括常用类、容器、JDBC、IO等。

4. 高阶深入:包括多线程、反射、JMM、JVM及网络编程等。

Java企业级开发,包括Web应用、分布式及大数据等高可靠、高并发和高可用的系统均来自于这些基础的实现。

关于容器

容器在日常开发中的地位不言而喻,小到链表的实现,大到消息队列的框架,都与容器息息相关。当完成了Java基础知识和面向对象知识的学习之后,就可以开始学习容器并深入理解Java基本数据结构的底层实现原理。

Java的容器大致可以分为数组、字符串对象和集合

数组的基本使用

Java数组的要点:

1. 数组完成初始化,在内存中的长度固定,不可改变;

2. 数组可以存放基本数据类型和对象的引用,但只能保存同一种类型的数据。

数组的定义:

type[] arrayName;

数组的初始化:

1. 静态初始化:显式指定每个数组元素的初始值

arrayName = new type[]{element1, element2, element3...};arrayName = {element1, element2, element3...};

2. 动态初始化:只给定数组长度,由系统指定元素的默认初始值

arrayName = new type[length];

数组的使用:

1. 查:通过索引获取数组某个元素的值

2. 改:通过索引对数组某个元素的值更新(典型的如循环赋值)

Java8增强的Array类

Array类的若干static方法可以方便对数组进行操作:

1. 查找

int binarySearch(type[] a, type key) --- 数组按升序排列,通过二分法查找key在a中的索引,没有则返回负数。

int binarySearch(type[] a, int from, int to, type key) --- 数组按升序排列,通过二分法查找key在a的from和to中的索引,没有则返回负数。

2. 排序

void sort(type[] a) --- 排序

void sort(type[] a, int from, int to) --- from到to之间的元素进行排序

3. 复制

type[] copyOf(type[] original, int length) --- 把original复制成一个新数组:

3.1 如果length等于original的长度,全部复制;

3.2 如果length小于original的长度,只复制前length位

3.3 如果length大于original的长度,余下的系统默认初始值赋值

type[] copyOfRange(type[] original, int from, int to) --- 把original的from到to复制成一个新数组

4. 转换

void fill(type[] a, type val) --- 将a的所有元素赋值为val

void fill(type[] a, int from, int to, type val) --- 将a的从from到to的元素赋值为val

String toString(type[] a) --- 转换为一个字符串

5. 判断

boolean equals(type[] a, type[] b) --- 长度和元素均相等的两个数组则返回true

Arrays类Demo如下:

 1 package org.leo.demo.arrays;
 2
 3 import java.util.Arrays;
 4
 5 public class TestArrays {
 6
 7     public static void main(String[] args) {
 8
 9         int[] a = new int[] {3,4,5,6};
10         int[] a2 = {3,4,5,6};
11
12         System.out.println("a equals a2? " + Arrays.equals(a, a2));
13
14         int[] b = Arrays.copyOf(a, 6);
15         System.out.println("a equals b? " + Arrays.equals(a, b));
16         System.out.println("b array is: " + Arrays.toString(b));
17
18         Arrays.fill(b, 2, 4, 1);
19         System.out.println("b array is: " + Arrays.toString(b));
20
21         Arrays.sort(b);
22         System.out.println("b array is: " + Arrays.toString(b));
23
24         System.out.println("the index of number 1 in b is:" + Arrays.binarySearch(b, 1));
25
26     }
27
28 }

原文地址:https://www.cnblogs.com/leoliu168/p/9902530.html

时间: 2024-10-12 19:28:28

Java容器深入浅出之数组的相关文章

Java容器深入浅出之String、StringBuffer、StringBuilder

对字符串的花式处理一直是现代应用系统的主要操作之一,也是对Java基础知识考察的重要方面.事实上,Java字符串类的底层是通过数组来实现的.具体来说,String类是固定长度的数组,StringBuffer和StringBuilder则是可变长度的,其底层是通过Arrays.copyOf的方法,复制了另外的一个数组,实现了一个内部扩容机制,从而实现一种"伪可变". Java字符串要点: 1. String类是不可变类,一旦创建,包含在String对象中的字符数组是不可变的,直至该对象被

Java容器深入浅出之Map、HashMap、Hashtable及其它实现类

在Java中,Set的底层事实上是基于Map实现的,Map内部封装了一个Entry内部接口,由实现类来封装key-value对,当value值均为null时,key的集合就形成了Set.因此,Map集合具有如下的一些特点: 1. Key集因为是Set的实现,因此是无顺序.不可重复的. 2. Value集是List的实现,因此是可以重复的,每个元素根据key来索引. 3. Map内部包含一个Entry内部接口,用于定义key-value对,由实现类来对外提供查找和设置value的方法. Map的基

Java 容器 & 泛型:一、认识容器

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 容器是Java语言学习中重要的一部分.泥瓦匠我的感觉是刚开始挺难学的,但等你熟悉它,接触多了,也就"顺理成章"地知道了.Java的容器类主要由两个接口派生而出:Collection和Map. 一.Collection vs Collections 首先,Collection 和 Collections 是两个不同的概念.之所以放在一起,是为了更好的比较.Collection是容器层次结构中

Java 容器

在实际问题中我们经常需要处理数据,单纯依靠数组来存储数据对开发来说非常困难,java提供了一套容器来方便我们编程.对java容器有一个整体的了解对我们来说非常重要,这样在需要特定容器时,不会手忙脚乱,本文主要介绍java的一些基本容器,而不要仅知道使用ArrayList.下面的图片是java中的简单容器分类   --图片来自网络 java定义了四种容器类型,List.Set.Queue和Map. 其中List.Set.Queue都实现了Collection接口,下面来看看这4中类型的容器. Co

java容器---集合总结

思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定尺寸的,你必须事先知道你要需要多少个对象.但是在一般的情况中,你在写程序中并不知道将需要多少个对象,或者是否需要更加复杂的方式来存储对象,因此数组尺寸固定很不爽! 为了解决上述问题,引入了容器的概念.容器提供了完善的方法来保存对象,你可以使用这些工具来解决数量惊人的问题.Java容器类可以自动调整自

Java 容器在实际web项目中应用

前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用法.可结合图片代码了解Java中的容器 备注 :这个地方 ,参考于朝向远方的博客Java容器详解,既然前人总结的这么好,我就直接拿来用,在这里更注重在实际开发中的例子,感谢那些总结的前辈们,辛苦了. 简单的数组例子 Thinking in Java 中并没有把数组归为Java的容器,实际上数组的确不是Java

Java 容器在实际项目中的应用

前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用法.可结合图片代码了解Java中的容器 备注 :这个地方 ,参考于朝向远方的博客Java容器详解,既然前人总结的这么好,我就直接拿来用,在这里更注重在实际开发中的例子,感谢那些总结的前辈们,辛苦了. 简单的数组例子 Thinking in Java 中并没有把数组归为Java的容器,实际上数组的确不是Java

Java面试题-Java容器

一.Java容器分类 Java容器划分为两个概念Collection.Map Collection: 一个独立元素的序列,这些元素都服从一条或多条规则.List必须按照插入的顺序保存元素,不关心是否重复:Set不能有重复元素:Queue一端插入一端输出.所有的Collection都可以用foreach语法遍历 实现:List:ArrayList.LinkedList:   Set:HashSet.TreeSet.LinkedHashSet   Map:HashMap.TreeMap.Linked

java容器集合类

容器就是容纳物品,放置物品的东西,对Java来说,一切皆是对象,他的容器就是能保存java的对象的类.由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都要能能提供方便的查询.遍历.修改等基本接口功能. 早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护.但是数组方式下,数组大小需要提前被确定,并不允许修改大小,导致其作为一种灵活的数据容器的能力的功能大为下降. 为了方便的利用数据容器进行引用的管理,Java中提供了丰富的数据容器以满足程序员多样化的需求. j