当前位置: 首页 > news >正文

Java集合-ArrayList

集合就是一个保存数据的容器。在计算机中引入集合,是为了便于处理一组类似的数据。Java标准库自带的java.util包提供了集合相关的接口和实现类:Collection接口,它是除了Map接口外所有其他集合类的根接口。

Java的Java.uitl包主要提供以下三种类型的集合:

  • List:一种有序表的集合;
  • Set:一种保证没有重复元素的集合
  • Map:一种通过键值对查找的映射表集合。

Java集合的设计有几个特点:首先实现了接口和实现类相分离,比如:有序表的接口是List,具体的实现类有ArrayList、LinkedLis、Vectort;其次支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素。 

一、List集合

List集合的特点:有序、允许重复。

List的行为和数组几乎完全相同:List 内部按照放入元素的先后顺存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。

List的实现类:ArrayList、LinkedList、Vector。

1.ArrayList的内部数据结构是Object[]数组

特点:

        1.初始化为一个空数组{ }

内部源码为:

 public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}
        2.第一次添加元素时,该数组扩容为10
        3.数组容量不足时,该数组的容量扩容为原容量的1.5倍。扩容方法:grow()
int newCapacity = oldCapacity + (oldCapacity >> 1);
2.主要方法。

方法1:add(E e)  作用:添加新元素至集合的尾部

方法2:add(int index,E e) 作用:添加新元素至集合的指定位置

方法3:addAll(Collection c)  作用:添加另一个集合中所有的元素至当前集合的尾部

方法4:addAll(int index,Collection c)  作用:添加另一个集合中所有的元素至当前集合指定位置

