java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java ArrayList存放引用数据类型

Java ArrayList中存放引用数据类型的方式

作者:小白的学习笔记

这篇文章主要介绍了Java ArrayList中存放引用数据类型的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

ArrayList中存放引用数据类型

ArrayList中存放引用类型时,存放的是一个引用,因此在放入ArrayList之后再进行改动会影响到ArrayList中的值

看下面一个例子

import java.util.ArrayList;
public class Student implements Cloneable{
    private int age;
    private String name;
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<Student>();
        Student st = new Student();
        st.age = 10;
        st.name = "marco";
        students.add(st);
        st.age = 20;    //修改age值
        System.out.println(students.get(0).age);    //输出为20
    }
}

同样,如果ArrayList中存放的也是ArrayList类型,如ArrayList<ArrayList<Integer>>,对里面ArrayList的修改同样会影响到外层的ArrayList,如果想不受到影响可以在放入ArrayList时进行clone操作,对于ArrayList来说可以使用new ArrayList<ArrayList<Integer>>(list)来进行复制。

Java 引用数据类型 ArrayList集合

引用数据类型(类)

分类

提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类、Random类。

我们可以把类的类型为两种:

类的定义和使用

java代码映射成现实事物的过程就是定义类的过程。

我们就拿一部手机进行分析,它能用来做什么呢?它可以打电话,上网,聊微信等,这些就是手机所提供的功能,也就是方法;手机也有它的特征,如颜色、尺寸大小、品牌型号等,这些就是手机的特征,也就是属性。

目前,我们只关注类中的属性,类中的方法在面向对象部分再进行学习。

类的定义格式

创建java文件,与类名相同
public class 类名{
    数据类型  属性名称1;
    数据类型  属性名称2;
    …
}

例如:

public class Phone {
    /*
     * 属性
     */
    String brand;// 品牌型号
    String color;// 颜色
    double size; // 尺寸大小
}

类的使用方式

有如下步骤

当有了Phone数据类型的变量后,我们就可以使用Phone类中的属性了。对属性的访问我们来演示一下,如下所示:

public class Test {
    public static void main(String[] args) {
        //定义了一个Phone类型的变量p
        Phone p = new Phone();
        /*
         * 通过p,使用Phone中的属性
         */
        //访问p中的brand品牌属性
     p.brand = "苹果6s";
    //访问p中的color颜色属性
        p.color = "白色";
       //访问p中的size尺寸大小属性
        p.size = 5.5;
        System.out.println("手机品牌为" + p.brand);
        System.out.println("手机颜色为" + p.color);
        System.out.println("手机尺寸大小为" + p.size);
    }
}

自定义类的内存图演示:

上述代码中,通过类Phone创建出来的变量p,它相当于我们生活中的盒子,里面包含了它能够使用的属性。

通过 p.属性名 就可以对属性进行操作

与引用类型数组类似,引用类型的自定义类型的变量,直接变量时,结果为对象地址值,这里可以通过内存图简单解释。

ArrayList 集合

ArrayList集合是程序中最常见的一种集合,它属于引用数据类型(类)。在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。

创建

导包:import java.util.ArrayList;

创建对象:与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型:

ArrayList<要存储元素的数据类型> 变量名 = new ArrayList<要存储元素的数据类型>();

l 集合中存储的元素,只能为<>括号中指定的数据类型元素;

l “<要存储元素的数据类型>”中的数据类型必须是引用数据类型,不能是基本数据类型;

下面给出8种基本数据类型所对应的引用数据类型表示形式:

基本数据类型

对应的引用数据类型表示形式

byte

Byte

short

Short

Int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

下面是一些创建arraylist的实例:

存储String类型的元素
ArrayList<String> list = new ArrayList<String>();
存储int类型的数据
ArrayList<Integer> list = new ArrayList<Integer>(); 
存储Phone类型的数据
ArrayList<Phone> list = new ArrayList<Phone>();

方法

