java-集合框架

本文深入解析Java集合框架,包括Collection、List、Set、Map接口及其主要实现类的特点与使用方法,探讨不同集合类型的选择依据。

java-集合框架

数组与集合

平时我们在存储数据时,一般都是选择数组形式进行存储,如:

在这里插入图片描述
数组虽然存取效率高,但使用时容量固定,只适合基本数据类型的存取

集合存取效率上有一定的牺牲,集合容量大小可以根据实际需求进行改变,提供丰富的存取方法,适合成为对象的“容器”

集合框架图

在这里插入图片描述
在这里插入图片描述

Collection接口

Collection就像是集合框架的根,它为集合提供添加删除等操作,继承自Iterable,说明此集合可以使用迭代器遍历。

包含方法:

  1. 获取集合大小:size()
  2. 判断集合是否为空:isEmpty()
  3. 判断集合中是否包含指定元素:contains(Object o)
  4. 返回集合中所有元素的数组: toArray()
  5. 向集合中添加元素:add(E e)
  6. 移除集合中指定元素 remove(Object o)
  7. 是否包含指定集合的所有元素 containsAll(Collection<?> c)
  8. 将指定集合添加到本集合: addAll(Collection<? extends E> c)
  9. 如果指定集合中的元素在此集合也存在,则删除 removeAll(Collection<?> c)
  10. 移除此集合中所有元素void clear()
  11. 将指定对象与此集合进行比较以获得相等性 equals(Object o)
  12. 返回集合的哈希值 hashCode()
set接口
特点:
  • 扩展Collection接口
  • 不允许重复元素
  • 没有排序
  • 允许一个null值
  • 对add()、元素的equals()和hashCode()方法添加了限制
  • HashSet是其实现类
List接口
特点
  • 扩展了Collection接口
  • 具有顺序的集合
  • 元素可以通过其整型下标访问
  • 可以包含重复元素
方法分类
  • 定位方法:
    get()、set()、add()、remove()、addAll()
  • 搜索方法:
    indexOf()和lastIndexOf()
  • ListIterator方法:
    listIterator()和subList()
List实现类
  • ArrayList类:
    由一个数组后推而成,查询快,增删慢
  • LinkedList类:
    由一个双向链表后推而成,查询慢,增删快
  • Vector:
    实现可变长度的对象数组,组件可以使用整型下标访问,线程安全
什么是重复
public boolean equals(Object obj)
  • 指示某个其他对象是否与此对象“相等”。
  • 注意:当此方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
public int hashCode()
  • set实现不重复判断思路
  1. 添加一个新的元素时,分别调用每个对象的hashCode方法,保存成功添加的hashCode值,以便快速查找对应的元素
  2. 当出现一个新的元素与set中已有元素的hashCode值相同
  3. 调用新元素的equals方法进行逻辑判断,返回true,认为重复,添加不成功
  4. equals返回false,认为不重复,添加成功
  5. hashcode不同,直接添加新元素
Iterator迭代器
对集合进行迭代的迭代器
  • 迭代器代替了java Collection Framework中的Enumeration.
包含方法如下:
  • boolean hashNext()
    如果仍有元素可以迭代,则返回true
  • Object next()
    返回迭代的下一元素
  • boolean remove()
    从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。每次调用next只能调用一次此方法。
双向迭代方式
  • boolean hashNext()
  • Object next()
  • boolean hasPrevious()
  • Object previous()
  • boolean remove()
Map接口
关键字唯一
  • 将键映射至值的对象
  • 每个键最多都只能映射至一个值
重要方法
  • 基本操作
    put()、get()、remove()、containsKey()、containsValue()、size()和isEmpty()
  • 批操作
    putAll()和clear()
  • 集合视图
    keySet()、values()和entrySet()
Map.entry
特点:
  • 集合元素实现的接口
  • 实体,包含键值对
包含方法:
  • getKey(),得到实体的键
  • getValue(),得到实体的值
  • setValue(Object o),修改实体的值
Map实现类
HashMap
非线程安全(非同步),效率高
HashTable
线程安全(同步),效率不如HashMap
  • Map遍历方式
    1.普遍使用,二次取值通过Map.keySet遍历key和value:
for(String key : map.keySet()){
	System.out.println("key="+key+"and value" + map.get(key));
}

2.通过Map.entrySet使用iterator遍历key和value:

Iterator<Map.Entry<String,String>> it = map.entrySet().iterator();
while(it.hasNext()){
	Map.Entry<String,String> entry = it.next();
	System.out.println("key="+entry.getKey() + "and value+" + entry.getValue());
)

3.推荐,尤其是容量大时,通过Map.entrySet遍历key和value:

for(Map.Entry<String,String> entry : map.entrySet()){
	System.out.println("key=" + entry.getKey() + "and value=" + entry.getValue());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值