Java学习第十六天

Java学习第十六天知识点(List)

List(I):
1)特点:

a.List是有顺序的接口,所以是有序列表,并且可以使用index定位
b.List允许有重复值
c.List中允许有null

2)常用API(只要带有index,都是List新增的方法):

void add(int index, E element)
boolean addAll(int index, Collection<? extends E> c)
E get(int index) 
int lastIndexOf(Object o) 
E remove(int index) 
E set(int index, E element) 
List<E> subList(int fromIndex, int toIndex) - 截取子集合

3)常见实现类:

(1)ArrayList(C):
  a.底层数据结构:顺序结构
  b.底层实现:数组
  c.特点:
  	①.按照顺序排列,每个元素都带有标号
	②.除了有标号是连续的,内存中的物理空间也是连续的
  d.优缺点:
  	优点: 查询速度快(因为有连续的下标,可以根据下标进行查询)
	缺点: 
	  a.插入/删除速度慢(插入/删除都是要移动元素的,所以元素一多就会执行效率慢)
	  b.内存的物理空间是连续的,利用不到碎片空间

(2)Vector(C)
  a.底层数据结构:顺序结构
  b.底层实现:数组
  c.特点:
  	①.全部和ArrayList一样
  	②.Vector上带有线程同步锁(synchronized),所以是线程安全的,效率低
  d.优缺点:
  	全部和ArrayList一样

(3)LinkedList(C)
  a.底层数据结构:链式结构
  b.底层实现:Node节点(data[数据] + next[下一个节点的引用])
  c.特点:
  	①.LinkedList是双向链表
  	①.链表是内存中固定顺序,但是他的物理空间不连续
  	②.没有下标
  	③.所有节点的访问,都必须通过头节点(next)/尾节点(pre)
  	④.head(头节点): 只存next,不存data
  	  last(尾节点): 只存pre,不存data
  	⑤.head.next = null -> 空链表
  	  last.pre = null -> 空链表

  d.优缺点:
  	优点: 
	  a.插入/删除效率高
	  b.不需要连续的内存物理空间,所以空间利用率高
	缺点:
	查询效率低,只能从头节点出发开始查询

  e.LinkedList独有的API:
  	(只要带有First/last的方法)
  	  void addFirst(E e)
      void addLast(E e)
      E getFirst()
      E getLast()
      E remove(int index) 
      E removeFirst()
      E removeLast()

(4)常见提问:
  a.ArrayList 和 LinkedList的区别
  	a.数据结构上的区别 一个用数组实现,一个用链表实现
  	b.ArrayList -> 增删慢,查询快
  	  LinkedList -> 增删快,查询慢

总结:

  	  在使用List集合时,会选择ArrayList,在综所有条件之后,ArrayList插入和查询的效率高于LinkedList.

  b.ArrayList 和 Vector的区别
  	a.线程安全
  	  ArrayList不带锁,线程不安全,效率高
  	  Vector带锁,线程安全,效率低
  	b.扩容问题
  	  ArrayList扩容为原容量的1.5倍
  	  Vector扩容为原容量的2package day02;

数组尝试实现ArrayList:

import java.util.Arrays;

public class MyArrayList {
    Object[] arr=new Object[0];
    int size=0;

    public void add(Object obj)
    {
        if (size==arr.length){
            arr= Arrays.copyOf(arr,arr.length+1);
        }
        arr[size]=obj;
        size++;
    }
    public void addIndex(int index,Object obj)
    {
        if (size==arr.length){
            arr= Arrays.copyOf(arr,arr.length+1);
        }
        for (int i = arr.length-1; i >index; i--) {
            arr[i]=arr[i-1];
        }
        arr[index]=obj;
        size++;
    }
    public Object deleteIndex(int index)
    {
        if (index>size){

        }
        Object temp=arr[index];
        for (int i = index; i <size-1; i++) {
            arr[i]=arr[i+1];
        }
        arr[size-1]=null;
        arr= Arrays.copyOf(arr,arr.length-1);
        size--;
        return temp;
    }
    public void deleteObject(Object obj)
    {
        int index=0;
        for (int i = 0; i < size; i++) {
            if (arr[i]==obj){
                index=i;break;
            }
        }
        for (int i = index; i <size-1; i++) {
            arr[i]=arr[i+1];
        }
        arr[size-1]=null;
        arr= Arrays.copyOf(arr,arr.length-1);
        size--;
    }
    public Object changeIndex(int index,Object obj)
    {
        Object temp=arr[index];
        arr[index]=obj;
        return temp;
    }
    public Object getIndex(int index)
    {
        return arr[index];
    }
    public Object getSize()
    {
        return size;
    }
    public Boolean haveObject(Object obj)
    {
        for (int i = 0; i < size; i++) {
            if (arr[i]==obj){
                return true;
            }
        }
        return false;
    }
    public Boolean isEmpty(){
        for (int i = 0; i <=size; i++) {
            if (size==0||arr[i]==null&&i==size){
                return true;
            }
            else if (arr[i]!=null){
                return false;
            }
        }
        return null;

    }
    public void print(){
        for (int i = 0; i < size; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    public String toString(){

        //转为
        StringBuilder sb=new StringBuilder("[");
        for (int i = 0; i < size; i++) {
            sb.append(arr[i]+",");
        }
        sb.deleteCharAt(sb.length()-1);
        sb.append("]");
        //sb.replace(sb.length()-1,sb.length()-1,"]");

        //用这个会有null
        //return Arrays.toString(arr);
        return sb.toString();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值