Java中常见的集合问题

1、数组封装

1.1 需求

数组操作,相对还是比较复杂的,也不能做添加和删除操作,当需要添加和删除的时候需要新见数组,赋值数组 或者元素移位,比较麻烦

所以 我们对这些添加和删除操作进行封装

1.2 编码实现

package day_01;

public class Array {

         /**

          * 封装的数组

          */

         private Object[] elements;

         /**

          * 数组中已有元素个数

          */

         private int size = 0;

         public Array() {

                  // 数组默认长度为 10

                  elements = new Object[10];

         }

         /**

          * 获取元素个数

          *

          * @return

          */

         public int size() {

                  return size;

         }

         /**

          * 根据索引获取数据

          *

          * @param index

          * @return

          */

         public Object get(int index) {

                  // 如果index >= size 说明 不存在

                  if (index >= size) {

                          throw new ArrayIndexOutOfBoundsException(index);

                  }

                  return elements[index];

         }

         /**

          * 更改

          *

          * @param index

          * @param element

          */

         public void set(int index, Object element) {

                  // 如果index >= size 说明 不存在

                  if (index >= size) {

                          throw new ArrayIndexOutOfBoundsException(index);

                  }

                  elements[index] = element;

         }

         /**

          * 向数组中添加元素

          *

          * @param element

          */

         public void add(Object element) {

                  // 1 判断数组中是否满了

                  if (size == elements.length) {

                          // 1.2 满了 就扩容,复制数组,再放进去

                          // 扩容为原来的二倍

                          Object[] newArr = new Object[size << 1];

                          // 数组复制

                          System.arraycopy(elements, 0, newArr, 0, size);

                          // 赋值

                          elements = newArr;

                  }

                  // 添加进去,size++

                  elements[size] = element;

                  size++;

         }

         /**

          * 删除指定元素

          *

          * @param index

          */

         public void remove(int index) {

                  // 如果index >= size 说明 不存在

                  if (index >= size) {

                          throw new ArrayIndexOutOfBoundsException(index);

                  }

                  // 移位

                  for (int i = index; i < size - 1; i++) {

                          elements[index] = elements[index + 1];

                  }

                  // 最后一位赋值为null

                  elements[size - 1] = null;

                  // 个数-1

                  size--;

         }

}

1.3 测试

 2.  集合  

2.1 概述

Java集合是使程序能够存储和操纵元素不固定的一组数据。 所有Java集合类都位于java.util包中。

【问】:之前我们需要把多个元素放到一起的时候,使用的是数组。那么为何还要提供Java集合工具类呢? 
我们通过对比数组和Java集合工具类来解释Java集合工具类的必要性。

数组

集合

长度固定

长度不固定

存放任意类型

不能存放基本数据类型,只能存放对象的引用


注意:如果集合中存放基本类型,一定要将其 “装箱”成对应的”基本类型包装类”。

2.2 继承体系

 

Collection 是集合,两个直接子接口是List和set

List 特性 : 有序 可重复,保证数据的添加顺序和取出顺序一致

Set 特性 : 无序 不可重复,不能保证数据的添加和取出顺序一致

List 有三个子类 :

ArrayList : 底层是数组,查询和更改效率极高

LinkedList : 底层是双向链表,添加和删除效率要高一些

Vector : 底层也是数组,是线程安全,已废弃,不推荐使用,已被ArrayList代替

Set有两个子类

HashSet : 底层是散列表

TreeSet : 底层是二叉树

2.3 collection 

Collection作为集合类的父类,所以,collection中的方法,是所有集合类都有的方法

2.3.1  常用方法

2.3.2  使用方式

 

2.3.3  迭代器 Iterator

 

 

 2.3.4 注意

 

 

 

 2.4 Foreach

 2.5  List

2.5.1 ArrayList

list 特性:有序 可重复 保证数据的添加顺序和取出顺序一致

List有三个子类

  ArrayList:底层是数组 查询和更改效率极高  默认初始化容量为10 扩大为原来的1.5 倍 非线程安全  创建对象的时候 没有容量就是0 当第一次添加数据的时候,才会初始化容量

1.5倍 oldCapacity+(oldCapacity>>1)

LinkList  底层是双向链表,添加和删除效率要高一些

vector 底层也是数组 是线程安全,已废弃 不推荐使用 已被ArrayList代替 默认初始化容量为10 扩大原来的2倍

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值