Java List 笔记

原创
05/27 17:23
阅读数 35

List

List 是一个数组的接口,下面有三个实现类,ArrayList,LinkedList,Vector。ArrayList是日常开发中用的最多的。

ArrayList

核心概念

  • ArrayList 本质上操作的是Java的数组,在创建ArrayList的时候,有两种常用的方式,一种是无参的,一种是有参的。
  • 对于无参的构造函数,jdk1.9开始出现区别。
    • 1.9 之后,无参构造函数在声明的时候,默认是一个空数组,当增加数据时会判断增加容量的长度与默认的10,取较大的值作为创建容量的大小
    • 1.9之前,无参构造函数在声明的时候默认创建一个大小位10的数组
  • 当ArrayList的容量不够的时候,ArrayList会进行容量的增加,这个容量的增加是1.5倍(jdk1.8)的增长,比如当前数组的长度为10,那么在增加数据的时候,会创建一个容量为15的数组。数组的增长方式是创建一个新的数组,然后把旧数组拷贝进新数组。所以,在使用ArrayList的时候,要预估一下数据量的大小,不然频繁的增加容量,会产生很多垃圾数组,影响性能。
  • 实际开发使用时,如果数组的数量小于10个,可以用无参,否则尽量用有参的,提前定义初始化数量,提高性能。

保存自定义对象

  • 用List 保存自定义的对象,使用contains,remove查找元素的时候,一定要注意,已经在类中复写了equals方法
public class Person {
	private int age;
	private String name;
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof Person)) {
			return false;
		}
		
		Person person = (Person)obj;
		return this.name.equals(person.name) && this.age == person.age;
	}	
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

LinkedList

  • LinkedList这个类有一个和ArrayList的不同点就是,任何值它都能存储,包括null,但是使用方式与ArrayList完全一致。

Vector

  • Vector类与ArrayList类继承结构相同,但是实现方式上有区别。Vector操作使用的同步的方式,但是ArrayList并没有这样的操作。因此对于多线程来说,Vector是线程安全,但是性能不如ArrayList。
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部