集合 Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素。 用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。 特点 Java的Set接口继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两种实现。 在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。 T … 继续阅读
分类目录归档:数据结构
哈希冲突
哈希冲突 由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。 简言之,不同的输入,经过哈希函数计算,得到相同的哈希值,这就是哈希冲突了。 解决冲突 解决哈希冲突的方法一般有:开放定址法、链地址法(拉链法)、再哈希法、建立公共溢出区等方法。 2.1 开放定址法 从发生冲突的那个单元起,按照一定的次序,从哈希表中找到一个空闲的单元。 … 继续阅读
哈希函数(Hash)
Hash 哈希函数 Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 简言之:把任意长度的 … 继续阅读
实现一个简单的栈Stack
栈 Stack 栈的特点是:先进后出(LIFO, Last In First Out) 定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。 操作 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一 … 继续阅读
实现一个简单的队列Queue
队列 Queue 概述 队列作为一种常见的数据结构,它的特点是:先进先出,一端插入,一端删除。 定义 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,进行插入操作的端称为队尾, 进行删除操作 的端称为队头。 实现和细节 public class Queue<E> { private int front;//队头一端 … 继续阅读
实现一个简单的ArrayList
ArrayList概述 ArrayList是Java集合框架中一个经典的实现类。它比起常用的数组而言,明显的优点在于,可以随意的添加和删除元素而不需考虑数组的大小。 出于练手的目的,实现一个简单的ArrayList,并且把过程记下来。 基本API 默认构造器和一个参数的有参构造器 1. add方法 2. get方法 3. indexOf方法 4. contains方法 5. size方法 6. i … 继续阅读