什么是arraylist?

预备知识:

集合的定义

当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。集合是一个不定长,包含多个元素的对象。(有意思的是数组也是对象,只不过没有对应的类,直接由jvm创建)

集合框架是一个代表、操作集合的统一架构。所有的集合框架都包含以下几点:

  • 接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。
  • 实现类:集合接口的具体实现,是重用性很高的数据结构。
  • 算法:用来根据需要对实体类中的对象进行计算,比如查找,排序。 



集合的常用方法:

数组的定义 

数组是有序的元素序列

数组的特点(与集合的不同,也可以说是集合的特点

  • 数组使用前必须声明元素类型,集合不用(默认为object)
  • 数组是定长的,集合不定长(自动扩容)
  • 数组能也只能可读可写,集合可以自定义权限
  • 数组想知道当前元素个数必须通过遍历,length只是最大容量;集合查看当前元素个数,有size,集合的容量叫capacity
  • 数组对应的类是Arrays,arrayutils;集合则是map,set,list
  • 数组可以存放引用类型或基本类型数据(只限一种类型);集合只能存放引用类型数据(可以不同类型)
  • 联系:使用相应的toArray()和Arrays.asList()方法可以互相转换。


数组的成员变量

length:最大容量


数组的常用方法

1. 声明一个数组

 String[] arr1 = new String[5];

 String[] arr2 = {"a","b","c", "d", "e"}; 

 String[] arr3= new String[]{"a","b","c","d","e"}; 

2、Arrays.fill()填充数组

void fill(int[] a, int val)全部填充 

void fill(int[] a, int fromIndex, int toIndex, int val)填充指定索引的元素

3、Arrays.sort()对数组排序
void sort(int[] a)全部排序 
void sort(int[] a, int fromIndex, int toIndex)排序指定索引的元素

4、Arrays.copyOf()复制数组

int[] copyOf(int[] original, int newLength)复制数组,指定新数组长度 
int[] copyOfRange(int[] original, int from, int to)复制数组,指定所复制的原数组的索引

5、检查数组中是否包含某一个值

boolean b = Arrays.asList(stringArray).contains("a");

先使用Arrays.asList()将Array转换成List<String>,这样就可以用动态链表的contains函数来判断元素是否包含在链表中。

6、连接两个数组

ArrayUtils.addAll(intArray, intArray2);

7、数组翻转

ArrayUtils.reverse(intArray);

8、从数组中移除一个元素

ArrayUtils.removeElement(intArray, 3);//创建了一个新数组

9.System.arraycopy

 System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。其函数原型是:
public static void (object src,int srcPos,object
 dest,int destPos,int length)
src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置; length:复制的长度。
注意:src and dest都必须是同类型或者可以进行转换类型的数组.




正文


arraylist的定义

arraylist是是动态数组,从数据结构上来讲,是数组实现的线性表(即顺序表)。


arraylist的特点

  • 容量不固定,想放多少放多少(当size大于capacity的时候,自动进行1.5倍扩容;添加的时候,容量加一)
  • 有序的(元素输出顺序与输入顺序一致)
  • 元素可以为 null
  • 元素不唯一(可重复)
  • 不同步,与之对应的是,vector是同步的
  • 可以通过索引直接操作元素,而set不行

arraylist的主要成员变量

capacity:数组容量(长度),默认是10                     

size:当前元素个数


方法(也就是list接口常用方法,没差别)

1.构造方法

//初始为空数组public ArrayList()

//根据指定容量,创建个对象数组public ArrayList(int initialCapacity)

//直接创建和指定集合一样内容的 ArrayList public ArrayList(Collection<? extends E> c)


2.添加元素


public boolean add(E e) {  

//对数组的容量进行调整  

ensureCapacityInternal(size + 1); //modCount增加!!  

elementData[size++] = e;  

return true;

}

//在指定位置添加一个元素

public void add(int index, E element)

//添加一个集合

public boolean addAll(Collection<? extends E> c)

//在指定位置,添加一个集合

public boolean addAll(int index, Collection<? extends E> c)


3.获取元素

//获取

public E get(int index)


4.修改元素

//修改

public E set(int index, E element)


5.删除元素

//根据位置删除

public E remove(int index)

//删除某个元素

public boolean remove(Object o)

//删除或者保留指定集合中的元素

private boolean batchRemove(Collection<?> c, boolean complement)

//清除全部public void clear()


6.list中是否包含某个元素

public boolean contains(Object o)


7.list中查看元素的索引

//遍历,第一次找到就返回

public int indexOf(Object o) 

//倒着遍历

public int lastIndexOf(Object o)


8.转换

toarray和toString


9.截取集合

subList(int fromIndex, int toIndex)


10.对数组容量进行调整

public void ensureCapacity(int minCapacity)



由于arraylist不是同步的,所以,想要线程安全的时候,需要直接在初始化时用 Collections.synchronizedList 方法进行包装:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值