JAVA集合框架

 目录

1.1目录

1.2为什么使用集合?

1.3集合的架构

 1.4 List集合 - ArrayList

 1.4.0创建集合对象

1.4.1添加的操作

1.4.2 删除的操作

1.4.3修改的操作

1.4.4查询操作

1.4.5ArrayList底层源代码

1.5LinkedList

1.5.1添加

1.5.2 删除操作

1.5.3修改操作

1.5.4查询操作

1.6 Set集合

1.6.1 HashSet集合

1.6.1.1 创建HashSet对象

 1.6.1.2 添加元素

1.6.1.3 删除

1.6.1.4 修改

1.6.1.5 hashSet的遍历

1.6.1.6 hashSet的源码

1.7 TreeSet集合

1.8  Map 属于键值对模式

1.8.1 如何创建Map对象

1.8.2 HashSet 的底层原理



 1.2为什么使用集合?

1. 思考: 数组有缺陷?--定容【一定数组定义好,他们得长度就无法改变.】如果需要改变数组得长度,变得很复杂。

2.我们是否可以定义一个长度改变的容器。---当然可以。

3.手撕可变长度的容器。

//自定义可改变长度的容器内容

public class Myarray {

    private Object [] arr;//声明一个Object类型的数组

   private int size;//表示数组下标 因为他们是类成员变量 在创建对象时都有默认

 public Myarray(){//无参构造函数
        this(5);//本类中其他的构造函数 this本类的对象。 如果在构造方法中this()表示调用本类的其他构造函数
    }
    public Myarray(int size){
        if(size<0){
            throw new RuntimeException("数组长度有问题");
        }
        arry=new Object[size];
    }
    //把元素o放入数组arry
    public void addDate(Object o){
        //判断数组长度是否已满
        if(size>= arry.length){
            //扩容--1.容器长度边长 2.把原来容器中的元素复制到新的容器中
            Object[] newArry=Arrays.copyOf(arry,size*2);
            arry= newArry;
        }
        arry[size]=o;
        size++;
    }
    //根据下表获取数组中的元素
    public Object getDate(int index){
        if(index>size){
            throw new ArrayIndexOutOfBoundsException("数组下标越界");
        }
        Object o = arry[index];
        return o;
    }
}
 

我们自己可以手写一个可变的容器,那么别人也可以手写可变的容器。

java官网 基于数组 根据不同的数据结构  创建了多个类  而这些类统称 为集合框架。

以后 我们在说集合框架时  就表示多个类。

1.3集合的架构

 1.4 List集合 - ArrayList

 1.4.0创建集合对象

List list = new ArrayList();//创建一个集合对象 如果没有指定集合容器的长度默认为10

List list1 = new ArrayList(15);

1.4.1添加的操作

//添加(1)可添加任意类型

list.add("123");
list.add("321");
list.add(15.1);
list.add(56);
list.add(true);
list.add(new Date());
System.out.println(list);
list.add(2,"你好");//下表为二的位置添加元素,并把后面的进行位移
System.out.println(list);//打印一个对象同时默认调用toString();
List list2 = new ArrayList();
list2.add("123");
list2.add("321");
list.addAll(list2);//添加多个元素吧list2中的元素添加到list中
System.out.println(list);

1.4.2 删除的操作

//删除操作

list.remove(2);//依据下标删除该元素

list.clear();//清楚集合中的所有元素

1.4.3修改的操作

//修改操作

list.set(1,"陈冠希");//修改下标为1的内容为陈冠希;

1.4.4查询操作

List list = new ArrayList();

        list.add("java01");

        list.add("java02");

        list.add("java03");

        list.add("java02");

//查询方法

Object o = list.get(1);//根据下标获取元素

int size = list.size();//获取集合中元素的个数

boolean f = list.contains("java05");//判断元素是否在集合中

int index = list.indexOf("java02");//查询元素在集合中第一次出现的位置

//遍历集合中的元素for循环

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

        Object ol = list.get(i);

        System.out.println(ol);

}

1.4.5ArrayList底层源代码

java

从构造方法来入手。new ArrayList(22) 底层声明了一个Object类型的数组 名字elementData

Object[] elementData

  public ArrayList(int initialCapacity) {

        if (initialCapacity > 0) { //大于0

            this.elementData = new Object[initialCapacity];

        } else if (initialCapacity == 0) { //等于初始化为一个空数组

            this.elementData = EMPTY_ELEMENTDATA;

        } else { //抛出一个异常

            throw new IllegalArgumentException("Illegal Capacity: "+

                                               initialCapacity);

        }

    }

==========add("java01")======E理解为Object类型================ 

   public boolean add(E e) {

        ensureCapacityInternal(size + 1);  // 扩容

        elementData[size++] = e;  //把元素赋值给数组的相应位置

        return true;

    }

==========indexOf("java02") 判断元素在集合中第一次的位置=============

     public int indexOf(Object o) {

        if (o == null) {

            for (int i = 0; i < size; i++)

                if (elementData[i]==null)

                    return i;

        } else {

            for (int i = 0; i < size; i++)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值