public static void main(String[] args) {//创建集合对象ArrayList<String> list = new ArrayList<String>();//操作1:添加新元素//add(E e)方法:添加新元素至集合的尾部list.add("小乔");list.add("曹操");list.add("刘备");list.add("后裔");System.out.println(list);//add(int index,E e)方法:添加新元素至集合的指定位置list.add(0, "李白");System.out.println(list);//addAll(Collection c)方法//addAll(int index,Collection c)方法//添加另一个集合中所有的元素至当前集合ArrayList<String> subList = new ArrayList<String>();subList.add("孙悟空");subList.add("猪八戒");subList.add("白骨精");//将subList中的所有元素添加至list集合的尾部
//		list.addAll(subList);list.addAll(1,subList);System.out.println(list);}

 输出:

[小乔, 曹操, 刘备, 后裔]
[李白, 小乔, 曹操, 刘备, 后裔]
[李白, 孙悟空, 猪八戒, 白骨精, 小乔, 曹操, 刘备, 后裔]

方法5:get(int index)   作用:获取元素(按照下标位置,获取元素)

方法6:remove(int index)  作用:按照下标删除元素

             remove(Object value)  作用:按照值删除

方法7:indexOf(Object o)  作用:查找元素

方法8:set(int index,E e)  作用:按照下标,修改对应元素。

//创建临时的List集合
List<String> boyList = Arrays.asList("YK","QTZ","CBY","ZRZ","YWQ");
//全部添加至ArrayList集合中
ArrayList<String> list = new ArrayList<String>();
list.addAll(boyList);
System.out.println(list);//操作2:获取元素(按照下标位置,获取元素)
//get(int index)String first = list.get(0);
String last = list.get(list.size()-1);
System.out.println("首元素:"+first);
System.out.println("为元素:"+last);//操作3:删除元素(按照下标或值,进行删除)
//remove(int index)按照下标删除
//remove(Object value) 按照值删除
System.out.println("删除前:"+list);//list.remove(1);  //按照下标删除
list.remove("YWQ"); //按照值删除System.out.println("删除后:"+list);//操作4:查找元素
//indexOf(Object o)
int index1 = list.indexOf("ZWY");
System.out.println("查找一个不存在的元素:"+index1);int index2 = list.indexOf("YK");
System.out.println("查找一个已存在的元素:"+index2);
//操作5:修改元素
//set(int index,E e);System.out.println("修改前:"+list);
list.set(1, "QQQ");
System.out.println("修改后:"+list);

输出:

[YK, QTZ, CBY, ZRZ, YWQ]
首元素:YK
为元素:YWQ
删除前:[YK, QTZ, CBY, ZRZ, YWQ]
删除后:[YK, QTZ, CBY, ZRZ]
查找一个不存在的元素:-1
查找一个已存在的元素:0
修改前:[YK, QTZ, CBY, ZRZ]
修改后:[YK, QQQ, CBY, ZRZ]

方法9:list.clear()   作用:清空集合内的所有元素

方法10:isContains(E e)   作用:查看元素是否存在

方法11:subList(int index,int index)  作用:截取子集合

方法12:toArray()  作用:将集合转换成数组

方法13:toArray(T[ ] a)  作用:将集合转换成数组

public static void main(String[] args) {List<String> boyList = Arrays.asList("YK","QTZ","CBY","ZRZ","YWQ");//全部添加至ArrayList集合中ArrayList<String> list = new ArrayList<String>();list.addAll(boyList);System.out.println(list);//查看元素是否存在boolean isContains = list.contains("yangQi");System.out.println(isContains);//截取子集合List<String> subs = list.subList(0, 3);System.out.println(subs);//转换成数组Object[] array1 = list.toArray();//Object数组String[] array2 = list.toArray(new String[list.size()]); //String数组System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));
//		//清空list.clear();System.out.println(list);}

输出:

[YK, QTZ, CBY, ZRZ, YWQ]
false
[YK, QTZ, CBY]
[YK, QTZ, CBY, ZRZ, YWQ]
[YK, QTZ, CBY, ZRZ, YWQ]
[]
3.数组的遍历
遍历方法1:冒泡排序
public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.addAll(Arrays.asList("E","D","K","M","N","A"));//方式1:冒泡排序for(int i = 0;i<list.size()-1;i++) {for(int k = 0;k<list.size()-1-i;k++) {if(list.get(k).compareTo(list.get(k+1))>0) {String temp = list.get(k);list.set(k, list.get(k+1));list.set(k+1, temp);}}}}

输出:

[A, D, E, K, M, N]
遍历方法2:使用sort()方法
public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.addAll(Arrays.asList("E","D","K","M","N","A"));//方式2:使用sort()方法list = new ArrayList<String>();list.addAll(Arrays.asList("E","D","K","M","N","A"));list.sort(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}});System.out.println(list);}

输出:

[A, D, E, K, M, N]
4.通过创建ArrayList集合
        1.通过[无参构造方法]创建ArrayList集合
		//通过[无参构造方法]创建ArrayList集合//数组默认被初始化成一个空数组ArrayList<Integer> list1 = new ArrayList<Integer>();list1.add(5178);//添加第1个元素时,将数组扩容为10list1.add(1852);//添加第2个元素list1.add(1555);//添加。。。个元素list1.add(9527);//添加第10个元素//添加第11个元素时,容量不足,再次将数组扩容,按照原容量的1.5倍list1.add(1024);
        2.通过[有参构造方法]创建Arraylist集合
		ArrayList<Integer> list2 = new ArrayList<Integer>(200);//创建集合时,传入另外一-个Collection集合, 并H.按照该集合的元素进行初始化ArrayList<Integer> list3 = new ArrayList<Integer>(Arrays.asList(1,2,3));

下一篇:LinkedList

http://www.lryc.cn/news/290084.html

相关文章:

  • 数据结构·单链表经典例题
  • Linux常用指令的整合
  • 阿里云centos安装mysql,并修改初始密码
  • 【JavaScript基础入门】04 JavaScript基础语法(二)
  • 标准库中的string类(下)——“C++”
  • 如何使用Docker部署火狐浏览器并实现无公网ip远程访问
  • 瑞_数据结构与算法_AVL树
  • BGP同步规则
  • Linux命令-apt-key命令(管理Debian Linux系统中的软件包密钥)
  • Python根据Excel表进行文件重命名
  • 【UVM源码】UVM Config_db机制使用总结与源码解析
  • 群辉开启WebDav服务+cpolar内网穿透实现移动端ES文件浏览器远程访问本地NAS文件
  • 通过mybatis拦截器给sql执行加一个耗时监控
  • 构建知识图谱:从技术到实战的完整指南
  • STM32的分类和选型
  • python使用read_sql与to_sql读写数据库
  • 【ArcGIS微课1000例】0096:dem三维块状表达(层次地形模型)
  • OJ_糖果分享游戏
  • sqli-lbs靶场搭建
  • SharedPreferences卡顿分析
  • 64、ubuntu使用c++/python调用alliedvisio工业相机
  • 网络端口与 IP 地址有什么区别?
  • C语言标准的输入输出
  • C++ 类与对象(上)
  • 如何配置MacLinuxWindows环境变量
  • 【Linux】从C语言文件操作 到Linux文件IO | 文件系统调用
  • mask transformer相关论文阅读
  • springboot+vue3支付宝接口案例-第二节-准备后端数据接口
  • 贪吃蛇游戏设计文档(基于C语言)
  • 在Windows上安装与配置Apache服务并结合内网穿透工具实现公网远程访问本地内网服务