返回值类型 方法和描述
boolean add(E e)
将指定的元素添加到集合中
void add(int index, E element)
在列表中指定的位置上插入指定的元素。
boolean addAll(Collection<? extends E> c)
追加指定集合的所有元素到这个列表的末尾,按他们的指定集合的迭代器返回。
boolean addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到该列表中,从指定位置开始。
void clear()
从这个集合中移除所有的元素。
Object clone()
返回该 ArrayList实例浅拷贝。
boolean contains(Object o)
返回 true如果这个列表包含指定元素。
void ensureCapacity(int minCapacity)
增加集合的容量,虽说arraylist本省就是可变的,但当你可以预先确定一定容量时,可以增加效率
E get(int index)
返回此列表中指定元素的位置
int indexOf(Object o)
返回此列表中指定元素的第一个出现的索引,或-如果此列表不包含元素,或- 1。
boolean isEmpty()
返回 true如果此列表不包含元素。
Iterator<E> iterator()
在这个列表中的元素上返回一个正确的顺序。
int lastIndexOf(Object o)
返回此列表中指定元素的最后一个发生的索引,或-如果此列表不包含元素,或- 1。
ListIterator<E> listIterator()
返回列表元素的列表迭代器(在适当的顺序)。
ListIterator<E> listIterator(int index)
在列表中的元素上返回列表迭代器(在适当的顺序),从列表中的指定位置开始。
E remove(int index)
移除此列表中指定位置的元素。
boolean remove(Object o)
从该列表中移除指定元素的第一个发生,如果它是存在的。
boolean removeAll(Collection<?> c)
从这个列表中移除包含在指定集合中的所有元素。
boolean removeIf(Predicate<? super E> filter)
删除满足给定谓词的这个集合的所有元素。
protected void removeRange(int fromIndex, int toIndex)
从列表中删除所有的元素的索引 fromIndex之间,包容性,和 toIndex,独家。
void replaceAll(UnaryOperator<E> operator)
用将运算符应用到该元素的结果替换此列表中的每个元素。
boolean retainAll(Collection<?> c)
仅保留包含在指定集合中的列表中的元素。
E set(int index, E element)
用指定元素替换此列表中指定位置的元素。
int size()
返回此列表中元素的数目。
void sort(Comparator<? super E> c)
分类列表使用提供的 Comparator比较元素。
Spliterator<E> spliterator()
创建一个后期绑定和快速失败 Spliterator超过此列表中的元素。
List<E> subList(int fromIndex, int toIndex)
返回一个视图之间的指定 fromIndex,包容,和 toIndex这份名单的部分,独家。
Object[] toArray()
返回一个数组,包含在这个列表中的所有元素在适当的顺序(从第一个到最后一个元素)。
<T> T[] toArray(T[] a)
返回一个数组,包含在这个列表中的所有元素在适当的顺序(从第一到最后一个元素);返回数组的运行时类型是指定的数组的运行时类型。
void trimToSize()
装饰这 ArrayList实例是列表的当前容量。

下面是一些实例:

import java.util.ArrayList;
public class ArrayListDemo01 {
    public static void main(String[] args) {
        // 创建ArrayList集合
        ArrayList<String> list = new ArrayList<String>();
        // 向集合中添加元素
        list.add("stu1");
        list.add("stu2");
        list.add("stu3");
        list.add("stu4");
        // 获取集合中元素的个数
        System.out.println("集合的长度:" + list.size());
        // 取出并打印指定位置的元素
        System.out.println("第1个元素是:" + list.get(0));
        System.out.println("第2个元素是:" + list.get(1));
        System.out.println("第3个元素是:" + list.get(2));
        System.out.println("第4个元素是:" + list.get(3));
    }
}

注意:ArrayList集合相当于是一个长度可变的数组,所以访问集合中的元素也是采用索引方式访问,第一个元素存储在索引0的位置,第二个元素存储在索引1的位置,依次类推

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文