首页 > 编程 > Java > 正文

java基础知识

2019-11-11 02:26:26
字体:
来源:转载
供稿:网友

## java基础知识之——集合 ##

list集合、set集合和Map集合作用以及常用实现类

list、set、Map集合的作用,就是用于存储集合数据的,准确来说,list和set集合用来存储单列集合,Map用来存储双列集合数据的。

list集合常用的实现类有:ArrayList、linkedList、Vector;

他们的区别是: 1、ArrayList底层是数组结构,查询快,增删慢(每次增删需要移动插入点后面一串的数据),是线程不安全的,效率高。 2、Vector和ArrayList结构一样,区别就是,Vector是线程安全的,效率不高,是 JDK1.0的产物,已经被ArrayList取代。

set集合常用的实现类有:HashSet、TreeSet 、linkedHashSet;

他们的区别是: 1、HashSet底层是哈希表结构,由hashCode和equals方法保证元素唯一; 2、TreeSet底层是二叉树结构,根据比较的返回值是否是0来决定; 3、LinkedHashSet底层是由链表和哈希表组成,由链表保证有序,哈希表保证唯一。

Map集合常用的实现类有:HashMap、TreeMap;

他们的区别是: 1、HashMap底层是哈希表结构,存储的结果是无序的; 2、TreeMap底层是二叉树结构,可以对键值进行排序;

是否必须同时重写hashCode 和equal方法,为什么?

是必须的,equal和hashcode的关系是如下的:

1、equal方法比较的是两个对象的地址值,hashCode返回的是对象的地址值。2、如果两个对象相同,那么他们的HashCode值一定要相同,如果两个对象的HashCode值相同,他们不一定相同;3、比较两个对象的HashCode值,如果他们的HashCode值相同,再进行equa比较,如果hashCode值不相同, 则这两个对象肯定不一样, 不必进行equal比较了。hashCode先进行比较是为了提高效率;

HashMap的数据结构与hashtable,concurrentHashMap的区别

1、HashMap是线程不同步的,因此存在线程安全问题,但是执行效率要高,2、hashTable是线程同步的,因此是线程安全的(使用synchronize关键字来同步),但是执行效率低一些, 可以通过Iterator和 Enumeration进行数据遍历,不能接受null值。3、concurrentHashMap融合了上面两者的优点,提高效率的同时,线程是安全的(引入了分割(Segment));4、synchronize会锁定整个数据表,而segment只会锁定需要put操作的同一个segment元素部分。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表