java数据结构

本文深入探讨Java集合类的基础概念及各种接口的区别,包括Collection、Set、List、Map等,并对比了不同实现之间的特点,如HashMap与HashTable、ArrayList与LinkedList等。

Java 集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。

Java 集合类里面最基本的接口有:

  • Collection:代表一组对象,每一个对象都是它的子元素。
    • Set:不包含重复元素的 Collection。
    • List:有顺序的 collection,并且可以包含重复元素。
    • Map:可以把键(key)映射到值(value)的对象,键不能重复。

常见问题:

1.Iterator 和 ListIterator 的区别是什么?
下面列出了他们的区别:

    Iterator 可用来遍历 Set 和 List 集合,但是 ListIterator 只能用来遍历 List。

    Iterator 对集合只能是前向遍历,ListIterator 既可以前向也可以后向。

    ListIterator 实现了 Iterator 接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

2.Java 中的 HashMap 的工作原理是什么?

Java 中的 HashMap 是以键值对(key-value)的形式存储元素的。HashMap 需要一个 hash 函数,它使用 hashCode()和 equals()方法来向集合/从集合添加和检索元素。当调用 put()方法的时候,HashMap 会计算 key 的 hash 值,然后把键值对存储在集合中合适的索引上。如果 key已经存在了,value 会被更新成新值。HashMap 的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。

3.HashMap和HashTable的区别

都实现了Map接口,很多特性相似,不同之处:

hashmap允许键和值是null,hashtable都不允许;

hashmap不是同步的,适合单线程环境,hashtable是同步的,适合多线程环境;

hashmap提供了可供迭代的键的集合(Iterator),是快速失败的,而hashtable提供了对键的列举(Enumeration);

一般认为hashtable是遗留类。

4.数组Array和列表ArrayList区别:

Array可包含基本类型和对象类型,ArrayList只包含对象类型;

Array大小是固定的,ArrayList大小是动态变化的;

ArrayList提供更多功能,addAll(),removeAll(),iterator()等等。

5.ArrayList和LinkedList区别:

ArrayList底层是数组,LinkedList底层是链表;

ArrayList查找元素的时间复杂度为O(1),LinkedList查找元素的时间复杂度为O(n);

ArrayList查找快,插入,添加,删除慢,因为要重新计算大小和更新索引。

6.Comparable和Comparator接口的作用和区别:

Comparable:提供compareTo()方法,如obj1.compareTo(obj2),返回-1,0,1表示obj1小于,等于,大于obj2;

Comparactor:提供了compare(obj1,obj2),obj1.equals(obj2),返回-1,0,1表示obj1小于,等于,大于obj2。

7.Enumeration和Iterator接口区别:

Enumeration速度是Iterator的两倍,且占用内存小。但是,Iterator比Enumeration安全,因为其他线程不能够修改正在被Iterator遍历的集合的元素,同时,Iterator允许调用者删除底层集合里的元素,这对Enumeration是不可能的。

8.HashSet和TreeSet的区别:

HashSet是有一个hash表来实现的,是无序的,添加,删除的时间复杂度为O(1);

TreeSet是有一个树形结构来实现的,是有序的,添加。删除的时间复杂的为O(log n).

9.有序的数组和无序的数组的区别:

有序数组查找元素的时间复杂度为O(log n),无序数组的时间复杂度为O(n).


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值