Java ArrayList中存放引用数据类型的方式
作者:小白的学习笔记 发布时间:2023-11-16 15:23:46
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为我们提供好的类,如Scanner类,Random类等,这些已存在的类中包含了很多的方法与属性,可供我们使用。
第二种,我们自己创建的类,按照类的定义标准,可以在类中包含多个方法与属性,来供我们使用。
类的定义和使用
java代码映射成现实事物的过程就是定义类的过程。
我们就拿一部手机进行分析,它能用来做什么呢?它可以打电话,上网,聊微信等,这些就是手机所提供的功能,也就是方法;手机也有它的特征,如颜色、尺寸大小、品牌型号等,这些就是手机的特征,也就是属性。
目前,我们只关注类中的属性,类中的方法在面向对象部分再进行学习。
类的定义格式
创建java文件,与类名相同
public class 类名{
数据类型 属性名称1;
数据类型 属性名称2;
…
}
例如:
public class Phone {
/*
* 属性
*/
String brand;// 品牌型号
String color;// 颜色
double size; // 尺寸大小
}
类的使用方式
有如下步骤
导包:我们将所有的类放到同一个文件夹下,可以避免导包。
创建对象:数据类型 变量名 = new 数据类型();
调用方法:目前我们定义的自定义类不涉及方法,只是属性(自定义类中的方法部分在面向对象部分讲解)
访问属性:变量名.属性(这是当前的方式,后期会采取调用方法的方式替代掉直接访问的方式来完成对属性的访问。)
当有了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的位置,依次类推
来源:https://blog.csdn.net/x_i_y_u_e/article/details/47955695
猜你喜欢
- PullToRefresh是一套实现非常好的下拉刷新库,它支持:1.ListView2.ExpandableListView3.GridVi
- 1、JDBCJDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开发那么一定是离不开 数据库 的,不管你搞的是什么,只要是想
- spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现
- 更新了AS 3.1.2之后,发现新建Kotlin类,类注释依然木有,没办法只有自己动手了。方法很简单,编辑File Header就可以啦。只
- Arrays.asList()方法的作用是将数组或一些元素转为集合,而你得到的集合并不是我们通常使用的List集合,而是Arrays里面的一
- 释放公平锁(基于JDK1.7.0_40)1. unlock()unlock()在ReentrantLock.java中实现的,源码如下:pu
- @Async注解如何实现方法异步处理大批量数据的时候,效率很慢。所以考虑一下使用多线程。刚开始自己手写的一套,用了线程池启动固定的线程数进行
- import java.io.BufferedInputStream;import java.io.BufferedOutputStream
- 阿里、华为、腾讯Java技术面试题精选,具体内容如下JVM的类加载机制是什么?有哪些实现方式?类加载机制:类的加载指的是将类的.class文
- 前言在产品发布前夕,经常因为编写各类设计文档感到心碎,倒不是难,而是比较繁琐,举例来说,像编写数据库文档这种操作来说,对于新手,甚至很多有一
- 介绍了图的最小生成树的概念,然后介绍了求最小生成树的两种算法:Prim算法和Kruskal算法的原理,最后提供了基于邻接矩阵和邻接链表的图对
- 好久没有做web了,JSON目前比较流行,闲得没事,所以动手试试将对象序列化为JSON字符(尽管DotNet Framework
- 微服务feign调用添加token1.一般情况是这么配置的具体的怎么调用就不说了 如下配置,就可以在请求头中添加需要的请求头信息。packa
- 一、简介ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:Task支持线程的
- java.sql.Timestamp(时间戳)继承父类:java.util.Date所有已实现的接口:Serializable, Clone
- Mybatis-Spring当我们使用mybatis和spring整合后为什么下面的代码可以运行?一个问题:我就写了个mapper接口为什么
- 序列化和反序列化Java是面向对象的语言,与其他语言进行交互(比如与前端js进行http通信),需要把对象转化成一种通用的格式比如json(
- MyBatis 通过包含的jdbcType类型BIT FLOAT CHAR &nbs
- 1、找准入口,使用ClassPathXmlApplicationContext的构造方法加载配置文件,用于加载classPath下的配置文件
- MongoDBMongoDB作为一种NoSQL数据库产品,其实已经非常著名了。去年,由于MongoDB安全认证的薄弱,上万家公司中招。虽然是