集合框架中的一些要点

首先以下四点是我此篇博客要解决的几个问题
1.ArrayList与LinkedList的区别和使用场景
2.ArrayList与Vector的区别和使用场景
3.HashSet与Treeset的使用场景
4.HashMap与TreeMap的使用场景



1.集合框架:Java中定义的一些数据结构类(util包中)
2.Collection类:表示一组数据的类
列表:(List接口)有序的collection
常用List实现类ArrayList、LinkedList、Stack、Vector
集合:(Set接口)无重复的collection
常用Set实现类HashSet、TreeSet
3.Map类:将键映射到值的对象
  键是一个Set,不能重复,每个键对应一个值
常用Map实现类HashMap、TreeMap
在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。这就是我们平时说的键值对。
k不能重复,每个k都有对应的value,假如存入的k已经存在,value不同,则覆盖原有的value

一、ArrayList与LinkedList基本区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
①ArrayList:(实现动态数组的数据结构)有序的,可重复的,长度可变的,有下标的,地址连续的   不是同步的
优势与劣势:由于地址是连续的,便于查询,但是不便于插入和删除
int t[] = new int[5]
t存储的是第一个元素的单元地址
t-->0x10
0x10
0x11
0x12
0x13
0x14
t[0] = 0x10+0;
t[1] = 0x10+1;
t[2] = 0x10+2;
t[3] = 0x10+3;



②LinkedList:(实现链表的数据结构)有序的,可重复的,长度可 变的,有下标的,地址是任意的
优势与劣势:LinkedList存储数据的方式是 一个节点中第一个位置存储前一个节点的地址,中间位置存储数据,最后一个位置存储下一个节点的地址,这样在查找起来比较费时,需要根据前一个节点找到下一个节点的地址,再找到下下一个节点的地址。但是插入和删除的操作效率高,只需要将指向的地址改变即可



二、ArrayList与Vector的区别和使用场景
Vector向量:和ArrayList一样是长度可变的动态数组,使用的默认容量大小都为10,用法 与ArrayList一样。
与ArrayList的基本区别:
(使用场景)①Vector是同步的,可以在多线程中使用,ArrayList不是同步的,不在多线程中使用
②ArrayList支持序列化,Vector不支持
③容量增加方式不同:在增加元素时,若容量不足进行扩充 
 新数组大小为之前数组大小*1.5+1 ,加上1保证oldCapacity 为1的情况也能扩充为2 

三、HashSet与Treeset的使用场景
HashSet:无序的,不可重复的,长度可变的


TreeSet:按内容的自然顺序排序,不可重复的,长度可变的
(添加相同的内容添加不进去)
使用场景:元素不重复



四、HashMap与TreeMap的使用场景



使用场景:HashMap:适用于在Map中插入、删除和定位元素。
          TreeMap:适用于按自然顺序或自定义顺序遍历键(key)。
一般用HashMap在需要排序的Map时候才用TreeMap。两个都不是同步的。

猜你喜欢

转载自379185161.iteye.com/blog/2252804