Java学习路线-35:List集合
2023-09-14 09:07:12 时间
第29 章 : List集合
125 List接口简介
允许保存重复数据
List新的方法
E get(int index);
E set(int index, E element);
ListIterator<E> listIterator();
三个常用子类
ArrayList 90%
Vector 8%
LinkedList 2%
定义
public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
126 ArrayList子类
继承结构
@Iterable
-@Collection
-@List
AbstractCollection(Collection)
- AbstractList(List)
-ArrayList(List, RandomAccess, Cloneable, java.io.Serializable)
List特征
1、保存顺序就是存储顺序
2、允许有重复数据
JDK >= 1.8 Iterable接口中有forEach方法
import java.util.ArrayList;
import java.util.List;
class Demo{
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("Hello");
list.add("World");
System.out.println(list);
// [Hello, Hello, World]
list.forEach((str)->{
System.out.println(str);
});
/**
* Hello
* Hello
* World
*/
System.out.println(list.size()); // 3
System.out.println(list.isEmpty()); // false
}
}
ArrayList 实际包含一个对象数组
默认使用空数组
添加新元素时,如果长度不够,会开辟一个新的数组
版本不一样实现也不一样
JDK < 1.9 默认使用长度为10的数组
JDK >= 1.9 默认空数组
如果超过10个数据,考虑使用有参构造,避免垃圾数组的产生
127 ArrayList保存自定义类对象
如果需要remove,contains方法,要覆写equals方法
import java.util.ArrayList;
import java.util.List;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj == this) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return this.name.equals(other.name) && this.age == other.age;
}
}
class Demo {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
list.add(new Person("Tom", 23));
list.add(new Person("Jack", 24));
list.add(new Person("Steve", 25));
System.out.println(list.contains(new Person("Tom", 23)));
// true
}
}
128 LinkedList子类
继承关系
@Iterable
-@Collection
-@List
AbstractCollection(Collection)
-AbstractList(List)
-AbstractSequentialList
-LinkedList(List, Deque, Cloneable, java.io.Serializable)
代码实例
import java.util.LinkedList;
import java.util.List;
class Demo{
public static void main(String[] args) {
List<String> list = new LinkedList<String>();
list.add("Hello");
list.add("Hello");
list.add("World");
System.out.println(list);
// [Hello, Hello, World]
list.forEach(System.out::println);
/**
* Hello
* Hello
* World
*/
}
}
LinkedList和ArrayList接口一致,实现不一样
区别:
ArrayList 数组实现 get查找复杂度为O(1)
LinkedList 链表实现 get查找复杂度为O(n)
ArrayList默认初始化大小为10,长度会自动扩容,保存大数据会产生垃圾,这时使用LinkedList
129 Vector子类
Vector和ArrayList继承关系一致
Vector 的方法加了同步处理synchronized ,多线程安全,性能不如ArrayList
import java.util.List;
import java.util.Vector;
class Demo{
public static void main(String[] args) {
List<String> list = new Vector<String>();
list.add("Hello");
list.add("Hello");
list.add("World");
System.out.println(list);
// [Hello, Hello, World]
list.forEach(System.out::println);
/**
* Hello
* Hello
* World
*/
}
}
总结
集合 | 说明 |
---|---|
ArrayList | 数组实现,读>写 |
Vector | 数组实现,线程安全 |
LinkedList | 链表实现,写>读 |
继承关系
@Iterable
-@Collection
-@List
AbstractCollection(Collection)
- AbstractList(List)
-ArrayList(List, RandomAccess, Cloneable, java.io.Serializable)
-Vector(List, RandomAccess, Cloneable, java.io.Serializable)
-AbstractSequentialList
-LinkedList(List, Deque, Cloneable, java.io.Serializable)
相关文章
- Java中List, Integer[], int[]的相互转换
- java实现拼出漂亮的表格
- Java中List,Set,Map的区别以及API的使用
- Java实现 蓝桥杯VIP 算法训练 调和数列
- Java实现 蓝桥杯VIP 基础练习 字符串对比
- Java实现 蓝桥杯 传纸条
- Java中List集合去除重复数据的方法
- 【JAVA】JAVA8-String.join字符串拼接
- Java的List转Scala的数组
- java List<String>的初始化
- JAVA中循环删除list中元素的方法总结
- SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下
- Java List序列化的实现
- Android报错提示Attempt to invoke interface method ‘int java.util.List.size()‘ on a null object reference
- Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比)
- Java List toArray(new String[0]) 的理解&List的toArray()方法详解
- 使用Collections.emptyList()生成的List不支持add方法___Java Collections.emptyList方法的使用及注意事项
- Java List 最常用的 4 种去重方法以及性能对比测试数据(使用Kotlin 语言编程)
- java List 去重(两种方式)
- java基础之集合List-ArrayList、LinkedList、Vector的差别
- Java类集-list