一篇文章让你精通:java集合讲解(二,ArrayList)
Posted 韶光不负
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇文章让你精通:java集合讲解(二,ArrayList)相关的知识,希望对你有一定的参考价值。
List集合
主要的实现类是ArrayList与LinkedList,分别是数据结构当中的顺序表与列表实现。还包括了栈与队列的实现类。Deque与Queue。(数组中能放基本数据类型,也能放引用数据类型(对象)。 集合中只能放引用数据类型)
List
特点:有序,不唯一(可以重复)
ArrayList
特点:在内存当中分配连续的空间,实现长度不可变。
优点:遍历元素与随机访问元素,效率高
缺点:添加与删除元素时,需要大量的前移或者后移,操作频繁。按照内容查询效率低
add() | 末尾添加元素, 数组能自动装箱:就是数组封装。普通数据类型——>包装类 可以使用一个参数或者二个,一个时,添加元素,二个时,第一个参数:索引,第二个,添加元素 |
addAll(对象) addAll(下标,对象) | 复制添加对象全部元素,默认在后面添加 当有二个参数后,表示在下标后添加对象全部元素。 |
remove() | 当输入的是对象时,删除对象,当输入的是对下标,删除下标, |
el1.removeAll(el2) | 在el1中删除el2中相同的元素。 |
list.retainAll(list2); | 在list中查找与list2相同的元素 |
get() | 获取指定索引,返回的是一个对象。 |
set(index,value) | 二个参数,第一个为下标,第二个为修改值 |
clear() | 清空数组 |
contains(value) | 判断是否存在value值,返回布尔值 |
indexOf(value) | 查找value的下标索引 |
isEmpty() | 判断数组是否为空。 |
size() | 查看数组中真实存储的元素个数。与数组的length()方法返回不同 |
toString() | 遍历数组 |
注意:下面代码中还有遍历数组的5中方式
public class Text {
public static void main(String[] args) {
//创建一个ArrayList集合
//方法一
//ArrayList list = new ArrayList();
//数组中能放基本数据类型,也能放引用数据类型(对象)。
//集合中只能放引用数据类型
//ArrayList<泛型> list = new ArrayList<泛型>(); 泛型可以理解为一个对象
//通常创建方式:面向接口编程
//多态性:好处当你的ArrayList()改为它子类LinkedList()时,下面的代码就不要在修改
List list =new ArrayList();
//add方法:末尾添加元素
list.add(99);//数组能自动装箱:就是数组封装。普通数据类型——>包装类
list.add(66);
list.add(33);
//add方法:第一个参数:索引,第二个,添加元素
//底层发生了大量元素后移,并可能发生数组扩容
list.add(2,100);
//get方法 获取指定索引,返回的是一个对象。
int elem=(int) list.get(2);
//size方法,查看数组中真实存储的元素个数。不是数组的length
System.out.println(list.size());
//toString方法,遍历数组
System.out.println(list.toString());
//方法1,for循环
for (int i = 0; i <list.size() ; i++) {
int elem2= (int) list.get(i);
System.out.println(i+"是"+elem2);
}
//方法2,for-each循环,必须使用对象输出
for (Object elem3:list){
System.out.println(elem3);
}
//方法3,Iterator (迭代器),iterator()返回 Iterator的接口
Iterator it=list.iterator();
while (it.hasNext()){//hasNext():判断是否还有元素,返回布尔值
int elem2 =(int) it.next(); //next方法:取出元素,返回的也是一个对象。
System.out.println(elem2);
}
//方法4,Lambda表达式+流程式编程(JDK1.8提供)
list.forEach((i)-> System.out.println(i));
// list.forEach(System.out::println); 第二种写法
泛型的使用
为什么使用泛型?
数组在添加元素时,可以是如何数据类型,但当我们遍历时,我们强制类型转化就存在了问题。有一些类型是不能强制类型转化的。比如字符串不能转化为数子。
当我们使用泛型后,就固定了数组中只能存储一种数据类型,安全性大大提高,而且不需要在使用强制类型转化。让编程更加简单
如何使用泛型?
严进宽出
List<Integer> list =new ArrayList(); //方式一,
// List<Integer> list =new ArrayList<Integer>(); 方式二
// ArrayList<泛型> 名称 = new ArrayList<泛型>(); 泛型可以理解为一个对象
LinkedList
特点:采用双向链表的存储方式
优点:添加与删除元素时,效率高(前提是必须先低效率查询,如果插入与删除在头部或者尾部可以减少查询次数)
缺点:遍历元素与随机访问元素,效率低
以上是关于一篇文章让你精通:java集合讲解(二,ArrayList)的主要内容,如果未能解决你的问题,请参考以下文章