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

它们的区别是:

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. Kubernetes 持续集成 SpringCloud

    写在开始之前,在开始之前我们需要了解几个概念: 1.什么是持续集成? 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次 ...

  2. mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)

    一.概述 物理备份和恢复又分为冷备份和热备份.与逻辑备份相比,它最大优点是备份和恢复的速度更快.因为物理备份的原理都是基于文件的cp. 1.1 冷备份 冷备份就是停掉数据库服务.这种物理备份一般很少使 ...

  3. TCP/IP 笔记 - TCP数据流和窗口管理

    TCP流量控制机制通过动态调整窗口大小来控制发送端的操作,确保路由器/接收端消息不会溢出. 交互式TCP连接 交互式TCP连接指该连接需要在客户端和服务器之间传输用户输入信息,如按键操作.短消息.操作 ...

  4. 自动生成实体类和xml

    1 首先eclipse需要安装一个插件 2 两个配置文件 1 generator.properties 2 generator.xml <?xml version="1.0" ...

  5. PHP错误报告级别

    error_reporting = E_ALL & ~E_NOTICE ; 错误报告级别是位字段的叠加,推荐使用 E_ALL | E_STRICT ; 1 E_ERROR 致命的运行时错误 ; ...

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

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

  7. C 程序与 C++ 程序之间的相互调用

    因为 C 编译器编译函数时不带参数的类型信息,只包含函数的符号名字.如 void foo( int x ) , C 编译器会将此函数编译成类似 _foo 的符号,C 链接器只要找到了调用函数的符号,就 ...

  8. golang使用chrome headless获取网页内容

    如今动态渲染的页面越来越多,爬虫们或多或少都需要用到headless browser来渲染待爬取的页面. 而最近广泛使用的headless browser解决方案PhantomJS已经宣布不再继续维护 ...

  9. VB.NET 使用ADODB連接資料庫滙出到EXCEL

    '導入命名空間 Imports ADODB Imports Microsoft.Office.Interop Private Sub A1() Dim Sql As StringDim Cnn As ...

  10. laravel5.5 Syntax error or access violation: 1071 Specified key was too long

    在laravel5.5执行数据迁移时 php artisan migrate 先说下系统环境: ubutun Ubuntu 16.04.3 LTS mysql:5.6.35-log 经查自Larave ...