您的位置:首页 > 编程语言 > Java开发

map、list、set等常见集合的理解

2016-07-25 20:44 274 查看
简言:java中我们经常会使用到集合,比如hashmap、hashtable、arraylist、以及hashset等,还有几个比较少见的如(vector、treeset)等。其实这些都是基于list接口和set接口以及map接口。

1.list接口:

ArrayList:该类是一个数组的形式存在,但他是一个动态数组,用put来添加数据,数据可以为null(null与空不一样啊),添加的数据可以重复,并且储存的顺序是按先后排列的。移除元素要使用remove(int型);没有实现同步锁,是线程不安全的。

LinkedList:LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.,他基本上arraylist差不多,区别在于他可以在什么位置上添加数据,比如在第二后面增加就使用add(int型, 数据);也可以得到起始数据,使用getFirst()和getLast(),他实现了同步所,是线程安全的。

2.map接口:

hashmap:

hashmap是基于哈希表的map接口的非同步实现。hashmap是以键值对的形式来储存数据的,也是通过键来获取值的。,hashmap的排列顺序不是顺序的而是随机的,他可以在key和value都可以为null,输出通过Set key=map.keySet();在通过获取key来得到value。键不允许有相同的,否则会被覆盖。移除通过remove(object);来移除键值,从而达到移除值。

hashtable:hashtable与hashmap基本相识,不同于table是线程安全的,并且table不允许key和value的值为null。

3.set接口:

hashset:

该也是线程不安全的,它不允许出现重复元素;,允许包含值为null的元素,但最多只能有一个null元素。不能保证元素的插入顺序,添加也是通过add进行添加的,而输出则是通过迭代Iteratori=hash.iterator();来实现的。

treeset:treeset也是线程不安全的,他也是通过add来添加数据的,但他会自动对数据进行升序的排序。比如tree.add(“a”);

tree.add(“c”);

tree.add(“b”);

输出的结果为a,b,c。他也不允许添加相同的元素,也不能添加null值。

附言:

hashmap是基于hash表,他采取的冲突是链地址法,即除余相同的放在同一个链表中,因为每一个key都会转化为一个int值,然后根据这个int值除与得到的数据就放在table表中。这样就会有个疑问,如果key相等嗯?没事,hashmap已经帮我们实现了,如果key相等的话,就比较value,如果value相等的话就不添加,认为已经存在该值,如果key相等而value不想等,则将key那个位置的以前value的值覆盖掉。这就是hashmap解决hash冲突的链地址法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java arraylist hashtable