一篇文章让你精通:java集合讲解(二,ArrayList)

Posted 韶光不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇文章让你精通:java集合讲解(二,ArrayList)相关的知识,希望对你有一定的参考价值。

List集合

主要的实现类是ArrayList与LinkedList,分别是数据结构当中的顺序表与列表实现。还包括了栈与队列的实现类。Deque与Queue。(数组中能放基本数据类型,也能放引用数据类型(对象)。 集合中只能放引用数据类型

List

特点:有序,不唯一(可以重复)

ArrayList

特点:在内存当中分配连续的空间,实现长度不可变。

优点:遍历元素与随机访问元素,效率高

缺点:添加与删除元素时,需要大量的前移或者后移,操作频繁。按照内容查询效率低

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)的主要内容,如果未能解决你的问题,请参考以下文章

一篇文章让你精通:java集合讲解(二,ArrayList)

一篇文章让你精通:java集合讲解(八,集合的解析与总结)

一篇文章让你精通:java集合讲解(练习处理)

一篇文章让你精通:java集合讲解

一篇文章让你精通:java集合讲解(四,Set)

一篇文章让你精通:java集合讲解(六,Map)