完整的Java集合类的总结

Java集合类的总结

一、各个集合类的关系总图

在这里插入图片描述

由图可见集合可分为两大类,继承Collection接口的与继承Map接口

二、Collection接口

1. 常用方法
boolean add(Object e)   //向集合中添加元素
int size()        //获取集合中元素的个数
void clear()       //清空集合
boolean remove(object o)//删除集合中的某个元秦。
boolean isEmpty()    //判断该集合中元素的个数是否为e
object[] toArray()    //调用这个方法可以把集合转换成数组。
boolean contains(Object o)//判断当前集合中是否包含元素o,包含返回true,不包含返回false
2. 迭代器

通过iterator()可返回一个iterator的迭代器对象,可通过一下方法遍历集合

Iterator<string> it = list.iterator();
while(it.hasNext()){    //hasNext()返回是否有下一个元素
	System.out.println(it.next());   //next()获取下一个元素
}

3. List接口

List集合存储元素特点:

有序可重复,存储的元素有下标。
有序实际上是说存进去是这个顺序,取出来还是这个顺序。这里的顺序不是
说按照大小排序。有序是因为List集合都有下标,下标从o开始,以1递增。

1) 常用方法
void add(int index, E eLement)
 get(int index)
int indexof( object o)
int lastIndexOf(object o)
E remove(int index)
E set(int index, E eLement)
2) ArrayList集合

ArrayList集合底层采用了数组这种数据结构;ArrayList集合是非线程安全的

ArrayList集合扩容是原容量的1.5倍

优化方案:尽可能少的扩容。因为数组扩容效率比较低,建议在使用ArrayList集合
的时候预估计元素的个数,给定一个初始化容量。

Collections工具类collections.synchronizedList()方法可以将ArrayList变为线程安全的

优缺点:由于底层是数组,所以随机增删效率较低,但是检索效率非常高;往数组末添加元素时,效率不受影响;因为需要连续存放数据,因此可能没有太大的连续内存块来存放大数据

3) LinkedList集合

LinkedList集合底层采用了双向链表数据结构;LinkedList集合也是非线程安全的

优缺点:由于链表的数据结构,随机增删效率较高,但是检索效率较低;因为不需要连续存放数据,因此可用来存放大数据

4) Vector集合

vector集合底层采用了数组这种数据结构,vector集合是线程安全的.
Vector所有的方法都有syncronized关键字修饰,所以线程安全,但是效率
较低,现在保证线程安全有别的方案,所以Vector使用较少了.

4. Set接口

set集合存储元素特点:

无序不可重复。
无序表示存进去是这个顺序,取出来就不一定是这个顺序了,
另外set集合中元素没有下标,Set集合中的元素还不能重复。

1) HashSet

HashSet底层就是HashMap的key部分,这里可直接参考HashMap

2) SortedSet下的TreeSet

1、TreeSet集合底层实际上是一个TreeMap
2、TreeMap集合底层是一个二叉树。
3、放到TreeSet集合中的元素,等同于放到TreeMap集合key部分了。
4、TreeSet集合中的元素:无序不可重复,但是可以按照元素的大小顺序自动排序。
称为:可排序集合。

若用来存放自定义对象元素需要实现Comparable接口下compareTo方法,或者在构造TreeSet或TreeMap时传一个实现Comparator接口的比较器对象

三、Map接口

1、Map集合和Collection集合没有关系。
2、Map集合以key和value的这种犍值对的方式存储元紊。
3、key和value都是存储java对象的内存地址。
4、所有Map集合的key特点:无序不可重复的。
Map集合的key和Set集合存储元紊特点相同。

1. 常用方法
v put(Kkey, v value) //向Map集合中添加键值对
v get(object key)  //通过key获取vaLue
void cLear()  //清空Map集合
boolean containsKey(object key)  //判断Map中是否包含某个key
boolean containsValue(object value)  //判断Map中是否包含某个value
booLean isEmpty()  //判断Map集合中元素个数是否为e
Set<K> keySet()  //获取Map集合所有的key (所有的键是一个set集合)
v remove(Object key)  //通过key删除键值对
int size()  //获取Map集合中键值对的个数。
Collection<V> values()//获取Map集合中所有的value,返回一个Collection
Set<Map.Entry<K,V>> entrySet()//将Map集合转换成set集合
2. HashMap(面试最常问)

HashMap集合底层是哈希表数据结构,是非线程安全的。

哈希表是一个怎样的数据结构呢?(不多赘述,不懂的可自行百度)
哈希表是一个数组和单向链表的结合体。
数组∶在查询方面效率很高,随机增删方面效率很低。
单向链表:在随机增删方面效率较高,在查询方面效率很低。
哈希表将以上的两种数据结构融合在一起,充分发挥它们各自的优点。

HashMap集合的默认初始化容量是16,默认加载因子是0.75
这个默认加载因子是当HashMap集合底层数组的容量达到75%的时候,数组开始扩容。

如果哈希表中单项链表元素超过8个,结构会变成红黑树;小于6个时,又会重新变成单向链表

注意:当key部分存储为自定义对象时,需要重写hashCode()与equals()方法

3. Properties集合

Properties是线程安全的,因为继承Hashtable,另外Properties存储
元紊的时候也是采用key和value的形式存储,并且key和value只支持String类型,
不支持其它类型。Properties被称为属性类。
常与IO联合应用来读写属性配置文件

4. SortedMap下的TreeMap集合

SortedMap集合的key存储元素的特点:
首先是无序不可重复的,另外放在SortedMap
集合key部分的元素会自动按照大小顺序排序,
称为可排序的集合。
TreeMap集合底层的数据结构是一个二叉树。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值