3.Java-集合


前言

Java的集合有两个分支分别是:Collection、Map;
Collection 主要分为:List、Set;

Java集合


一、List

List 是有序的、允许重复的

ArrayList

  1. 底层是通过数组形式实现
  2. 允许元素为null
  3. 非线程安全,
  4. 查找速度快,插入、删除速度慢
  5. 默认长度10

LinkedList

  1. 底层通过双向链表形式实现
  2. 允许元素为null
  3. 非线程安全
  4. 插入、删除速度快,查找速度慢

Vector

已废弃,不建议使用

二、Set

Set 是无序的、不允许重复的

HashSet

  1. 底层是通过数组形式实现
  2. 允许元素为null
  3. 下标和元素的hash值有关系
  4. 非线程安全
  5. 查询速度快

TreeSet

  1. 有序的
  2. 不允许重复的
  3. 元素要实现Comparable接口

三、Map

键值对的存储方式

HashMap

  1. key不能重复
  2. key是无序的
  3. 非线程安全

TreeMap

  1. key不能重复
  2. key是有序的
  3. 非线程安全

HashTable

  1. 线程安全的
  2. key value 不能为null
  3. 无序的

四、集合的遍历

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线程安全解决方案

  1. 使用替代
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();
        }
    }
}

  1. 使用Collections工具类
List<String> list = Collections.synchronizedList(new ArrayList<>());

Set<String> set = Collections.synchronizedSet(new HashSet<>());

Map<String, String> map = Collections.synchronizedMap(new HashMap<>());
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值