Java集合

Java集合主要包括Collections(存放单一元素)和Map(存放键值对)

Collections包括:Set,List,Queue

Set包括HashSet,LinkedHashSet,TreeSet

List包括ArrayList,LinkedList,Vector

Queue包括PriorityQueue,DelayQueue,ArraDeque

Map包括:HashMap,LinkedHashMap,Hashtable,TreeMap

ArrayList原理

构造方法

ArrayList(int initialCapacity)

initialCapacity>0,实例化数组,长度即指定长度

initialCapacity=0,实例化数组,为空

initialCapacity<0,抛出异常

ArrayList():

创建一个空数组,但此时数组为空。等有元素放入时,才会变成10.

ArrayList(Collection<? extends E> c):

传入的是一个Collection对象,

如果Collection对象长度>0,则执行Arrays.copy()方法将Collection对象内容复制

如果Collection对象长度=0,则将初始化空数组

代码示例
java 复制代码
 public static void main(String[] args) {

        ArrayList<Object> arr1 = new ArrayList<>();

        arr1.add("test1");
        arr1.add("test2");
        System.out.println("arr1 " + arr1);
        ArrayList<Object> arr2 = new ArrayList<>(arr1);
        System.out.println("arr2 " + arr2);

    }
输出结果
bash 复制代码
arr1 [test1, test2]
arr2 [test1, test2]

get()方法

先检查有无越界,然后通过数组下标获取元素(因为ArrayList底层是数组)

set(int index,E element)方法

先检查有无越界,记录该位置的旧值,替换新值,返回旧值

add()方法

add(E element)

如果数组为空,该数组的容量变成10,

如果数组不为空,则添加元素后小于数组长度,则不会扩容,否则就会扩容,

如当第一次调用add()方法时候,elementData.length为0,然后扩容成10,后面继续添加9个元素,依然不会扩容,因为没有超过数组容量10,当添加第11个元素时,会调用grow()方法扩容,int newCapacity = oldCapacity + (oldCapacity >> 1)

然后调用Arrays.copy(int [] origial,int newLength)方法,在这个方法中,创建一个新数组,长度为newLength,然后调用System.arratcopy()方法将旧数组拷贝给新数组,并返回新数组。

add(int index, E element)

先检查是否越界,确认list容量,容量不够,就+1;对数组index开始的元素进行复制到index+1开始的位置,目的就是空出index的位置插入element.

LinkedList原理

构造方法

LinkedList()

LinkedList(Collection<? extends E> c)

add()方法

add(E e)

将最后一个元素赋值给节点L,创建新节点,设置新节点的前驱节点为L,后继节点为空,同时更新last节点为新节点,并且判断L是否为空,如果为空则是第一次添加,将first赋值为新节点,否则L的next节点就是新节点。

尾部插入元素

add(int index, E element)

在指定位置添加元素,如果index等于链表长度,则调用linkLast(element)方法;

如果索引是否小于节点数量的一半,从头开始查找;

否则从尾部开始查找。

remove()方法

remove(E e)

删除链表中首次出现的指定元素,如果不存在该元素则返回 false。

remove(int index)

HashMap()原理

未完结

相关推荐
艾莉丝努力练剑6 分钟前
【AI大模型接入SDK】C++ ChatSDK使用手册
开发语言·网络·c++·人工智能·学习·大模型
panxianren7 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
“AI国潮设计-小江”9 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人9 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
sunshine22 girl9 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs9 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang10 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl10 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat10 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
菜鸟~noob23311 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战