list 集合框架

本文深入讲解了Java集合框架的核心概念,包括List接口及其实现类如ArrayList、Vector的特点,探讨了集合框架的遍历方法,特别关注了ListIterator的使用,以及ArrayList的内部结构和增长策略。同时,文章提供了代码示例,帮助读者理解集合框架的工作原理。

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

1集合框架(简介、Collection方法、迭代器)

集合框架中提供了一个内部类专门操作集合中的元素,这个内部类就是迭代器
数据结构
集合框架的由来:数据多了用对象进行存储,对象多了用集合来进行存储。
而存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系。
集合父类:List接口
集合子类:Arraylist、Vector、Linkedlist、
List 继承 Collection接口 并且依赖 ListIterator接口
ListIterator 接口 继承 Iterator接口
Collection 接口 , 依赖 ListIterator 接口

1.1 list 集合遍历的三种方法

// for(Object obj:al) {
// System.out.println(obj);
// }
//for循环 取下标
// for(int i=0; i<al.size();i++) {
// System.out.println(al.get(i));
// }
//迭代器
// Iterator it=al.iterator();
// while(it.hasNext()) {
// System.out.println(it.next());
// }
// 

1.2迭代器在内存中的一个走向
判断指针的下一个走向会不会指向一个对象,如果有,它必然就会指向一个对象,就执行hasNext()方法,然后就会判断al.next,如果这个元素%2==0,就打印这个元素的下一个元素,依次循环
在这里插入图片描述
1.3获取指定元素

// Iterator it=al.iterator();
// while(it.hasNext()) {
// System.out.println(it.next());
// int obj=(Integer)it.next();
// if(obj%2==0) {
// System.out.println(it.next());
// }
// }

2 集合框架List(ArrayList特有方法、特有迭代器、具体对象特点、增长因子论证)

学集合框架就是了解容器的数据结构
Collection
List 有序 元素可以重复 因为该集合体系有索引
Arraylist 数组结构 增删慢,查询快 有连续下标 线程不同步 增长因子为1.5 10
vector 数组结构 增删改查都慢 有连续下标 线程同步 增长因子2 10

2.1 特有迭代器ListIterator

public static void main(String[] args) {
ArrayList al=new ArrayList<>();
al.add(22);
al.add(24);
al.add(26);
al.add(28);
al.add(29);
ListIterator it=al.listIterator();
普通输出
while(it.hasNext()) {
System.out.println(it.next());
}
倒叙输出
while(it.hasPrevious()) {
System.out.println(it.previous());
}
}

2.2 Arraylist add方法

//数组结构
public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
//声明一个object[]的数组来存放元素
transient Object[] elementData; // non-private to simplify nested class access

//数组的长度默认为10

private static final int DEFAULT_CAPACITY = 10;

2.3增长因子论证代码

 public static void main(String[] args) throws Exception {
  ArrayList al=new ArrayList<>();
  for(int i=1;i<60;i++) {
   al.add(i);
   System.out.println(i+",");
   getLen(al);
  }


public static void  getLen(ArrayList al)throws Exception{
 Field field=al.getClass().getDeclaredField("elementData");
 field.setAccessible(true);
 Object obj=field.get(al);
 Object[] elementData=(Object[])obj;
 System.out.println("当前操作的list集合中低层存放数据容器的长度:"+elementData.length);
 }
 }

2.4如何对lits进行性能调优

  • 每当容器的元素长度超过上限都会改变容器的容量
  • 根据需求来给容器的容量,到了上限翻1.5倍,并且只翻倍一次
 public static void main(String[] args) throws Exception {
  ArrayList al=new ArrayList<>(50);
  for(int i=1;i<60;i++) {
   al.add(i);
   System.out.println(i+",");
   getLen(al);
  }


public static void  getLen(ArrayList al)throws Exception{
 Field field=al.getClass().getDeclaredField("elementData");
 field.setAccessible(true);
 Object obj=field.get(al);
 Object[] elementData=(Object[])obj;
 System.out.println("当前操作的list集合中低层存放数据容器的长度:"+elementData.length);
 }
 }

3、集合框架Vector

1.特有的遍历方式

public class VectorDemo {
public static void main(String[] args) {
 Vector v=new Vector<>();
 v.add(22);
 v.add(24);
 v.add(26);
 v.add(28);
 v.add(29);
 Enumeration elements = v.elements();
 while(elements.hasMoreElements()) {
  System.out.println(elements.nextElement());
 }
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值