33333mm 发表于 2025-2-5 14:10:50

java中的集合ArrayList

创建集合对象有3种形式

1,不需要传递构造参数,直接new就可以,此时底层数组为空数组。
2,构造参数需要传递一个int类型的值, 用于设置底层数组的长度
3,构造参数需要传递一个Collection集合类型的值,用于将集合中的数据放置在当前的集合中。
第1种方式创建数组

package goodStudy;import java.util.ArrayList;public class goodStudy{        public static void main(String[] args) {       ArrayList arrList = new ArrayList();       // 输出的是一个空数组       System.out.print(arrList);        }}往集合中添加数据 add

package goodStudy;// ArrayList在java-->util包中import java.util.ArrayList;public class goodStudy{        public static void main(String[] args) {       ArrayList arrList = new ArrayList();       arrList.add("添加一个数据");       // 输出的是一个空数组       System.out.print(arrList);        }}往集合中添加数据 add('添加到哪一个位置', '添加的值')

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("嘻嘻02");arrList.add("哈哈03");arrList.add(0, "第1项");// 输出的是: arrList:[第1项, 嘿嘿01, 嘻嘻02, 哈哈03]System.out.println("arrList:" + arrList);添加另外一个集合addAll

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");       ArrayList otherArr = new ArrayList();otherArr.add("otner_01");otherArr.addAll(arrList);// 输出的是:otherArr:System.out.println("otherArr:" + otherArr);集合默认时长度10

在添加数据时,如果集合中没有任何数据,那么底层会创建长度为10的数组
集合添加的个数大于集合的长度,会报错嘛?

package goodStudy;//ArrayList在java--> util包中import java.util.ArrayList;public class goodStudy{        public static void main(String[] args) {       ArrayList arrList = new ArrayList(3);       arrList.add("嘿嘿01");       arrList.add("嘻嘻02");       arrList.add("哈哈03");       arrList.add("呲呲04");   // 会报错嘛?       System.out.println(arrList);        }}不会报错的。为啥?
因为:在底层创建了一个更大的数组
获取集合的长度 size

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("嘻嘻02");arrList.add("哈哈03");arrList.add("呲呲04");System.out.println(arrList.size()); // 输出 4获取集合中指定位置的数据 get

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("嘻嘻02");arrList.add("哈哈03");arrList.add("呲呲04");System.out.print(arrList.get(2));// 输出的时: 哈哈03遍历集合中的数据 for循环

public class goodStudy{        public static void main(String[] args) {       ArrayList arrList = new ArrayList();       arrList.add("嘿嘿01");       arrList.add("嘻嘻02");       arrList.add("哈哈03");       arrList.add("呲呲04");       for(int i =0;i<arrList.size();i++){                System.out.print("当前的值时"+ arrList.get(i));       }        }}遍历集合中的数据 for循环 [不考虑集合的顺序] 特殊的for循环

当我们遍历集合时,如果不考虑集合的顺序,可以使用下面的 for Object循环ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("嘻嘻02");arrList.add("哈哈03");arrList.add("呲呲04");for(Object obj:arrList ){System.out.println("当前的值时"+ obj);}更新数据 set

ArrayList.set('跟新数据的位置', '更新的值')set的返回值表示的是:当前这一项更新前的数据ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("嘻嘻02");arrList.add("哈哈03");arrList.add("呲呲04");// set的返回值表示的是:当前这一项更新前的数据Object oldValue = arrList.set(0, "第1项");//输出的是 嘿嘿01System.out.println(oldValue);System.out.println(arrList);删除数据 remove

ArrayList.remove(需要删除的数据的位置)remove的返回值表示的是:被删除的数据ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("嘻嘻02");arrList.add("哈哈03");arrList.add("呲呲04");Object oldValue = arrList.remove(0);// 删除前这一项的值:嘿嘿01System.out.println("删除前这一项的值:" + oldValue);// arrList:[嘻嘻02, 哈哈03, 呲呲04]System.out.println("arrList:" + arrList);ArrayList.remove根据传参不同,返回的类型不同

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");// 传参的是数字,返回的是被删除的数据Object oldValue = arrList.remove(0);public class Java01 {    public static void main(String[] args) {      ArrayList list = new ArrayList();      list.add("A");      // 传参字符串,返回来的是布尔      Boolean flag = list.remove("A");      System.out.println(flag);    }}清空集合和判断集合是否是空

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");// 清空这个集合arrList.clear();// 判断集合是否是空System.out.println("集合是否是空:" + arrList.isEmpty());removeAll() 方法从一个集合中移除所有在另一个集合中存在的元素。

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("哈哈02");ArrayList list = new ArrayList();list.add("哈哈02");// 从arrList集合中删除list集合中存在的元素arrList.removeAll(list);// 输出 ["嘿嘿01"]System.out.println("arrList: "+ arrList);是否包含某个元素contains, 返回布尔类型的值

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");// 判断 arrList 这个数组是否包含 嘿嘿01 这个元素Boolean flag = arrList.contains("嘿嘿01");// 输出的是trueSystem.out.println("flag:" + flag);某个元素在集合中首次出现的位置 indexOf

indexOf: 元素在集合中首次出现位置(索引),如果元素不存在返回的值是 -1 ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("哈哈02");// 寻找 某个元素是在集合中的哪一个位置int index = arrList.indexOf("哈哈02");// 输出的是 1 System.out.println(index);int notIndex = arrList.indexOf("哈哈");// 输出的是 -1System.out.println(notIndex);某个元素在集合中最后一次出现的位置 lastIndexOf

它用于查找指定元素在列表中最后一次出现的位置(索引)与indexOf方法类似,如果找到了该元素,lastIndexOf 方法会返回其索引(从0开始),如果未找到,则返回-1。toArray 将集合转化为数组

ArrayList arrList = new ArrayList();arrList.add("嘿嘿01");arrList.add("哈哈02");Object[] arr = arrList.toArray();System.out.println(arr);克隆一个集合[创建集合对象有3种形式]

public class goodStudy{        public static void main(String[] args) {       ArrayList arrList = new ArrayList();       arrList.add("嘿嘿01");       arrList.add("哈哈02");              // 克隆一项       ArrayList otherList = new ArrayList(arrList);       System.out.println(otherList);              otherList.set(0, "第一哈哈哈");       // 输出的是: otherList[第一哈哈哈, 哈哈02]       System.out.println("otherList" +otherList);    // 输出的是: arrList[嘿嘿01, 哈哈02]       System.out.println("arrList"+ arrList);        }}集合ArrayList的排序

package part;import java.util.ArrayList;import java.util.Comparator;public class Java01 {    public static void main(String[] args) {      System.out.println("Hello World");      ArrayList list = new ArrayList();      list.add(1);      list.add(3);      list.add(2);      list.add(5);      list.sort(new NumberComparator());      // 输出的值是:       System.out.println(list);    }}class NumberComparator implements Comparator<Integer> {    @Override    public int compare(Integer o1, Integer o2) {      // ctrl + o      // o1 - o2 ==>表示升序,我们可以理解为:a-b 升;      // o2 - 01==> 降序 我们可以理解为:b-a降序      returno2- o1;    }}特别注意:return 0 表示不会改变顺序。

ArrayList 和 LinkedList 的底层

ArrayList的底层是: 数组LinkedList的底层是:链表ArrayList 和LinkedList 新增数据谁更快一些

增加第1条数据, LinkedList会比ArrayList快.增加第2,3条数据, ArrayList会比LinkedList快.增加第4条数据(超过ArrayList容量), LinkedList会比ArrayList快.在插入数据的时候,LinkedList会比ArrayList快.总结:1,如果集合ArrayList的容量没有达到阈值时候,新增数据的时候是 ArrayList 快。2,如果集合ArrayList的容量达到阀值,或者指定位置插入数据的时候,LinkedList快一些3,如果查询数据时,根据索引来查询, ArrayList 要快一些。如果没有索引,2个不会有本质的区别。
页: [1]
查看完整版本: java中的集合ArrayList