Java List集合和哈希表

List集合和Set集合,先来看List集合。

List集合存储元素的特点:

1.有序(List集合中的元素有下标):存进去是什么样,取出来还是什么样

2.可重复

可以结合以下的简单代码来看一看。

import java.util.*;public class ListTest01{ public static void main(String[] args){   List l=new ArrayList();   l.add(100);   l.add(32);   l.add(32);   l.add(90);   Iterator it=l.iterator();   while(it.hasNext()){     System.out.println(it.next());   } }}

编译运行后输出:

100323290

由于ArrayList集合底层是数组,数组是有下标的,所以ArrayList集合有很多自己的特性。ArrayList集合底层默认初始化容量是10,扩大之后的容量是原容量的1.5倍。

import java.util.*;public class ListTest02{ public static void main(String[] args){   List l=new ArrayList();   l.add(12);   l.add(23);   l.add(43);      //在下标为1的位置上插入元素   l.add(1,555);   //取得第一个元素   System.out.println(l.get(0));   System.out.println("-----------");   for(int i=0;i<l.size();i++){     Object element=l.get(i);     System.out.println(element);   } }}

编译运行后输出:

12-----------125552343

在上面代码中,首先List l=new ArrayList();new出一个新的List对象l,接着使用add()方法添加元素,l.add(a,b)可以在指定的下标为a的位置添加元素b,最后使用for循环遍历输出List l中的元素。注意for循环中的内容为List独有的遍历方式。

Set的实现类主要有HashSet和TreeSet,在讲HashSet之前先来看看什么是哈希表。哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

记录的存储位置=f(关键字)

这里的对应关系f称为散列函数,又称为哈希(Hash函数),采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表(Hash table)。

哈希表的结构图如下图所示:

哈希表是数组和单向链表的结合,我们都知道数组的特点是寻址容易,插入和删除困难,而链表的特点是寻址困难,插入和删除容易,哈希表将二者结合起来,得到了一种寻址容易,插入和删除也容易的数据结构。哈希表本质是一个数组,不过这个数组中的每个元素又都是单向链表,类似于现实世界中的字典。在单向链表的每一个节点,都包含四个组成部分,Object key; Object value; final int hash; Entry next; Entry next指向该节点的下一个节点。final int hash;是一个哈希值,是通过key调用hashCode方法得到的值,再通过“哈希算法”得出的值,并且在单向链表中每一个节点的哈希值是相同的,代表的是数组的下标。如果要对数组中某一个元素进行查找的话该怎么做呢?比如要查找一个o对象,o对象去调用hashCode方法,得出哈希值,哈希值代表数组的下标,得到数组的下标也就知道o对象在哪一个单向链表中。HashMap中有一个方法,Object get[Object key],得到Object value的值。那么如何往哈希表中添加元素呢?HashMap中有一个添加元素的方法,void put[Object key,Object value];首先调用Object key的hashCode方法,得到一个哈希值,如果哈希值已经存在于数组中,就能定位单向链表,通过key遍历单向链表,如果key与已经存在的key相同(通过equals方法),因为key无序不可重复,所以不添加,反之则在单向链表中添加;若哈希值在数组中不存在,则在数组后面的位置添加一个新的单向链表。因此哈希表的增删效率和查询效率都是非常高的。从上面的描述中我们知道Object key是非常重要的,不可重复。

搜索微信公众号“程序员考拉”,欢迎关注!

原文地址:https://www.cnblogs.com/naihuangbao/p/9444501.html

时间: 2024-12-16 19:12:49

Java List集合和哈希表的相关文章

集合差集 哈希表 比较数据库中的图片和服务器上的图片,将服务器上的垃圾图片删除

SSH 框架下code: public String deleRubbishAd(){ int deleADcount = 0; rubbishADtp = configDao.rubbishADtp(); //数据库中的广告图片集合 Map<Object,Object> shujuku= new HashMap<Object,Object>(); File adfile = new File("C://Program Files//Apache Software Fou

Stack集合 Queue队列集合 Hashtable哈希表

Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 1 个数 2 Console.WriteLine(st.Count); 3 只要使用一次pop方法,就会从最后一个元素开始排除 弹出 4 Console.WriteLine(st.Pop()); 5 Console.WriteLine(st.Count); 6 只想查看不弹出 7 Console.WriteL

11、C#基础整理(特殊集合和哈希表)

特殊集合:队列.栈 一.栈Stack类:先进后出,没有索引 Stack ss = new Stack(); 1.增加数据:push :将元素推入集合 ss.Push(3); ss.Push(5); ss.Push(7); 2.获取数据:(1)peek返回位于stack顶部的对象但不移除(获取最后一个进入的元素的值) Console.WriteLine(ss.Peek());//7 (2)pop将元素一个个弹出集合(读取并移除) Console.WriteLine(ss.Pop());//7 Co

集合框架--哈希表

其中拉链法只是解决冲突的一种算法而已 原文地址:https://www.cnblogs.com/dreamHighMjc/p/8146490.html

深入理解哈希表

有两个字典,分别存有 100 条数据和 10000 条数据,如果用一个不存在的 key 去查找数据,在哪个字典中速度更快? 有些计算机常识的读者都会立刻回答: “一样快,底层都用了哈希表,查找的时间复杂度为 O(1)”.然而实际情况真的是这样么? 答案是否定的,存在少部分情况两者速度不一致,本文首先对哈希表做一个简短的总结,然后思考 Java 和 Redis 中对哈希表的实现,最后再得出结论,如果对某个话题已经很熟悉,可以直接跳到文章末尾的对比和总结部分. 哈希表概述 Objective-C 中

java基础——集合

集合与数组的区别: 1.数组是固定长度的:集合的长度是可变的. 2.数组可以存储基本数据类型,也可以存储引用数据类型:集合只能存储引用数据类型. 3.数组存储元素必须是同一个数据类型:集合存储的对象可以是不同数据类型.  java集合主要有3种重要的类型: ●List:是一个有序集合,可以存放重复的数据. ●Set: 是一个无序集合,不允许存放重复的数据. ●Map: 是一个无序集合,集合中包含一个键对象和一个值对象,  键对象不允许重复,值对象可以重复. 下面是集合继承结构图-Collecti

Java基础-集合框架

首先,集合与数组的区别?          1. 长度:     数组固定:集合可变.          2. 存储类型:     数组存储基本数据类型和对象:集合只能存储基本数据类型.                                        数组存储的元素必须是一个数据类型:集合存储对象可以是不同类型.                                       集合类(为什么出现集合类??)     面向对象语言对事物的体现都是以对象的形式,所以为了方便

链表与哈希表基本概念及Java常用集合

-链表- 是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 相比于线性表顺序结构,操作复杂.线性表的链式存储表示,有一个缺点就是要找一个数,必须要从头开始找起,十分麻烦. -哈希表- 概念 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据

源码:Java集合源码之:哈希表(二)

要想知道一个元素是否在数组或链表中,只能从前向后挨个对比,无论是数组还是链表,其对数据的查询表现都比较无力.在的二叉排序树中,还会将数据排序以进行二分查找,将时间复杂度从O(n)降低到O(lg n). 出现这个问题的根源在于,我们没有办法直接根据一个元素找到它存储的位置. 那有没有办法消除这个对比的过程呢?哈希表就是解决查询问题的一种方案. 什么是哈希表与Hash函数 通俗来讲,哈希表就是通过关键字来获取数据的一种数据结构,它通过把关键字映射为表中的位置来获取元素,这种映射主要是使用Hash函数