当前位置: 首页 > news >正文

Java学习第十二天--集合

目录

List集合(collection接口)

1.1ArrayList定义

1.2方法

2.1集合+泛型定义

 2.2方法

3.1LinkedList定义

3.2方法

4.1Vatory定义

4.2方法 

5.总结

集合

一个长度可变的容器。

List集合(collection接口)

List是一个有序的集合(也称为序列),底层是数组 自动扩容 初始容量10,它允许存储重复的元素。默认支持存储任意数据类型(引用数据类型,不支持基本数据类型)用户可以精准控制列表中每个元素的插入位置,并且通过索引0访问元素。

1.1ArrayList定义

由于底层是靠数组完成的数据存取,所以查询效率高(根据 index 查询),增删效率低。

1.2方法

package com.hualan.listDemo;
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
    public static void main(String[] args) {
        //1.创建集合对象 初始容量是10
            如果容量不足,扩容原有的1.5倍,如果1.5之后空间仍不足,扩容为所需的最小容量
        List list = new ArrayList();
        //2.增加元素 引用数据类型
        list.add("hello");
        list.add(12.3);//基本数据类型会自动装箱
        list.add("郭玉洁");
        //3.查询数据 根据索引下标 找到指定位置的元素
        //System.out.println(list.get(0));
        //4.根据下标更改数据
        //list.set(0,"你好");
        //5.获取数据
       // System.out.println(list.get(0));
        //6.移除某个元素
        list.remove(0);
        //System.out.println(list.get(0));
        list.remove("郭玉洁");
        //7.移除全部元素
        list.removeAll(list);
        System.out.println(list.size());
        //有序 新增的顺序和查询顺序保持一致
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //增强for循环(底层使用了迭代器)
        for(Object o : list){
        System.out.println(o);
        }
        //迭代器
        Iterator it = list.iterator();
        while(it.hasNext()){//判断迭代器中是否还有元素
        Object obj = it.next();//指针下移 获取当前元素
        System.out.println(obj);
}
        
    }
}

2.1集合+泛型定义

 规定集合中只能存储一种数据类型,避免运行过程中类型转换导致的异常

 2.2方法

package com.hl.listDemo;
import java.util.ArrayList;
import java.util.List;
/*
集合 + 泛型(规定集合中只能存储一种数据类型,避免运行过程中类型转换导致的异常)
*/
public class ArrayListDemo4 {
public static void main(String[] args) {
//泛型 <>
List<Object> list = new ArrayList<>();
list.add("a");
list.add(11);
list.add(new Student());
//要求集合中只能存储特定的数据类型
List<Student> list2 = new ArrayList<>();
list2.add(new Student());
//list2.add("1111");//编译错误
List<Student> list3 = new ArrayList<Student>();
//查询
for(Student stu:list2){
System.out.println(stu.getName());
}
//for object
for(Object obj:list){
Student stu = (Student)obj;
System.out.println(stu.getName());
}
}
}
class Student{
private String name;
public String getName() {
return name;
}

3.1LinkedList定义

linkedList 底层是双向链表
LinkedList 底层为链表 不牵涉初始容量和扩容机制
LinkedList 底层是双向链表和队列结构
队列 队头 队尾
LinkedList 有序,可以重复

3.2方法

package com.hualan.listDemo;
import java.util.LinkedList;
public class LinkedListDemo1 {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.add("hello");
        list.add("world");
        list.add("java1");
        list.add("java2");
        //在队头新增
        list.addFirst("java3");
        //在队尾新增
        list.addLast("java4");
        System.out.println(list);
        System.out.println(list.contains("java1"));
        System.out.println(list.indexOf("java1"));
        //获取第一个元素
        System.out.println(list.get(0));
        System.out.println(list.peek());
        System.out.println(list);
        //删除第一个元素
        System.out.println(list.remove(0));
        System.out.println(list.pop());
        System.out.println(list);
    }
}

4.1Vatory定义

Vector 实现类,它和 ArrayList 相似,唯一的区别是, Vector 在多线程环境下是安全的,但访问效率低。

4.2方法 

//线程安全 效率低 底层是数组
Vector<String> v = new Vector();
v.add("aaaaaa");
//线程不安全 效率高
List list = new ArrayList();
list.add("aaaaaa");
//创建一个线程安全的ArrayList对象
List list2 = Collections.synchronizedList(new ArrayList());

5.总结

Collection是单值集合,它可以细分为有序(有下标)可重复集合(List),和不可重复集合Set

List是有序可重复集合,有下标的概念,它除了具有Collection全部的功能外,添加了和index相关的方法。

ArrayList实现类,底层数据结构是数组,它的特点是按下标查找元素快,但是插入元素,删除元素效率低,因为需要移动数据。

LinkedList实现类,底层数据结构是双向链表,它的特点是插入、删除元素效率高,根据下标找元素效率低。

Vector实现类,它和ArrayList相似,唯一的区别是,Vector在多线程环境下是安全的,但访问效率低。

增强for循环或者迭代器 边迭代边删除 出现并发修改异常问

解决此问题需要 同步删除 迭代器中元素和list中的元素

相关文章:

  • Fisher信息、梯度方差与学习率调度器的计算流程
  • 3.17[Q]CV Bézier curve
  • TCP简单链接的编程实现
  • 使用vue3+el-form实现动态新增名称,值,并对名称进行必填校验
  • 电脑如何录屏
  • 华为OD机试 - 仿LISP运算 - 逻辑分析(Java 2023 B卷 200分)
  • C语言之 循环语句:程序运行的核心动力(上)
  • 一键批量txt转DWG,DWG转txt——插件实现 CAD c#二次开发
  • 消失的密文
  • 消息队列,阻塞队列的实现
  • 免训练指标(Zero-Cost Proxies)
  • JavaScript字符串处理
  • Spring 编程式事务管理实现
  • Redis 服务器:核心功能与优化实践
  • 深入解析Java面向对象三大特征之多态、final、抽象类与接口
  • 【芯片验证】面试题·对深度为60的数组进行复杂约束的技巧
  • DeepSeek-R1学习
  • AD绘图基本操作
  • 面试系列|蚂蚁金服技术面【3】
  • Hessian 矩阵是什么
  • 香港将展“天方奇毯”,从地毯珍品看伊斯兰艺术
  • 中山大学人类学系原系主任冯家骏逝世,享年95岁
  • 家电维修担心遇“李鬼”?上海推动“物业+专业服务”进社区
  • 西甲上海足球学院揭幕,用“足球方法论”试水中国青训
  • 明星同款撕拉片,为何能炒到三四百一张?
  • 正荣地产:公司控股股东已获委任联合清盘人