一、集合是一个容器,前面讲的数值也是一个容器,

它们的区别是:

1、数组既可以存储基本数据类型,又可以存储引用数据类型,而集合只能存储引用数据类型,也就是对象。

2、基本数据类型存储的是值,引用数据类型存储的是地址值。

3、数组的长度是固定不变的,集合的长度可以根据元素的增加而增加。

二、向List集合中添加元素

package introduction9;

import java.util.ArrayList;

/***
* 单列集合有Collection
* Collection集合常用子接口有List 和 Set
* Collection是层次结构中的根接口
* List和Set是子接口,List以及他的实现类特点是可存重复的元素,Set以及他的实现类特点是不可有重复元素
* List接口的实现类最常用的有Arraylist,特点是可重复元素
* Set接口实现类最常用的有HashSet TreeSet 特点是不可有重复元素
*
* 双列集合有MAP,双列指的是键值对的形式存储
* MAP也是接口,java里面实现好的类有HashMap
*/
public class ArrayListDemo { public static void main(String[] args) {
/** ArrayList<String>表示在这个集合中存储的元素类型为String类型,
因为java是强类型的,所以使用前要声明使用类型,
新建的集合元素默认大小为10,
如果在ArrayList<String>()不输入内容,代表的是调用空参数,默认值为10
如果在括号中带上参数,ArrayList<String>(100)输入100表示集合的初始值大小为100,
指定大小的好处是可以节省资源,
List对象实际上是存储在一个引用型数组中,表面上看该数组能够自动增长改变大小,
实际上这个数组并没有办法改变大小,它只是改变了引用型数组的指向而已,
java自动增加ArrayList数组的意思是指向ArrayList里添加对象时,原对象的数目加一,
如果大于原底层数组的长度,就以适当的元素新建一个原数值的拷贝,并修改原数值(指向新建的数组),
原数组自动抛弃,java中有垃圾回收机制,会自动回收这些垃圾,当即使这样有时候还是会比较耗资源,
在用户向ArrayList里面追加对象时,java总是要计算容量是否适当,如果容量不足时就把原数组拷贝
新数组内,对原数组变量重新赋值指向新数组
*/
//创建一个ArrayList对象
ArrayList<String> cars = new ArrayList<String>();
//如何向集合中增加元素?
//添加元素到名为cars的ArrayList中
cars.add("BMW");
cars.add("Honda");
cars.add("Audi");
}
}

三、获取元素个数  size方法

package introduction9;

import java.util.ArrayList;

/***
* 单列集合有Collection
* Collection集合常用子接口有List 和 Set
* Collection是层次结构中的根接口
* List和Set是子接口,List以及他的实现类特点是可存重复的元素,Set以及他的实现类特点是不可有重复元素
* List接口的实现类最常用的有Arraylist,特点是可重复元素
* Set接口实现类最常用的有HashSet TreeSet 特点是不可有重复元素
*
* 双列集合有MAP,双列指的是键值对的形式存储
* MAP也是接口,java里面实现好的类有HashMap
*/
public class ArrayListDemo { public static void main(String[] args) {
/** ArrayList<String>表示在这个集合中存储的元素类型为String类型,
因为java是强类型的,所以使用前要声明使用类型,
新建的集合元素默认大小为10,
如果在ArrayList<String>()不输入内容,代表的是调用空参数,默认值为10
如果在括号中带上参数,ArrayList<String>(100)输入100表示集合的初始值大小为100,
指定大小的好处是可以节省资源,
List对象实际上是存储在一个引用型数组中,表面上看该数组能够自动增长改变大小,
实际上这个数组并没有办法改变大小,它只是改变了引用型数组的指向而已,
java自动增加ArrayList数组的意思是指向ArrayList里添加对象时,原对象的数目加一,
如果大于原底层数组的长度,就以适当的元素新建一个原数值的拷贝,并修改原数值(指向新建的数组),
原数组自动抛弃,java中有垃圾回收机制,会自动回收这些垃圾,当即使这样有时候还是会比较耗资源,
在用户向ArrayList里面追加对象时,java总是要计算容量是否适当,如果容量不足时就把原数组拷贝
新数组内,对原数组变量重新赋值指向新数组
*/
//创建一个ArrayList对象
ArrayList<String> cars = new ArrayList<String>();
//如何向集合中增加元素?
//添加元素到名为cars的ArrayList中
cars.add("BMW");
cars.add("Honda");
cars.add("Audi");
//大小 size获取集合中的元素集合的歌数
int size = cars.size();
System.out.println("这个list集合的大小为:"+size);
} }

