HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法
基础内容
容器就是一种装其他各种对象的器皿。java.util包
容器:Set, List, Map ,数组。只有这四种容器。
Collection(集合) 一个一个往里装,Map 一对一对往里装。
Set:没有顺序,不可以重复。 List:有顺序,可以重复。 互相的equals就算重复。
Map定义了存储Key-Value的方法。
Collection里装的必须都是Object,不能是基础类型。比如Int类型的值分配在栈上,而栈上的内容都是动态的。
容器类对象在调用remove,cotains等方法时,需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法,对于自定义的类型,需要重写equals方法和hashCode方法以实现自定义对象相等。
原则: 如果要重写equals方法,那必须重写hashCode方法。两个对象互相equals,那这两个对象必须具有相同的hashCode。
比较两个对象是不是相等的时候,主要用的是equals方法,当对象用在Map里面作为键时用hashCode方法,这样效率比较高。当对象当做键的时候,hashCode会有用。
两个对象如果互相equals,那么他们的hashCode一定相等。
HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法
HashMap:HashMap实现了Map接口,底层使用的是Hash算法存储数据。HashMap将数据以键值对的方式存储。
HashSet:HashSet实现了Set接口,底层也是用的是Hash算法存储数据。而且HashSet内部有HashMap类型的成员变量,方法也调用了HashMap的方法,存储的时候只不过值为null.
ArrayList:ArrayList实现了List接口,底层使用的是数组,存储空间上是相邻的,所以查询起来会很方便,效率也会比LinkedList要高
LinkedList:实现了List接口,底层使用的是使用双向链表的形式,存储的数据在空间上很可能不相邻,但是他们都有一个引用连在一起,所以增删起来会很方便
Vector与ArrayList十分相似,区别就是就是vector是一种线程安全类,它的方法都带有Synchronized关键字,实际中很少用到。如果遇到多线程的问题,JAVA提供了一个Collections工具类,可以把ArrayList转换成线程安全的类。
HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法的更多相关文章
- java中ArrayList 和 LinkedList 有什么区别
转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...
- HashMap、HashTable、ArrayList、LinkedList、Vector区别
HashTable和HashMap区别 ①继承不同. public class Hashtable extends Dictionary implements Map public class Has ...
- ArrayList、LinkedList、Vector区别
ArrayList.LinkedList.Vector均为可伸缩数组,即可以动态改变长度的数组. 比较ArrayList和Vector: 1. 共同点: ArrayList和Vector都是基于Obj ...
- ArrayList和LinkedList有什么区别?
---恢复内容开始--- ArrayList和LinkedList都实现了List接口,但是: ArrayList是基于索引的数据接口,底层是数组,能够以O(1)时间复杂度随机访问元素.而Linked ...
- HashMap、Hashtable、HashSet三种hash集合的区别
转载:http://www.cnblogs.com/lzrabbit/p/3721067.html#h1 HashMap和Hashtable的区别 两者最主要的区别在于Hashtable是线程安全,而 ...
- ArrayList,LinkedList,Vector区别.TreeSet,TreeSet,LinkedHashSet区别
ArrayList: 基于数组的数据结构,地址连续,一旦数据保存好了,查询效率比较高,但是因为其地址连续,所以增删数据需要移动数据,影响速度 内部数组长度默认为10,当需要扩容时,数组长度按1.5倍增 ...
- Vector、ArrayList、LinkedList、CopyOnWriteArrayList区别
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11443907.html CopyOnWriteArrayList CopyOnWriteArrayLi ...
- ArrayList 与 LinkedList 的不区别?
最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构书链表,不支持随机访问.使用下标访问一个元素, ArrayList 的时间复杂度是 O ...
- Java ArrayList Vector LinkedList Stack Hashtable等的差别与用法(转)
ArrayList 和Vector是采取数组体式格式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,都容许直接序号索引元素,然则插入数据要设计到数组元素移动等内存操纵,所以索引数据快插入数 ...
随机推荐
- code::Blocks 汉化经验
首先,在网上下载一个code::Block的汉化包 code::Block汉化包下载地址,复制到地址栏即可. http://files.cnblogs.com/files/QW-lzm/codebl ...
- golang copy函数
数组切片内容复制 转自:http://studygolang.com/articles/4560 用于将内容从一个数组切片复制到另一个数组切片.如果加入的两个数组切片不一样大,就会按其中较小的那个数组 ...
- 「NetworkOnMainThreadException」:Android 2.3到Android 4.0上传文件的问题
我在百度知道上的提问: 『之前我用的一段文件上传的代码,配合服务器端的servlet,实现了上传手机上的文件的功能:但是后来我把手机的Android系统从2.3升级到了4.0 ,同样的代码,同样的配置 ...
- 09:LGTB 学分块
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 LGTB 最近在学分块,但是他太菜了,分的块数量太多他就混乱了,所以只能分成 3 块 今天他得 ...
- CCRect 构造函数的几个参数解释
转自: http://blog.163.com/hzklclick_wy/blog/static/21550517520137139511839/ void CCRect::setRect(f ...
- hibernate -- 分页模糊查询中setParameter 和setParameterList
在分页模糊查询中碰到setParameter 和setParameterList这两个方法 setParameter 以前就只会用setParameter(int arg,String str),我用 ...
- 装饰器模式(Decorator) C++
装饰器模式是比较常用的一种设计模式,Python中就内置了对于装饰器的支持. 具体来说,装饰器模式是用来给对象增加某些特性或者对被装饰对象进行某些修改. 如上图所示,需要被装饰的对象在最上方,它自身可 ...
- 3.1-3.5 分布式部署hadoop2.x的准备和配置
一.环境 192.168.1.130 master 192.168.1.131 slave1 192.168.1.132 slave2 所有主机: 1.关闭防火墙.selinu ...
- POJ2371【水题】
mdzz- wa了一发,没看清题意,真是智障 //#include <bits/stdc++.h> #include<iostream> #include<string. ...
- bzoj 3992: [SDOI2015]序列统计【原根+生成函数+NTT+快速幂】
还是没有理解透原根--题目提示其实挺明显的,M是质数,然后1<=x<=M-1 这种计数就容易想到生成函数,但是生成函数是加法,而这里是乘法,所以要想办法变成加法 首先因为0和任何数乘都是0 ...