2025年集合的特性和遍历

集合的特性和遍历集合概述 集合和数组的差别 相同点 都是容器 可以存储多个数据 不同点 1 数组的长度是不可变的 集合的长度是可变的 2 数组可以存基本数据类型和引用数据类型 3 集合只能存引用数据类型 如果要存基本数据类型 需要存对应的包装类 集合体系结构 Collection 集合

大家好,我是讯享网,很高兴认识大家。

集合概述
集合和数组的差别
相同点:
都是容器,可以存储多个数据
不同点:
1.数组的长度是不可变的,集合的长度是可变的
2.数组可以存基本数据类型和引用数据类型
3.集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类

集合体系结构
在这里插入图片描述
讯享网

Collection集合

Collection集合概述
1.是单列集合的顶层接口。它表示一组对象,这些对象也称为Collection的元素
2.JDK不提供此接口的任何实现,它提供更具体的子接口(如Set和List)实现
创建Collection集合的对象
1.多态的方式
2,.具体的实现类ArrayList
Collection常见的成员方法
在这里插入图片描述

迭代器的使用

迭代器介绍
1.迭代器,集合的专用遍历方式
2.Iterator iterator():返回此集合元素的迭代器,通过集合对象的Iterator()方法得到,默认指向当前集合的0索引
Iterator中的常用方法

  1. boolean hasNext():判断当前位置是否有元素可以被取出
  2. E next():获取当前位置的元素,将迭代器对象移向下一个索引位置
 ```java Collection<String> saozi = new ArrayList<>(); saozi.add("李小璐"); saozi.add("马蓉"); saozi.add("董洁"); saozi.add("孙一宁"); //遍历集合,打印嫂子 //1.获取迭代器对象,根据集合对象去获取,不是new Iterator<String> iterator = saozi.iterator(); //为什么要根据集合对象获取迭代器对象呢? //因为这样的话,集合中的数据就直接交给了这个迭代器 //如果是直接new的话,它和集合的数据有半毛钱关系?//2.开始遍历集合,如果集合中已经没有数据了,迭代器获取数据会报错 //不知道遍历几次,所以使用while循环,循环的条件就是集合中要有数据 while (iterator.hasNext()) { 
    //3.集合中有数据,开始使用迭代器获取 String str = iterator.next(); System.out.println(str); } //这种使用hasNext和next结合获取数据的语法习惯,不仅仅是迭代器独有的 //这种语法应用也会在以后学习的数据库中jdbc的内容出现 //根据这种语法习惯,到时候可以直接推理出jdbc方式获取数据的相关api 

讯享网

增强for:基本格式
介绍:
1.它是JDK5之后出现的饿,其内部原理是一个Iterator迭代器
2.实现Iterable接口的类才可以使用迭代器和增强for
3.简化数组和Collection集合的遍历
格式
for(集合/数组中元素的数据类型 变量名 : 集合/数组名) {
// 已经将当前遍历到的元素封装到变量中了,直接使用变量即可
}

讯享网public class MyCollectonDemo1 { 
    public static void main(String[] args) { 
    ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); list.add("f"); //1,数据类型一定是集合或者数组中元素的类型 //2,str仅仅是一个变量名而已,在循环的过程中,依次表示集合或者数组中的每一个元素 //3,list就是要遍历的集合或者数组 for(String str : list){ 
    //优势就是,当你需要遍历集合的时候,你就不用在考虑范围的事情,也不用考虑条件的事情 System.out.println(str); } } } 

增强for:注意点
1.如果需要操作索引,使用普通for循环
2.如果在遍历的过程中需要删除元素,请使用迭代器
3.如果只是想遍历,那么使用增强for

List集合

list集合概述
1.有序集合,这里的有序指的是存取顺序
2.用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
3.与Set集合不同,列表通常允许重复的元素
List集合的特点
1.存取有序
2.可以重复
3.有索引
特有方法
在这里插入图片描述

public class Test { 
    public static void main(String[] args) { 
    //1.准备素材 List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); //2.验证它的特有方法,先验证add(添加的位置,添加的元素) list.add(0,"我真帅"); System.out.println(list); //3.remove list.remove(1); System.out.println(list); //4.add方法没有改变其他元素,但是set方法会改变对应索引的元素,将其覆盖 list.set(2, "我真特么帅"); System.out.println(list); } } 

List集合的实现类

1.ArrayList:底层数据结构是数组,查询快,增删慢
2.使用空参构造创建的集合,没有添加数据之前,集合和内部数组的长度都是0
3.添加了一个数据之后,集合的长度是1,但是内部数组的长度是10

讯享网List<String> list = new ArrayList<>(); / * public boolean add(String e) { * modCount++; * //调用这个三个参数的add方法添加数据 * //e是要添加的数据,elementData是初始化的数组,size的值是0 * add(e, elementData, size); * return true; * } * * private void add(E e, Object[] elementData, int s) { * //第一次添加数据,数组长度是0,s是0 * //所以调用了grow()。 * if (s == elementData.length) * //把返回的新数组,替换了原来的旧数组 * elementData = grow(); * //再去给这个替换后的数组赋值,s索引赋值 * elementData[s] = e; * //size还得加1,因为多了一个数据 * size = s + 1; * } * * * private Object[] grow() { * //size+1=1 * return grow(size + 1); * } * * * private Object[] grow(int minCapacity) { * //Arrays.copyOf()这个方法是创建一个新的数组,把老数组的数据复制到新数组中 * //关键就是新数组的长度是多少,新数组就是后面一个参数 * //newCapacity(1) * return elementData = Arrays.copyOf(elementData, * newCapacity(minCapacity)); * } * * * private int newCapacity(int minCapacity) { * //minCapacity=1 * //elementData.length是0。所以oldCapacity也是0,代表旧数组容量 * int oldCapacity = elementData.length; * //oldCapacity + (oldCapacity >> 1);这句是自己的容量加上自己一半的容量,扩容1.5倍 * //扩容后的容量给了新容量newCapacity * int newCapacity = oldCapacity + (oldCapacity >> 1); * //第一次的时候就容量是0,所以扩容后还是0,这里继续判断 * if (newCapacity - minCapacity <= 0) { * //第一次添加数据的时候,满足这个判断的条件,能够进来 * //elementData现在是空数组 * //DEFAULTCAPACITY_EMPTY_ELEMENTDATA这个也是个空数组,就是一开始给elementData赋值的那个数组 * //肯定相等 * if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) * //就能执行这一句,获取两个参数的其中最大的那个值 * //minCapacity是1,DEFAULT_CAPACITY是10,得到的结果是10 * return Math.max(DEFAULT_CAPACITY, minCapacity); * //相当于return 10 * if (minCapacity < 0) // overflow * throw new OutOfMemoryError(); * return minCapacity; * } * return (newCapacity - MAX_ARRAY_SIZE <= 0) * ? newCapacity * : hugeCapacity(minCapacity); * } */ list.add("a"); 

LinkedList:基本运用

1.LinkedList:底层是链表结构的实现,查询慢,增删快

练习:使用LinkedList完成存储字符串并遍历 LinkedList<String> ll = new LinkedList<>(); ll.add("李小璐"); ll.add("马蓉"); ll.add("董洁"); ll.add("潘金莲"); //遍历集合:普通for for (int i = 0; i < ll.size(); i++) { 
    System.out.println(ll.get(i)); } System.out.println("===================="); //迭代器 Iterator<String> it = ll.iterator(); while (it.hasNext()) { 
    System.out.println(it.next()); } System.out.println("===================="); for (String s : ll) { 
    System.out.println(s); } 

LinkedList:特有功能
在这里插入图片描述

小讯
上一篇 2025-01-06 19:36
下一篇 2025-02-22 16:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/62082.html