集合ArrayList

集合ArrayList

回顾一下前面的课程学过哪些容器:StringBuilder,数组
StringBuilder当作容器只能是字符串类型,类型具有局限性
数组的长度是固定,一旦创建数组,容量就固定,也具有局限性
既要可以存任意类型,又有长度不受限制,我们可以使用集合
ArrayList
ArrayList特点:长度可变,类型不固定
ArrayList E是泛型 是一种特殊的数据类型,当集合存入元素是什么
类型,E就代表什么类型,但是一个集合只能存同一种数据类型
ArrayList底层是数组结构,有序的,查询快,增删慢

创建ArrayList集合格式
// 当你创建集合对象 就必须要确定存储元素的数据类型
ArrayList<Integer> 集合名字 = new ArrayList<Integer>
();
注意:集合不能存放基本数据类型
【高频面试】说一说ArrayList
  1. 底层使用什么存数据?

  2. 初始化容量多少?

  3. 容量不够,怎么扩容?

  4. 线程是否安全?安全 bye 不安全:说另外一个
    CopyOnWriteArrayList

  5. 说一说CopyOnWriteArrayList

    最基础到第3点

  6. 底层使用什么存数据:Object对象数组

private static final Object[] EMPTY_ELEMENTDATA= {}
  1. 初始化容量多少
private static final int DEFAULT_CAPACITY = 10;
  1. 扩容机制?1.5倍
int newCapacity = oldCapacity + (oldCapacity >> 1);
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity
>> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so
this is a win:
//使用Arrays.copyOf 进行数组元素的copy
elementData = Arrays.copyOf(elementData,
newCapacity);
}

ArrayList增删改查方法

get(int index):返回指定下标处的元素 查
size():返回集合中元素的个数,就是集合的长度
add(E element):向集合中添加元素 增
remove(int index):根据下标删除元素,这个下标是存在的才能删除 删
remove(Object obj):根据指定的元素删除,这个指定的元素集合中要存在 删
set(int index,E element):修改指定下标处的元素,用element替换掉 改

public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
// 向集合中添加元素 add 增
list.add(10);
    list.add(20);
list.add(30);
System.out.println(list);
// get(int index) 查
System.out.println(list.get(0));
// System.out.println(list.get(3));
// set(int index,Element e) 改
list.set(0,100);
System.out.println(list);
// remove(int index) remove(Objcet obj) 删
list.remove(0);
System.out.println(list);
list.remove((Object)20);
System.out.println(list);
}

ArrayList遍历

public static void main(String[] args) {
System.out.println("===========遍历集合中存入
的字符串===========");
ArrayList<String> list = new ArrayList<>();
list.add("java");
list.add("web");
list.add("c++");
list.add("c#");
list.add("spring");
System.out.println(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// lambda表达式的写法
list.forEach(System.out::println);
System.out.println("===========遍历集合中存入的对象===========");
ArrayList<Student> listStu = new ArrayList<>();
// 创建Student对象
Student s1 = new Student();
s1.setName("张三");
s1.setAge(18);
Student s2 = new Student("李四",20);
Student s3 = new Student("王五",22);
Student s4 = new Student("马六",23);
// 把Student对象存入集合
listStu.add(s1);
listStu.add(s2);
listStu.add(s3);
listStu.add(s4);
for (int i = 0; i < listStu.size(); i++) {
Student student = listStu.get(i);
System.out.println(student);
System.out.println(student.getName()+":"+student.getAge());
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值