运行结果:

四、通过索引访问集合中的元素(索引位从0开始)

package introduction9;

import java.util.ArrayList;

/***
* 单列集合有Collection
* Collection集合常用子接口有List 和 Set
* Collection是层次结构中的根接口
* List和Set是子接口,List以及他的实现类特点是可存重复的元素,Set以及他的实现类特点是不可有重复元素
* List接口的实现类最常用的有Arraylist,特点是可重复元素
* Set接口实现类最常用的有HashSet TreeSet 特点是不可有重复元素
*
* 双列集合有MAP,双列指的是键值对的形式存储
* MAP也是接口,java里面实现好的类有HashMap
*/
public class ArrayListDemo { public static void main(String[] args) {
/** ArrayList<String>表示在这个集合中存储的元素类型为String类型,
因为java是强类型的,所以使用前要声明使用类型,
新建的集合元素默认大小为10,
如果在ArrayList<String>()不输入内容,代表的是调用空参数,默认值为10
如果在括号中带上参数,ArrayList<String>(100)输入100表示集合的初始值大小为100,
指定大小的好处是可以节省资源,
List对象实际上是存储在一个引用型数组中,表面上看该数组能够自动增长改变大小,
实际上这个数组并没有办法改变大小,它只是改变了引用型数组的指向而已,
java自动增加ArrayList数组的意思是指向ArrayList里添加对象时,原对象的数目加一,
如果大于原底层数组的长度,就以适当的元素新建一个原数值的拷贝,并修改原数值(指向新建的数组),
原数组自动抛弃,java中有垃圾回收机制,会自动回收这些垃圾,当即使这样有时候还是会比较耗资源,
在用户向ArrayList里面追加对象时,java总是要计算容量是否适当,如果容量不足时就把原数组拷贝
新数组内,对原数组变量重新赋值指向新数组
*/
//创建一个ArrayList对象
ArrayList<String> cars = new ArrayList<String>();
//如何向集合中增加元素?
//添加元素到名为cars的ArrayList中
cars.add("BMW");
cars.add("Honda");
cars.add("Audi");
//大小 size获取集合中的元素集合的歌数
int size = cars.size();
System.out.println("这个list集合的大小为:"+size);
//通过索引访问集合中的元素
System.out.println("1索引位上的元素为:"+cars.get(1));
} }

运行结果为:

五、遍历集合元素

package introduction9;

import java.util.ArrayList;

/***
* 单列集合有Collection
* Collection集合常用子接口有List 和 Set
* Collection是层次结构中的根接口
* List和Set是子接口,List以及他的实现类特点是可存重复的元素,Set以及他的实现类特点是不可有重复元素
* List接口的实现类最常用的有Arraylist,特点是可重复元素
* Set接口实现类最常用的有HashSet TreeSet 特点是不可有重复元素
*
* 双列集合有MAP,双列指的是键值对的形式存储
* MAP也是接口,java里面实现好的类有HashMap
*/
public class ArrayListDemo { public static void main(String[] args) {
/** ArrayList<String>表示在这个集合中存储的元素类型为String类型,
因为java是强类型的,所以使用前要声明使用类型,
新建的集合元素默认大小为10,
如果在ArrayList<String>()不输入内容,代表的是调用空参数,默认值为10
如果在括号中带上参数,ArrayList<String>(100)输入100表示集合的初始值大小为100,
指定大小的好处是可以节省资源,
List对象实际上是存储在一个引用型数组中,表面上看该数组能够自动增长改变大小,
实际上这个数组并没有办法改变大小,它只是改变了引用型数组的指向而已,
java自动增加ArrayList数组的意思是指向ArrayList里添加对象时,原对象的数目加一,
如果大于原底层数组的长度,就以适当的元素新建一个原数值的拷贝,并修改原数值(指向新建的数组),
原数组自动抛弃,java中有垃圾回收机制,会自动回收这些垃圾,当即使这样有时候还是会比较耗资源,
在用户向ArrayList里面追加对象时,java总是要计算容量是否适当,如果容量不足时就把原数组拷贝
新数组内,对原数组变量重新赋值指向新数组
*/
//创建一个ArrayList对象
ArrayList<String> cars = new ArrayList<String>();
//如何向集合中增加元素?
//添加元素到名为cars的ArrayList中
cars.add("BMW");
cars.add("Honda");
cars.add("Audi");
//大小 size获取集合中的元素集合的歌数
int size = cars.size();
System.out.println("这个list集合的大小为:"+size);
//通过索引访问集合中的元素
System.out.println("1索引位上的元素为:"+cars.get(1));
//遍历集合元素
//方式一:
System.out.println("遍历集合");
for(int i = 0;i<size;i++) {
System.out.println("索引位"+i+"上的元素为:"+cars.get(i));
}
//方式二:使用高级for循环
System.out.println("\n高级for循环");
for(String car:cars) {
System.out.println("集合元素为:"+car);
}
} }

