温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java容器类List ArrayList Vector有什么作用

发布时间:2021-12-21 10:16:01 来源:亿速云 阅读:147 作者:iii 栏目:编程语言

本篇内容主要讲解“Java容器类List ArrayList Vector有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java容器类List ArrayList Vector有什么作用”吧!

List是接口,声明了各个方法,不多说。且看ArrayList类。

ArrayList类的成员变量有Object[] elementData,int size;其中elementData数组用来存储加入到ArrayList的对象,size为列表中实际的对象数目。ArrayList类不是线程安全的。

Vector与ArrayList的实现基本相同,只是Vector类是线程安全的,其方法都带有synchronized关键字,如果不考虑线程同步的话,ArrayList性能要好一些。当前它们内部实现原理都是用到对象数组来实现,如果元素数目确定,直接用数组效率***。

简单的用法:(后面是数据打印结果)

public class ListDemo {       /**       * @param args       */     public static void main(String[] args) {          List<String> list = new ArrayList<String>();          String[] strArr = new String[3];          boolean ret = list.add("haha");          list.add(new String("aa"));          list.add(null);           System.out.println(list.size());//3          System.out.println(ret);//true          System.out.println(list);//[haha, aa, null]          System.out.println(strArr);//[Ljava.lang.String;@1fee6fc          System.out.println(strArr.getClass().getName());//[Ljava.lang.String;          System.out.println(list.indexOf("aa"));//1          System.out.println(list.indexOf(null));//2          String str = list.set(1, "ee");          System.out.println(str);//aa          System.out.println(list);//[haha, ee, null]          String remove = list.remove(0);          System.out.println(remove);//haha          System.out.println(list);//[ee, null]          boolean result = list.remove("ff");          System.out.println(result);//false          result = list.remove("ee");          System.out.println(result);//true          System.out.println(list);//[null]      }   }
public ArrayList() {      this(10);      }   public ArrayList(int initialCapacity) {      super();              if (initialCapacity < 0)                   throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);      this.elementData = new Object[initialCapacity];      }     public boolean add(E e) {      ensureCapacity(size + 1);  // Increments modCount!!      elementData[size++] = e;      return true;      }     /*移除指定位置元素,注意每次移除数据都会将数组中后面数据移动来填充数组*/  public E remove(int index) {      RangeCheck(index);       modCount++;      E oldValue = (E) elementData[index];       int numMoved = size - index - 1;      if (numMoved > 0)          System.arraycopy(elementData, index+1, elementData, index,                   numMoved);      elementData[--size] = null; // index后面数据依次往前移动,将***一个位置赋值为0,让gc来回收空间。      return oldValue;      }   public void ensureCapacity(int minCapacity) {      modCount++;//这个变量不用管。      int oldCapacity = elementData.length; //初始时设定的数组长度      if (minCapacity > oldCapacity) {    //如果数组对象数目>初始数组长度,则需要扩容。          Object oldData[] = elementData;          int newCapacity = (oldCapacity * 3)/2 + 1; //新的容量大小              if (newCapacity < minCapacity)          newCapacity = minCapacity;       /*该方法会创建一个新的对象数组,然后调用  System.arraycopy(original, 0, copy, 0,                  Math.min(original.length, newLength));方法将源数组数据拷贝到新数组中。引用更新,指    向新的对象数组。*/                    elementData = Arrays.copyOf(elementData, newCapacity);       }      }   /*将对象数组削减到当前元素数目大小,减少存储空间*/     public void trimToSize() {       modCount++;      int oldCapacity = elementData.length;      if (size < oldCapacity) {              elementData = Arrays.copyOf(elementData, size);      }      }   /*查找对象***出现的位置,若没有找到,返回-1。由  代码可知,可以在list中加入null对象,并查找到。*/  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++)          if (o.equals(elementData[i]))              return i;      }      return -1;      }   /*替换指定位置的元素值,返回该位置中old值*/ public E set(int index, E element) {      RangeCheck(index); //检查范围      E oldValue = (E) elementData[index];      elementData[index] = element;      return oldValue;      }   /*返回指定位置的值*/ public E get(int index) {      RangeCheck(index);       return (E) elementData[index];      }    private void RangeCheck(int index) {      if (index >= size)          throw new IndexOutOfBoundsException(          "Index: "+index+", Size: "+size);      }    public int size() {      return size;      }       public boolean isEmpty() {      return size == 0;      }

到此,相信大家对“Java容器类List ArrayList Vector有什么作用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI