赞
踩
目录
当你看到这篇文章我觉得很好笑,因为我开始也不懂ArrayList现在轮到你了,嘻嘻嘻,但是没关系我教你,action!!!
通俗点讲ArrayList就是数组
文字解答:ArrayList属于List,List是线性表,线性表有顺序表、链表、栈、队列...,而ArrayList底层代码就是顺序表(数组)
代码解答(重点):
- public class MyArrayList {
-
- public int[] elem;//数组
- public int usedSize;
- // 默认的容量
- public static final int DEFAULT_CAPACITY = 5;
- public MyArrayList() {
- elem = new int[DEFAULT_CAPACITY];//数组初始化
- }
你可能感觉很奇怪,ArrayList底层既然是数组,那为什么不直接写成数组的形式呢,比如这样
int [] ArrayList={1,2,3};
亦或者是这样:
int [] ArrayList=new int []{1,2,3};
我只能说你对数组的定义没忘,hahaha
第一种方法:
- // ArrayList创建,推荐写法
- // 构造一个空的列表
- List<Integer> list1 = new ArrayList<>();
第二种方法:
- // list2构造好之后,与list1中的元素拼接,list1元素插入到了list2后面
- ArrayList<Integer> list2 = new ArrayList<>(list1);
特别注意:ArrayList(Collection<? extends E> c) 的意思是new ArrayList<>(list1);小括号内对象的类型必须是继承了Collection,上述list1的类型是List满足这一条件;其次list1的<>必须是现在<>的类型的子类或者相同关系 ,c是定义的变量。
第三种方法:
- // 构造一个具有10个容量的列表
- List<Integer> list3 = new ArrayList<>(10);
- list3.add(1);
- list3.add(2);
- list3.add(3);
- // list3.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素
代码解释:
- public static void main(String[] args) {
- List<String> list = new ArrayList<>();
- list.add("JavaSE");
- list.add("JavaWeb");
- list.add("JavaEE");
- list.add("JVM");
- list.add("测试课程");
- System.out.println(list);
- // 获取list中有效元素个数
- System.out.println(list.size());
- // 获取和设置index位置上的元素,注意index必须介于[0, size)间
- System.out.println(list.get(1));
- list.set(1, "JavaWEB");
- System.out.println(list.get(1));
- // 在list的index位置插入指定元素,index及后续的元素统一往后搬移一个位置
- list.add(1, "Java数据结构");
- System.out.println(list);
- // 删除指定元素,找到了就删除,该元素之后的元素统一往前搬移一个位置
- list.remove("JVM");
- System.out.println(list);
- // 删除list中index位置上的元素,注意index不要超过list中有效元素数,否则会抛出下标越界异常
- list.remove(list.size()-1);
- System.out.println(list);
-
- if(list.contains("测试课程")){
- list.add("测试课程");
- }
- // 查找指定元素第一次出现的位置:indexOf从前往后找,lastIndexOf从后往前找
- list.add("JavaSE");
- System.out.println(list.indexOf("JavaSE"));
- System.out.println(list.lastIndexOf("JavaSE"));
- // 使用list中[0, 4)之间的元素构成一个新的SubList返回,但是和ArrayList共用一个elementData
- //数组
-
- List<String> ret = list.subList(0, 4);
- System.out.println(ret);
- list.clear();
- System.out.println(list.size());
- }
- public static void main(String[] args) {
- List<Integer> list = new ArrayList<>();
- list.add(1);
- list.add(2);
- list.add(3);
- list.add(4);
- list.add(5);
- // 使用下标+for遍历
- for (int i = 0; i < list.size(); i++) {
- System.out.print(list.get(i) + " ");
- }
- System.out.println();
- // 借助foreach遍历
- for (Integer integer : list) {
- System.out.print(integer + " ");
- }
- System.out.println();
- //使用迭代器
- Iterator<Integer> it = list.listIterator();
- while(it.hasNext()){
- System.out.print(it.next() + " ");
- }
- System.out.println();
- }
- public static List<List<Integer>> generate(int numRows) {
- //建立一个二维数组存储杨辉三角
- List<List<Integer>> mylist = new ArrayList<>();//建立第一维数组
- for (int i = 0; i < numRows; i++) {
- mylist.add(new ArrayList<>());//建立第二维数组
- }
- for (int i = 0; i < numRows; i++) {
- for (int j = 0; j <= i; j++) {
- //每行第一个和最后一个都是1
- if (j == 0 || j == i) mylist.get(i).add(1);
- //中间行插入值
- else {
- mylist.get(i).add(mylist.get(i - 1).get(j) + mylist.get(i - 1).get(j - 1));
- }
- }
- System.out.println();
- }
- return mylist;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。