运行结果为:

六、移除元素

package introduction9;

import java.util.ArrayList;

/***
* 单列集合有Collection
* Collection集合常用子接口有List 和 Set
* Collection是层次结构中的根接口
* List和Set是子接口,List以及他的实现类特点是可存重复的元素,Set以及他的实现类特点是不可有重复元素
* List接口的实现类最常用的有Arraylist,特点是可重复元素
* Set接口实现类最常用的有HashSet TreeSet 特点是不可有重复元素
*
* 双列集合有MAP,双列指的是键值对的形式存储
* MAP也是接口,java里面实现好的类有HashMap
*/
public class ArrayListDemo { public static void main(String[] args) {
/** ArrayList<String>表示在这个集合中存储的元素类型为String类型,
因为java是强类型的,所以使用前要声明使用类型,
新建的集合元素默认大小为10,
如果在ArrayList<String>()不输入内容,代表的是调用空参数,默认值为10
如果在括号中带上参数,ArrayList<String>(100)输入100表示集合的初始值大小为100,
指定大小的好处是可以节省资源,
List对象实际上是存储在一个引用型数组中,表面上看该数组能够自动增长改变大小,
实际上这个数组并没有办法改变大小,它只是改变了引用型数组的指向而已,
java自动增加ArrayList数组的意思是指向ArrayList里添加对象时,原对象的数目加一,
如果大于原底层数组的长度,就以适当的元素新建一个原数值的拷贝,并修改原数值(指向新建的数组),
原数组自动抛弃,java中有垃圾回收机制,会自动回收这些垃圾,当即使这样有时候还是会比较耗资源,
在用户向ArrayList里面追加对象时,java总是要计算容量是否适当,如果容量不足时就把原数组拷贝
新数组内,对原数组变量重新赋值指向新数组
*/
//创建一个ArrayList对象
ArrayList<String> cars = new ArrayList<String>();
//如何向集合中增加元素?
//添加元素到名为cars的ArrayList中
cars.add("BMW");
cars.add("Honda");
cars.add("Audi"); //大小 size获取集合中的元素集合的歌数
int size = cars.size();
System.out.println("这个list集合的大小为:"+size); //通过索引访问集合中的元素
System.out.println("1索引位上的元素为:"+cars.get(1)); //遍历集合元素
//方式一:
System.out.println("遍历集合");
for(int i = 0;i<size;i++) {
System.out.println("索引位"+i+"上的元素为:"+cars.get(i));
}
//方式二:使用高级for循环
System.out.println("\n高级for循环");
for(String car:cars) {
System.out.println("集合元素为:"+car);
} //移除集合元素(移除最后一个元素)
cars.remove(size-1);
System.out.println("\n高级for循环移除元素之后");
for(String car:cars) {
System.out.println("集合元素为:"+car);
}
} }

运行结果为:

七、此演示中移除元素比较快,因为集合中只有三位,当如果如果集合中元素较多,例如有2000个,移除倒数一、二、三位上的元素效率与集合只有三位的的效率一样,删除后元素后这个元素的索引位就会空下来,而ArrayList增删时会带来元素的移动,如果在中间删除一个元素,后面所有位置上的元素都会向前面移动,增加数据会向后移动,因此当如果想要移除前面一、二、三个元素的话,这样会影响效率,所以增删元素时用linked List集合会比较快(下一节中会讲到),这也是ArrayList和Linked List的不同之处。

