文章目录
前言
Java的集合有两个分支分别是:Collection、Map;
Collection 主要分为:List、Set;
一、List
List 是有序的、允许重复的
ArrayList
- 底层是通过数组形式实现
- 允许元素为null
- 非线程安全,
- 查找速度快,插入、删除速度慢
- 默认长度10
LinkedList
- 底层通过双向链表形式实现
- 允许元素为null
- 非线程安全
- 插入、删除速度快,查找速度慢
Vector
已废弃,不建议使用
二、Set
Set 是无序的、不允许重复的
HashSet
- 底层是通过数组形式实现
- 允许元素为null
- 下标和元素的hash值有关系
- 非线程安全
- 查询速度快
TreeSet
- 有序的
- 不允许重复的
- 元素要实现Comparable接口
三、Map
键值对的存储方式
HashMap
- key不能重复
- key是无序的
- 非线程安全
TreeMap
- key不能重复
- key是有序的
- 非线程安全
HashTable
- 线程安全的
- key value 不能为null
- 无序的
四、集合的遍历
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Set;
/**
* @author Mr.Guo
* @date 2021/2/4 上午10:17
*/
public class CollectionTest {
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add(null);
linkedList.add("1");
linkedList.add("2");
linkedList.add("3");
System.out.println(">>>>>>>>>>>>>>>>>>>>");
for (String item : linkedList) {
System.out.println(item);
}
System.out.println(">>>>>>>>>>>>>>>>>>>>");
linkedList.forEach(System.out::println);
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("1", "11");
hashMap.put("2", "22");
hashMap.put("3", "33");
System.out.println(">>>>>>>>>>>>>>>>>>>>");
Set<String> keySet = hashMap.keySet();
for (String key : keySet) {
System.out.println("key=>" + key + ", value=>" + hashMap.get(key));
}
System.out.println(">>>>>>>>>>>>>>>>>>>>");
hashMap.keySet().forEach(key -> {
System.out.println("key=>" + key + ", value=>" + hashMap.get(key));
});
}
}
运行结果
>>>>>>>>>>>>>>>>>>>> null 1 2 3 >>>>>>>>>>>>>>>>>>>> null 1 2 3 >>>>>>>>>>>>>>>>>>>> key=>1, value=>11 key=>2, value=>22 key=>3, value=>33 >>>>>>>>>>>>>>>>>>>> key=>1, value=>11 key=>2, value=>22 key=>3, value=>33
五、ArrayList,HashSet,HashMap线程安全解决方案
- 使用替代
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* @author Mr.Guo
* @date 2021/2/4 下午4:19
*/
public class SyncCollectionTest {
public static void main(String[] args) {
CopyOnWriteArrayList<String> arrayList = new CopyOnWriteArrayList<>();
CopyOnWriteArraySet<String> arraySet = new CopyOnWriteArraySet<>();
ConcurrentHashMap<String, String> hashMap = new ConcurrentHashMap<>();
for (int i = 0; i < 30; i++) {
new Thread() {
@Override
public void run() {
arrayList.add(UUID.randomUUID().toString());
arraySet.add(UUID.randomUUID().toString());
hashMap.put("" + new Random().nextInt(2000), UUID.randomUUID().toString());
}
}.start();
}
}
}
- 使用Collections工具类
List<String> list = Collections.synchronizedList(new ArrayList<>());
Set<String> set = Collections.synchronizedSet(new HashSet<>());
Map<String, String> map = Collections.synchronizedMap(new HashMap<>());