day16 集合01(ArrayList,LinkedList -> java基础大神进阶学习总结之19天(知识点全面覆盖,细节)

java基础总结


day16 集合01(ArrayList,LinkedList)

1.使用数组模拟ArrayList底层

​ 假设我现在是某个篮球队的教练,需要安排5个球员上场打球。此时需要模拟上场球员的存储,简单一点,我们就只存储上场球员的球衣号码。那么此时我需要以下几个操作:

1.初始一个容量为5的容器,用来存储场上的5个球衣号码。

2.安排5个球员上场,比如球员号码分别为11、22、33、44、55。

3.查询指定索引位置球员的球衣号码是多少,如查询索引位置为2的球衣号码是33。

4.替换场上索引位置为2的球员,使用333号替换33号。

5.罚下场上索引位置为2的球员(直接罚下,没有补位)。

6.打印出场上球员的球衣号码,打印风格如 [11,22,33,44,55]。

//列表
public class MyList {
    //用于存放数据的列表
    private Object[] playerNum;
    //用来表示存储的个数
     private  int size;
    //增加元素
     public void add(Object playEle){
         //扩容
         if(size >= playerNum.length){
             playerNum = Arrays.copyOf(playerNum,playerNum.length * 2);
         }
        playerNum[size++] = playEle;
    }
    //根据索引删除元素
    public  void  deleteByIndex(int index){
          if(index < 0 || index >= size){
              throw  new 集合.第一题.logicExpection("索引越界");
          }
          for(int i = index ; i < size - 1 ; i++){
              playerNum[i] = playerNum[i+1];
          }
          size --;
    }
    //根据索引修改元素值
    public  void  updateByEle(int index ,Object object){
        if(index < 0 || index >= size){
            throw  new 集合.第一题.logicExpection("索引越界");
        }
        playerNum[index] = object;
    }
    //根据索引查询元素值
    public  Object  getByIndex(int index){
        if(index < 0 || index >= size){
            throw  new 集合.第一题.logicExpection("索引越界");
        }
        return playerNum[index];
    }
    //打印列表
    @Override
    public String toString() {
        if(size == 0){
            return "[]";
        }
        StringBuilder sb = new StringBuilder("[");
        for(int i = 0; i < size ; i++){
              sb.append(playerNum[i]).append(",");
        }
        sb.deleteCharAt(sb.length()-1);
        sb.append("]");
        return sb.toString();
    }
    public MyList() {
        this(5);
    }
    public MyList(int capacity) {
         if(capacity < 0){
             throw  new logicExpection("列表长度不能小于0");
         }
        playerNum = new  Object[capacity];
    }
}

2.集合的理解和框架

​ 集合是Java中提供的一种容器,可以用来存储多个数据,根据不同存储方式形成的体系结构,就叫做集合框架体系(掌握)。

集合框架体系

在这里插入图片描述

关于ArrayList

  • boolean add(Object e):将元素添加到列表的末尾

    扫描二维码关注公众号,回复: 11554036 查看本文章
  • void add(int index, Object element):在列表的指定位置插入指定的元素

  • boolean addAll(Collection c):把c列表中的所有元素添加到当前列表中

删除操作

  • Object remove(int index):从列表中删除指定索引位置的元素,并返回被删除的元素

  • boolean removeAll(Collection c):从此列表中移除c列表中的所有元素

修改操作

  • Object set(int index, Object ele):修改列表中指定索引位置的元素,返回被替换的旧元素

查询操作

  • int size():返回当前列表中元素个数

  • boolean isEmpty():判断当前列表中元素个数是否为0

  • Object get(int index):查询列表中指定索引位置对应的元素

  • Object[] toArray():把列表对象转换为Object数组

  • boolean contains(Object o):判断列表是否存在指定对象

关于LinkList

  • void addFirst(Object e) 将指定元素插入此列表的开头。

  • void addLast(Object e) 将指定元素添加到此列表的结尾。

  • Object getFirst() 返回此列表的第一个元素。

  • Object getLast() 返回此列表的最后一个元素。

  • Object removeFirst() 移除并返回此列表的第一个元素。

  • Object removeLast() 移除并返回此列表的最后一个元素。

3.关于其他数据结构以及性能的比较(详细)

具体看java基础之细节龙细节篇md笔记的数据结构

4.泛型

其实就是一种类型参数,主要用于某个类或接口中数据类型不确定时,可以使用一个标识符来表示未知的数据类型,然后在使用该类或方法时指定该未知类型的真实类型。

在类中使用泛型

//在类上声明使用符号T,表示未知的类型
public class Point<T> {
	private T x;
	private T y;
     //省略getter/setter
}

在集合框架中使用泛型

class ArrayList<E>{ 
	public boolean add(E e){ }
	public E get(int index){  }
}
//只能存储String类型的集合
List<String> list1 = new ArrayList<String>();
list1.add("A");
list1.add("B");
//只能存储Integer类型的集合
List<Integer> list2 = new ArrayList<Integer>();
list2.add(11);
list2.add(22);

5.注意事项(细节)

  • ArrayList的底层是Object【】数组,所以ArrayList里的元素为基本数据类型时,会自动装包为包装类
  • 当使用泛型时,我们知道list集合里的类型为objct,所以泛型里不能传入基本数据类型

猜你喜欢

转载自blog.csdn.net/weixin_41340417/article/details/107889891