八、查询用ArrayList会比较快,因为ArrayList底层是数组实现的,使用下标查询,不需要比较,基于位置来读取相应的字节数。

章节七、1-ArrayList的更多相关文章

  1. 章节七、4-Sets

    一.set中不允许存在相同的元素 package ZangJie7; import java.util.ArrayList; import java.util.HashSet; import java ...

  2. 章节七、3-ArrayList和LinkedList对比

    一.创建集合并添加元素(从末尾位置添加) package ZangJie7; import java.util.ArrayList; import java.util.LinkedList; impo ...

  3. 章节七、2-Linked List

    package introduction9; import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...

  4. 章节七、6-Map集合的区别

    一.通过entrySet取出Map中的元素 package ZangJie7; import java.util.HashMap; import java.util.Map; public class ...

  5. 章节七、5-Maps

    一.向map集合中添加元素 map.put package ZangJie7; import java.util.HashMap; import java.util.Map; public class ...

  6. jdk源码阅读笔记-ArrayList

    一.ArrayList概述 首先我们来说一下ArrayList是什么?它解决了什么问题?ArrayList其实是一个数组,但是有区别于一般的数组,它是一个可以动态改变大小的动态数组.ArrayList ...

  7. 基于Java的ArrayList和LinkedList的实现与总结

    一.定义MyList接口,包含列表常见方法: import java.util.Iterator; /** * 线性表(列表)的接口定义 */ public interface MyList<T ...

  8. ArrayList<HashMap<String,Object>>集锦

    1.   Android中如何从一个Activity中ArrayList<HashMap<String,Object>>传递到另一个activity?      eg:     ...

  9. Java8集合框架——ArrayList源码分析

    java.util.ArrayList 以下为主要介绍要点,从 Java 8 出发: 一.ArrayList的特点概述 二.ArrayList的内部实现:从内部属性和构造函数说起 三.ArrayLis ...

随机推荐

  1. linux的tar命令

    Linux下的tar压缩解压缩命令详解 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中 ...

  2. Android内存优化之磁盘缓存

    前言: 在上一篇文章中介绍了内存缓存,内存缓存的优点就是很快,但是它又有缺点: 空间小,内存缓存不可能很大: 内存紧张时可能被清除: 在应用退出时就会消失,做不到离线: 基于以上的缺点有时候又需要另外 ...

  3. 自动化测试 | UI Automator 进阶指南

    UI Automator 相关介绍: 跨应用的用户界面自动化测试 包含在 AndroidX Test(https://developer.android.com/training/testing) 中 ...

  4. socket的阻塞与非阻塞,同步与异步

    同步/异步主要针对C端: 同步:      所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事. 例如普通B/S模式(同步 ...

  5. MFC控件编程之复选框单选框分组框

    MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...

  6. Java 并发编程-NIO 简明教程

    问题来源 在传统的架构中,对于客户端的每一次请求,服务器都会创建一个新的线程或者利用线程池复用去处理用户的一个请求,然后返回给用户结果,这样做在高并发的情况下会存在非常严重的性能问题:对于用户的每一次 ...

  7. mysql字符串查找(统计客源)

    如客源状态为1:2:3:5:6:9,其中6代表成交状态 如果要统计查询出有6这个状态的客源,可以用函数LOCATE(字符,搜索的字符串)来, 示例:统计每个分组下全部客源数total,成交客源数dea ...

  8. 第2章 细说Linux系统用户/组管理(1)

    2.1 用户和组的基本概念 用户和组是操作系统中一种身份认证资源. 每个用户都有用户名.用户的唯一编号uid(user id).所属组及其默认的shell,可能还有密码.家目录.附属组.注释信息等. ...

  9. Linux查询端口是否被占用的四种方法

    一个面试题,使用三种不同的方法查看8080被哪个进程占用了.通常比较熟悉的方法是netstat和lsof两种,但还有什么方法呢. 1.netstat或ss命令 netstat -anlp | grep ...

  10. 适用于WebApi的SQL注入过滤器

    开发工具:Visual Studio 2017 C#版本:C#7.1 最有效的防止SQL注入的方式是调用数据库时使用参数化查询. 但是如果是接手一个旧的WebApi项目,不想改繁多的数据库访问层的代码 ...