标签 java 下的文章

概述

LinkedListlistDeque接口的双链列表实现。它实现所有可选的列表操作,并允许所有元素(包括null)。

特点

下面你可以找到LinkedList最重要的属性:

  • 索引到列表中的操作将从头到尾遍历列表,以更接近指定索引的操作为准
  • 它不是同步的
  • 它的迭代器和ListIterator迭代器是快速失败的(这意味着在迭代器创建之后,如果列表被修改,将抛出ConcurrentModificationException)
  • 每个元素都是一个节点,它保存对下一个和上一个元素的引用
  • 它保持插入顺序

尽管LinkedList未同步,但我们可以通过调用Collections.SynchronizedList方法检索他的同步版本,如:

List list = Collections.synchronizedList(new LinkedList(...));

- 阅读剩余部分 -

概述

在本文中,我们将研究Java集合框架中的ArrayList类。我们将讨论它的属性、常用用例以及它的优缺点。

ArrayList包含在Java核心库中,因此不需要任何其他库。为了使用它,只需添加以下import语句:

import java.util.ArrayList;

List表示一个有序的值序列,其中某些值可以重复。

ArrayList是构建在数组之上的列表实现之一,它能够在添加/删除元素时动态地增长和收缩。元素的索引可以很容易地从零开始访问。该实现具有以下特性:

  • 随机访问需要O(1)
  • 添加元素需要摊销固定时间O(1)
  • 插入/删除需要O(n)
  • 搜索未排序数组需要O(n),排序数组需要O(log n)

- 阅读剩余部分 -

概述

在本教程中,我们将研究java.util.Arrays,一个实用工具类,我们可以使用Arrays创建、比较、排序、搜索、流和转换数组。

创建

我们来看看创建数组的一些方法:copyOfcopyOfRangefill

copyOf copyOfRange

要使用copyOfRange,我们需要原始数组和要复制的起始索引(包括)和结束索引(排除):

String[] intro = new String[] { "once", "upon", "a", "time" };
String[] abridgement = Arrays.copyOfRange(storyIntro, 0, 3);

assertArrayEquals(new String[] { "once", "upon", "a" }, abridgement);
assertFalse(Arrays.equals(intro, abridgement));

- 阅读剩余部分 -

概述

在本教程中,我们将深入研究Java语言中的一个核心概念——数组。

我们先看看什么是数组,然后再看看如何使用它们;

  • 数组入门
  • 读写数组元素
  • 数组上的循环
  • 将数组转换为其他对象,如ListStreams
  • 数组的排序、搜索和组合

什么是数组

首先,我们了解什么是数组?

根据Java文档,数组是包含固定数量的相同类型的值。数组的元素被索引,这意味着我们可以用数字(索引)访问它们。

我们可以将数组视为单元格的编号列表,每个单元格都是一个包含值的变量。在Java中,编号从0开始。

有基本类型数组和对象类型数组。这意味着我们可以使用intfloatboolean等类型的数组,也可以使用StringObject和自定义类型的数组。

- 阅读剩余部分 -

概述

每个程序都需要一个开始执行的地方,说到Java程序,就是main方法。
我们已经习惯在编写代码时编写main方法,但是没有注意它的细节。在这篇简短的文章中,我们将分析这个方法,并展示其他一些编写方法。

方法签名

最常见的main法模板是:

public static void main(String[] args) { }

- 阅读剩余部分 -

介绍

Java数据类型有两种,一种是基本数据类型,另一种是引用数据类型。本文主要介绍Java的8种基本数据类型,byteshortintlongfloatdoublebooleanchar

整型

对于整型类型,Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)

byte

  • byte数据类型是8位、有符号的,以二进制补码表示的整数;
  • 最小值是 -128(-2^7);
  • 最大值是 127(2^7-1);
  • 默认值是 0;
  • byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;
  • 例子:
byte a = 100;
byte b = -50;

- 阅读剩余部分 -

归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

算法

归并操作的工作原理如下:

第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置

第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

重复步骤3直到某一指针超出序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

- 阅读剩余部分 -

二分查找算法

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

算法

  1. 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
  2. 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
  3. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

- 阅读剩余部分 -

快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

算法

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。

- 阅读剩余部分 -

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

- 阅读剩余部分 -