写在前面

关于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如下:

 package org.leo.demo.arrays;

 import java.util.Arrays;

 public class TestArrays {

     public static void main(String[] args) {

         int[] a = new int[] {3,4,5,6};
int[] a2 = {3,4,5,6}; System.out.println("a equals a2? " + Arrays.equals(a, a2)); int[] b = Arrays.copyOf(a, 6);
System.out.println("a equals b? " + Arrays.equals(a, b));
System.out.println("b array is: " + Arrays.toString(b)); Arrays.fill(b, 2, 4, 1);
System.out.println("b array is: " + Arrays.toString(b)); Arrays.sort(b);
System.out.println("b array is: " + Arrays.toString(b)); System.out.println("the index of number 1 in b is:" + Arrays.binarySearch(b, 1)); } }

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

  1. Java容器深入浅出之Collection与Iterator接口

    Java中用于保存对象的容器,除了数组,就是Collection和Map接口下的容器实现类了,包括用于迭代容器中对象的Iterator接口,构成了Java数据结构主体的集合体系.其中包括: 1. Co ...

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

    在Java中,Set的底层事实上是基于Map实现的,Map内部封装了一个Entry内部接口,由实现类来封装key-value对,当value值均为null时,key的集合就形成了Set.因此,Map集 ...

  3. Java容器深入浅出之List、ListIterator和ArrayList

    List是Collection接口的子接口,表示的是一种有序的.可重复元素的集合. List接口的主要实现类ArrayList和Vector,底层都是维护了一套动态的,可扩展长度的Object[]数组 ...

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

    对字符串的花式处理一直是现代应用系统的主要操作之一,也是对Java基础知识考察的重要方面.事实上,Java字符串类的底层是通过数组来实现的.具体来说,String类是固定长度的数组,StringBuf ...

  5. Java容器深入浅出之HashSet、TreeSet和EnumSet

    Java集合中的Set接口,定义的是一类无顺序的.不可重复的对象集合.如果尝试添加相同的元素,add()方法会返回false,同时添加失败.Set接口包括3个主要的实现类:HashSet.TreeSe ...

  6. Java容器深入浅出之PriorityQueue、ArrayDeque和LinkedList

    Queue用于模拟一种FIFO(first in first out)的队列结构.一般来说,典型的队列结构不允许随机访问队列中的元素.队列包含的方法为: 1. 入队 void add(Object o ...

  7. Java 容器源码分析之ConcurrentHashMap

    深入浅出ConcurrentHashMap(1.8) 前言 HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CP ...

  8. 【Java心得总结七】Java容器下——Map

    我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...

  9. 【Java心得总结六】Java容器中——Collection

    在[Java心得总结五]Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库.而在这篇博文中,我想着重对容器类库中的Collection容器 ...

随机推荐

  1. 20155212 2016-2017-2 《Java程序设计》第3周学习总结

    20155212 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 Chapter 4 要产生对象必须先定义类,类是对象的设计图,对象时类的实例. 一个原始码中 ...

  2. 记一次SpringBoot使用WebUploader的坑

    问题: B/S通常都会涉及到文件的上传,普通文件上传使用文件框,后台接收文件即可 我遇到的问题是要开发一个大文件上传的功能,那就肯定要支持文件的分片 分析: 1.参考网上的资料后,通常的多文件和大文件 ...

  3. CF 1093 E. Intersection of Permutations

    E. Intersection of Permutations 链接 题意: 给定两个序列,询问第一个排列的[l1,r1]和第二个排列[l2,r2]中有多少个共同的数,支持在第二个排列中交换两个数. ...

  4. SRM 698 div1 RepeatString

    250pts RepeatString 题意:问最少修改多少次将一个字符串修改为AA的形式.可以插入一个字符,删除一个字符,修改字符. 思路:枚举分界点,然后dp一下. /* * @Author: m ...

  5. Java SE教程

    第0讲 开山篇 读前介绍:本文中如下文本格式是超链接,可以点击跳转 >>超链接<< 我的学习目标:基础要坚如磐石   代码要十份规范   笔记要认真详实 一.java内容介绍 ...

  6. XAF-如何在详细视图界面显示按钮(含示例项目下载)

    默认情况下,指定了按钮的Category后,将在对应的按钮容器显示按钮.有时候,我们需要将按钮显示在详细视图中. 本示例源码 创建一个控制器,并填加按钮.设置好了所有ID.Caption后,给Cate ...

  7. Lua学习笔记(5): 表

    表的初始化方式 表的索引类型一般有两种,一种是通过标识符访问,一种是通过数字访问 --通过标识符访问的表的初始化 table1 = {key_1 = "haha", key_2 = ...

  8. 【转】AOE机制的DSL及其实际运用

    AOE这个词的意思,我相信玩过WOW的人都不陌生,包括玩过LoL的也不会陌生,说穿了就是一个区域内发生效果(Area of effect).这里我们要讨论的就是关于一个适合于几乎所有游戏的AOE机制, ...

  9. [题解] 洛谷 P3603 雪辉

    模拟赛中遇到了这个题,当时我这个沙雕因为把一个\(y\)打成了\(x\)而爆零.回来重新写这道题,莫名其妙的拿了rank1... 我的解法与其他几位的题解有些不同我太蒻了.并没有选取所谓的关键点,而是 ...

  10. Gradle快速上手——从Maven到Gradle

    [本文写作于2018年7月5日] 本文适合于有一定Maven应用基础,想快速上手Gradle的读者. 背景 Maven.Gradle都是著名的依赖管理及自动构建工具.提到依赖管理与自动构建,其重要性在 ...