集合,List,Set,数据结构

目录

集合

Set接口

数据结构


集合

引出:

        数组:数组一旦创建  长度不可变

        int[] ages = new int[5];

数组的扩容:创建新的数组  将元素进行复制拷贝

集合:

        存储数据的容器

        集合长度可变

        集合中只能存储引用数据类型的对象

基本数据类型可以通过自动装箱直接转为包装类的对象进行存储

集合默认情况下可以存储任意类型的数据

也可以通过给集合指定泛型来限制集合存储元素的数据类型

Collection-集合的顶级接口

                        -List-子接口

                        --ArrayList 实现类

                        --LinkedList 实现类

                        -Set-子接口

                        --HashSet 实现类

--LinkedHashSet 实现类

                        --TreeSet 实现类

原理

                        -Queue-子接口

                        --LinkedList 实现类

        原理

集合划分:

        1、元素是否可以重复

        2、能否保证元素的存储顺序 

        3、能否对元素进行排序

Collection接口

        通过ArrayList 实现类来练习Collection接口中方法的使用

        JDK1.2版本开始提供

方法:

        boolean add(E e)--添加元素

        boolean addAll(Collection<? extends E> c)--从参数集合中添加元素到当前集合

        void clear()-移除集合中所有元素  清空集合

        boolean contains(Object o)--判断当前集合是否包含参数元素

equals方法对元素进行比较是否相等

        boolean containsAll(Collection<?> c)--判断当前集合中是否包含参数集合的所有元素

        boolean equals(Object o)--判断集合中元素是否相同

        boolean isEmpty()--判断集合中是否没有元素

        boolean remove(Object o)--移除集合中的元素

        boolean retainAll(Collection<?> c)--求交集

        int size()-返回集合中元素的个数

        Object[] toArray()-将集合转数组

集合的遍历:

1、将集合转数组 遍历数组

        List子接口:

特点:

        List可以保证元素的存储顺序-索引(下标)  可以通过索引来操作List集合中的元素

        List集合中允许存在重复的元素

        List集合中允许存在多个null

方法:

        从Collection中继承过来的方法

        void add(int index, E element)

index取值范围

index从0开始

最大值为集合元素的个数

如果超出范围,会抛出异常

原理:

如果指定index位置已经有元素存在,将当前位置以及之后的元素全部向后挪一位 将要添加的元素插入

如果该位置没有元素,则直接插入

                E get(int index) - 获取指定index位置处的元素

index取值范围

0~长度-1

                int indexOf(Object o)--查找参数元素在集合中第一次出现的下标

                int lastIndexOf(Object o)--查找参数元素在集合中最后一次出现的下标

如果没有找到 则返回值为-1

                E remove(int index)

移除指定位置的元素 将当前位置之后的元素依次向前挪了一位

                E set(int index, E element)--设置指定下标处的元素值

index:

0~长度-1

                List<E> subList(int fromIndex, int toIndex)

遍历List集合:

1、普通for循环

for (int i = 0; i <= list.size()-1 ; i++) {

            System.out.println(list.get(i));

        }

2、foreach遍历集合

for (int i:list) {

           System.out.println(i);

           }

ArrayList :

基于数组实现。

查询快 增删慢

构造方法:

public ArrayList()--构造一个初始容量为10的列表

底层是创建了一个长度为10的数组如果元素的个数超过数组的长度了  则会触发数组扩容

public ArrayList(int initialCapacity)--构造指定初始容量的列表对象

减少数组扩容的发生 提高程序的执行效率

底层数组扩容源码:

 int newCapacity = oldCapacity + (oldCapacity >> 1);//10+10>>1=10+10/2=15

//15+15>>1=15+7=22

默认情况下初始容量为10,第一次扩容之后为15,第二次扩容22,第三次扩容为33,…

elementData = Arrays.copyOf(elementData, newCapacity);

应用场景:

查询多  增删少的场景 

LinkedList

LinkedList基于链表数据结构实现的

查询慢  增删快

构造方法:

LinkedList()

构造一个空列表。

方法:

从Collection List接口实现

应用场景:

增删多 查询少的场景

Set接口

特点:

        元素不能重复

        允许元素为null,但是只能一个

方法:

        都是从Collection直接继承过来的

        如何判断元素重复:

        equals方法来进行判断的

        如果元素类型是自定义类需要注意重写equals方法

        

HashSet

        底层是通过HashMap来实现的

特点:

        元素不能重复

        允许元素为null,但是只能一个

        不能保证元素的存储顺序 且保证不了顺序是不变的

“hello” "hi"  "world"

 "world" “hello”  "hi"  "abc"  "def"

 "hi" "world" "hello"

构造方法:

        public HashSet()

创建HashMap实现的  初始容量为16  加载因子 0.75

        public HashSet(int initialCapacity)

创建HashSet对象 指定初始容量

减少扩容的次数 提高程序效率

LinkedHashSet

        是HashSet的子类

        元素不能重复

        允许元素为null,但是只能一个

        保证元素的存储顺序-底层维护了一个链表

构造方法:

LinkedHashSet()

        构造一个新的,空链接的哈希集,默认初始容量(16)和负载因子(0.75)。

数据结构

组织数据的形式

数组

数组元素的内存空间是连续

链表

链表元素的内存空间不连续

队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乔同学Online

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值