Java的主要容器:
- Collection
- List
- ArrayList
- LinkedList
- Vector(过时)
- Set
- HashSet
- LinkedHashSet
- TreeSet
- List
- Map
-
HashMap
- LinkedHashMap
- TreeMap
- Hashtable(过时)
- ConcurrentHashMap(支持并发,待看)
-
HashMap
一、AraryList和Vector的区别
共同点:
这两个类都实现了List接口,它们是有序的集合。底层的数据结构是数组,都可以根据索引实现随机查询,并且速度快,插入删除由于要移动元素,所以速度慢。允许元素为null
不同点:
- AraryList是不同步的,效率高。Vector保证了数据的操作是同步的,效率低。可以使用collections.synchronizedlist(new ...)实现ArrayList的同步
二、HashMap和Hashtable的区别
相同点:都是实现了Map接口,底层是哈希表+红黑树
不同点:
- 同步性:HashMap非同步,Hashtable同步(需要同步用ConcurrentHashMap)
- 是否允许为null:HashMap允许为null,Hashtable不允许为null
- HashMap继承自AbstractMap,HashMap继承自Dictionary
- HashMap把Hashtable的contains方法去掉了,改成了containsValue和containsKey
三、 List和Map的区别
相同点:都是一种容器,可以储存元素(...)
不同点:
- 储存元素的方式:List储存的是单列的元素,Map存储的是键值对的元素
- 元素是否可以重复:List可以重复,Map不可以重复
- 元素是否有序:所有实现了List接口的集合都是有序的,Map无序(指的是是否保证插入顺序)
四、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?
添加元素的时候,如果key(也对应的Set集合的元素)相等,那么则修改value值。而在Set集合中,value值仅仅是一个Object对象罢了(该对象对Set本身而言是无用的)。在put中两个方法都要用
五、Collections和Collection的区别
- Collection是集合的一个接口,List和Set都继承了它
- Collections是操作集合的一个工具类,提供了很多搜索、查找、同步等方法
六、说出ArrayList,LinkedList的存储性能和特性:
ArrayList底层是数组,LinkedList底层是双向链表
- ArrayList可以使用下标对元素进行随机方法,而LinkedList
访问元素只能遍历链表 - ArrayList在插入删除元素时,需要移动元素。而LinkedLIst只需要修改对应的指针就可以了,消耗代价比较小。
- 但是在某些情况下(百万级数据量),还是ArrayList快。例如在末尾插入删除,不需要移动元素。
七、 ListListIterator有什么特点
- ListIterator继承了Iterator接口,它用于遍历List集合的元素。
- ListIterator可以实现双向遍历,添加元素,设置元素
八、什么是并发集合类
ava1.5并发包(java.util.concurrent)包含线程安全集合类,允许在迭代时修改集合
- 它们的迭代器是fail-fast的,遍历时修改会抛ConcurrentModificationException
十、Java中HashMap的key值要是为类对象则该类需要满足什么条件?
需要重写HashCode()和equals()方法
在调用put方法时,首先计算key的hash值(HashCode()),如果算的两个key的hash值相等是放到同一个桶上的。
- 调用equal(),如果key相等,就替换掉value
- 否则,就是发生了碰撞,将插入的元素放到合适的位置上。
在Object中的equals()默认是比较对象的地址的,我们认为如果两个对象的成员变量一样就说它们是相等,所以要重写equal()。又因为equals()认定两个对象相等,他们的hashcode也一定一样,所以也要重写hashCode()
十一、ArrayList中加入大量的数据,应该如何减小消耗
进行大数据量的插入时,ArrayList底层的动态数组频繁进行也会消耗大量的资源。因此可以在初始化时指定容量。也可以手动调用ensureCapacity(int minCapacity)进行扩容
十二、确定使用该集合类型下的哪个子类
- 有序的:所有实现了List的子类,LinkedHashSet,LinkedHashMap
- 同步的:线程安全的(Vector、Hashtable、ConCurrentHashMap)JUC包
- 排序的:红黑树类型的(TreeSet、TreeMap)
网友评论