【编程语言】java--集合

本文深入讲解Java集合框架的基础概念及核心组件,包括List、Set、Map等的主要特点和应用场景,并对比了不同集合类的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合类
数组与集合的区别:
      数组  集合  存储对象
      数据多了对象存,对象多了用集合存
      数组固定长度,集合可变长度
      数组统一类型,集合对象类型可以不同


collection
接口
List  arrayList  LinkList  Vector
Set HashSet  TreeSet
每种容器的数据结构不同
接口没有构造方法,只有普通方法
Collection 
Collection接口是Set接口和List接口的超类,所以Collection的特性都适用于Set和List接口,而Set和List接口在Collection的基础上。增加了新的特性和方法。下面是Collection接口的通用方法: 
1.增加
    Boolean add(Object) 集合中加入一个对象,成功时返回true 
    Boolean addAll(Collection) 集合中加入另外一个集合对象 
2.判断
    int size() 集合内容纳元素的数量 
    boolean isEmpty() 集合是否为空 
    boolean contain(Object) 集合内是否有参数对象 
    Boolean containsAll(Collection) 判断集合内是否包含子集 
 
3.删除
    Boolean remove(Object) 从集合中删除对象 
    Boolean removeAll(Collection) 清空指定集合 
    Boolean retainAll(Collection) 删除子集合不包含的元素 
    Void clear() 清空集合
集合中存放的是地址
4.其他
    Iterator iterator() 产生一个迭代器 
    Object[] toArray() 返回一个包含所有元素的对象数组 
    Object[] toArray(Object[]) 把所有元素放入对象数组中


迭代器:
在每一个对象里面都有一个类都实现了Iterator接口
取出的动作封装成了对象,每个容器里面都有一个取出的对象,取出这个类定义了集合的内部,即Iterator是内部类,内部类完成了取出动作,每个容器都有,把取出方式定义在了集合的内部,取出方式可以直接访问类内部元素,而每一个容器的数据结构不同,所以取出的动作细节不同,但是都有共性内容即:判断,取出。
那么这些内部类,都符合一个规则,该规则是Iterator。如何获取取出的对象呢,通过一个对外提供的方法即 Iterator()方法。


列表迭代器
在迭代过程中准备添加或者删除元素
Iterator it = al.iterator();


while(it.hasNext())
{
object obj = it.next();
if(obj.equals(“”)
   a1.add();


}


集合和迭代器不能同时使用
List集合特有的迭代器是Iterator的子接口
在迭代时不可以通过集合对象的方法操作集合中的元素,会发生并发修改异常
所以,在迭代时,只能用迭代器方法操作元素,可是Iterator方法是有限的,只能查看删除,如果要实现其他操作,如修改等,该接口只能通过


取出元素




List  元素是有序的,且元素可以重复,因为该集合体系有索引
Set   元素是无序的,元素不可以重复
 List特有方法(方法中凡是可以操作角标的方法)
增  add(index,element)  addAll(index,Collection)
删   remove(index)
改 set(index,element)
查 get(index)  subList(from,to)  listiterator(); 


 常见三个子类对象
ArrayList  底层的数据结构使用数组 查询速度快
LinkedList  底层使用链表数据结构增删快,查询慢
Vector底层是数组数据结构vector 1.0是出现的 ArrayList是1.2时出现的
         Vector是同步的,ArrayList线程不同步
ArrayList默认长度10,添加50%延长,创建15的数组,把以前的copy过来
vector 100%延长,


 Vector有特殊之处
void addElement(E obj)
Enumeration elements()
Enumeration en = v.elements()
枚举是vector的特有取出方式  发现枚举和迭代器很想像,其实枚举和迭代是一样的,因为枚举的名称和方法的名称都过长,所以被迭代器取代1.0是只有枚举


LinkedList不同步
addFirst  addLast getFirst getLast removeFirst removeLast
如果集合中没有元素
在JDK1.6出现了替代方法
offerFirst()
offLast()没有元素返回空
   
使用linkedList模拟一个堆栈或者队列数据结构
去除arrayList重复元素


强制类型转换
Iterator it = al.iterator();
while(it.hasNext())
{
Person p = (Person)it.next();
p.getName();
}


List集合判断元素是否相同,依据的是元素的equals方法
contains原理是 调用equals方法 remove底层也是调用equals


Set元素无序,元素存入取出的顺序不一定一致,元素不重复


Set集合的功能和collection是一致的
常见的子类
HashSet:底层数据结构是哈希表 先判断hash值,然后比较值
TreeSet     数据结构二叉排序树


HashCode
判断唯一性:
   先调用hashcode函数后调用equals方法
hashset通过hashcode equals保证的唯一值 这两个方法是自动调用的,
注意:对于判断元素是否存在以及删除等操作,依赖的方法是元素的hashCode和equals方法,
arraylist只依赖equals


TreeSet
treeSet 可以对set集合中的元素进行排序,自定义类需要实现comparable接口
记住排序时,当主要条件相同时,一定要判断次要条件 
保证函数唯一性的一句是CompareTo()方法return 0
treeSet排序的第一种方式,让元素自身具备比较性,元素需要实现Comparable接口


TreeSet集合的第二种方式
当元素自身不具备比较性时,或者具备的比较性不是所需要的,这是需要集合自身具备比较性
在集合初始化时就有了比较方式,参与构造函数
定义了比较器,将比较器对象定义成参数,传给treeSet集合的构造函数
当两种排序都存在时,按比较器进行排列
比较器  :定义一个类,实现comparator接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值