Java常用集合
根据“Admol”的博客Java常用集合总结整理,集合中的方法可结合Java帮助文档查看学习
List
public class List
extends Component
implements ItemSelectable, Accessible
有序的 collection(也称为序列),允许重复的元素。
常用实现类:
ArrayList
public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
底层使用的是数组结构,特点:查询速度快,增删操作较慢,而且线程不同步。因此根据博客“多线程”中的“三大不安全案例”中的第三个,线程不安全。
要保证同步,可以使用:List list = Collections.synchronizedList(new ArrayList());进行包装。
常用方法:
add(E e):将指定元素追加到此列表末尾
add(int index, E element):在此列表指定位置插入指定元素
addAll(Collection<? extends E> c):按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾
addAll(int index, Collection<? extends E> c):将指定集合中的所有元素插入到此列表中,从指定的位置开始。
clear():从列表中删除所有元素。
contains(Object o):如果此列表包含指定的元素,则返回 true 。
get(int index): 返回此列表中指定位置的元素。
indexOf(Object o):返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
remove(int index):删除该列表中指定位置的元素。
remove(Object o):从列表中删除指定元素的第一个出现(如果存在)。
removeAll(Collection<?> c):从此列表中删除指定集合中包含的所有元素。
set(int index, E element):用指定的元素替换此列表中指定位置的元素。
size(): 返回此列表中的元素数。
sort(Comparator<? super E> c):方式为Collections.sort(list);
Array.java
package com.sgkurisu.base;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Array {
public static void main(String[] args) throws InterruptedException {
List<Integer> list = new ArrayList<Integer>();
//add方法
list.add(1);
list.add(3);
list.add(2);
list.add(4);
//sort方法
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println(list.size());
//remove方法
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
//测试线程同步
List<Integer> list1 = Collections.synchronizedList(new ArrayList<Integer>());
System.out.println(list1.size());
for (int i = 0; i < 10000; i++) {
int a = i;
new Thread(()->{
//list1.add(i);在Lamda表达式中应按照以下方式
list1.add(a);
}).start();
}
Thread.sleep(100);
System.out.println(list1.size());
}
}
LinkedList
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable
使用双向链表实现存储,允许所有元素(包括 null)。非线程安全,要保证同步,可以使用List list = Collections.synchronizedList(new LinkedList());进行包装,可以被当作堆栈和队列来使用。
List list = new LinkedList();
Vector
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
Vector类实现了可扩展的对象数组。像数组一样,它包含可以使用整数索引访问的组件。 但是,Vector的大小可以根据需要增长或缩小,以适应在创建Vertor之后添加和删除项目。 Vector线程安全,如果不需要线程安全的实现,建议使用ArrayList代替Vector。
测试线程安全性
package com.sgkurisu.base;
import java.util.List;
import java.util.Vector;
public class Vec {
public static void main(String[] args) throws InterruptedException {
List list = new Vector<Integer>();
for (int i = 0; i < 100000; i++) {
new Thread(()->{
list.add(Thread.currentThread().getName());
}).start();
}
Thread.sleep(100);
System.out.println(list.size());
}
}
Map
HashMap
基于哈希表的 Map 接口的实现,存储键值对,键是唯一的,允许使用 null 值和 null 键,非同步,同步可以使用Map m = Collections.synchronizedMap(new HashMap<>());
常用方法:
clear():从这张地图中删除所有的映射。
get(Object key):返回到指定键所映射的值,如果返回null,可以判断该键不存在。 当然有特殊情况,就是在hashmap集合中,是可以存储null键null值的。
isEmpty():如果此地图不包含键值映射,则返回 true。
remove(Object key): 从该地图中删除指定键的映射(如果存在)。
remove(Object key, Object value):仅当指定的密钥当前映射到指定的值时删除该条目。
size(): 返回此地图中键值映射的数量。
HashTable
底层是哈希表数据结构,不可以存入null键null值,是线程同步的
Set
HashSet
底层数据结构是哈希表(实际上是一个 HashMap 实例),允许使用 null 元素,唯一且无序,非线程安全
Collections
此类仅由静态方法组合或返回集合。实现对集合的查找、排序、替换、 线程安全化(将非同步的集合转换成同步的)等操作。
Arrays
此类由静态方法组成,包含用于操作数组的各种方法(如排序和搜索)。

浙公网安备 33010602011771号