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:[otner_01, 嘿嘿01]
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项");
//输出的是 嘿嘿01
System.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);
// 删除前这一项的值:嘿嘿01
System.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");
// 输出的是true
System.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("哈哈");
// 输出的是 -1
System.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());
// 输出的值是: [5, 3, 2, 1]
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降序
return o2- 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个不会有本质的区别。
作者:流年少年
出处:https://www.cnblogs.com/ishoulgodo/
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
出处:https://www.cnblogs.com/ishoulgodo/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

支付宝

微信
如果文中有什么错误,欢迎指出。以免更多的人被误导。