笔试题----------java基础篇

3.java集合类:list、set、queue、map的实现类
Set接口

继承Collection接口,不允许出现重复的元素,并且元素没有次序,相当于一个不允许重复的离散的集合。

Set接口主要实现两个类:HashSet、TreeSet

  • HashSet
    • 按哈希来存取元素,因此速度较快。HashSet继承AbstractSet,然后实现了Set、Cloneable、Serializable接口。
  • TreeSet也是继承自AbstractSet,不过不同的是其实现的是NavigableSet接口。而NavigableSet继承自SortedSet。SortedSet是一个有序的集合。其添加的元素必须实现了Comparable接口,因为其在添加一个元素的时候需要进行排序。
  • LinkedHashSet也是Set的一个实现。和HashSet类似,只不过内部用链表来维护,按照元素插入次序来保存。
List接口

也是继承自Collection。与Set不同的是,List可以存储重复的元素。主要有两种实现:ArrayList和LinkedList。

  • ArrayList和传统的数组一样,有着很快的随机存取速度,但是插入删除的速度就很慢。
  • LinkedList则与ArrayList恰恰相反,因为用链表来保存数据,所以插入删除元素的速度很快,但是访问数据的速度就不如ArrayList了。
Map接口

Map(映射)是一个存储键值对的容器接口。每一个元素包含一个key对象和value对象,且元素不允许重复。

  • HashMap:采用了链地址法来处理冲突,处理冲突时会首先存放在链表中去,但是一旦链表中的数据较多(即>8个)之后,就会转用红黑树来进行存储,优化存储速度。O(lgn)。如果是链表。一定是O(n)。HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap。
  • HashTable:是过时的,是线程安全的,但是并发性不如ConcurrentHashMap。不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换。
  • LinkedHashMap:LinkedHashMap是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时带参数,按照访问次序排序。即HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,LinkedHashMap支持两种排序一种是插入排序,一种是使用排序,最近使用的会移至尾部
  • TreeMap:有一个很大的特点就是会对Key进行排序,使用了TreeMap存储键值对,再使用iterator进行输出时,会发现其默认采用key由小到大的顺序输出键值对,如果想要按照其他的方式来排序,需要重写也就是override 它的compartor接口。
queue接口

FIFO:先进先出

  • LinkedList:实现了queue接口
4、描述一下ArrayList和LinkedList的实现和各自的区别
  • 都实现了List接口,都是不同步的,即非线程安全的。
  • 区别:ArrayList是基于数组实现的,LinkedList是基于链表实现的,即查询ArrayList更有效率,增删LinkedList更有效率。

ps:昨天忘发了…晕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值