Java集合学习

1.ArrayList和Vector的区别

  • 相同点:
    都实现了List接口;
    元素都是有序可重复的;
  • 不同点
    ArrayList线程不安全,Vector线程安全;
    当存储进他们的元素个数超过容量时,ArrayList增长为原来的1.5倍,Vector增长为原来的2倍。

2.ArrayList、Vector和LinkedList的存储性能和特性

  • ArrayList和Vector使用数组存储数据,可以随机存取,但插入数据时需要移动元素,所以索引数据快 插入数据慢;
  • Vector使用了synchronized方法,线程安全,通常性能比ArrayList差;
  • LinkedList使用双向循环链表存储数据,在索引数据时需要前后遍历,但插入数据速度更快。

3.HashMap的数据结构

HashMap在jdk1.8以前实际上是一个数组和链表的结合体,jak1.8之后是数组、链表和红黑树。
首先计算key的哈希值来确定元素放入数组的位置,当多个元素的哈希值相同时,就把该元素添加到相同哈希值元素的后面,形成链表,如果某一条链表的长度超过8时,链表就转换为红黑树,以此来提高查找效率。

4.List、Map、Set三个接口,存取元素时,各有什么特点

List和Set都是单列元素的集合,有相同的父接口Collection。

  • List存储有序、可重复,可以使用add()方法插入数据,每调用一次add()方法时,这个对象就会被插入到集合一次,并不是把对象本身存储进了集合中,而是集合中用一个索引变量指向这个对象。List可以使用Iterator接口取得所有元素,再逐一遍历各个元素,也可以调用ge(index i)。
  • Set存储无序、不可重复。Set集合的add()方法有一个Boolean类型的返回值,当集合中没有某个元素时,可成功加入并返回true,当集合中含有与某元素equals相等的元素时,无法加入并返回false。Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。
  • Map与Set和List不同,它是双列的集合。在存储时,使用put(),要存储一对键值对,不能存储重复的key,这个重复也是使用equals比较。取元素时,根据key获得相应的value值。

5.比较 HashSet、LinkedHashSet 和 TreeSet

  • HashSet 是 Set 接⼝的主要实现类 , HashSet 的底层是 HashMap ,线程不安全的,可以存储 null 值;
  • LinkedHashSet 是 HashSet 的⼦类,能够按照添加的顺序遍历;
  • TreeSet 底层使⽤红⿊树,能够按照添加元素的顺序进⾏遍历,排序的⽅式有⾃然排序和定制排序。

6.如何选用集合

  • 如果需要根据键值来获取元素值时,选择使用Map接口下的集合,如果需要排序,选择TreeMap,不需要排序选择HashMap,需要保证线程安全选择ConcurrentHashMap;
  • 如果只是存放元素值,选择使用Collection接口下的集合,如需要保证元素唯一,选择Set接口下的TreeSet 或 HashSet,不需要就选择实现 List 接⼝的比如 ArrayList 或LinkedList,然后再根据实现这些接⼝的集合的特点来选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值