第十三章 集合框架的比较

1.List Set Map 的区别

  1. List: 有序,可以多个元素引用相同的对象
  2. Set: 无序,不重复,不可以多个元素引用相同对象
  3. Map: 使用键值对存储,两个key可以引用相同的对象,但是key不能重复
package com.hqa.design.test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Test {
	public static void main(String[] args) {
		// 初始化list
		List<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(1);
		System.out.println(list.size()); //2 可以添加重复元素
		
		Set<Integer> set = new HashSet<>();
		set.add(1);
		set.add(1);
		
		System.out.println(set.size()); //1 不可以添加重复元素
		
		list.add(2);
		list.add(3);
		
		set.add(2);
		set.add(3);
		set.add(-1);
		
		System.out.println(list.get(0)); //1 有序 
		System.out.println(set.iterator().next()); //-1 无序 多次运行仍为 -1 ,所以说hashSet的无序并不是完全随机,而是有一个内部自身的排序规则的
		
	}
}

2.ArrayList 和LinkedList 区别

  1. ArrayList: 底层使用数组,存、读效率高;插入、删除特定位置效率低,近似O(n)
  2. LinkedList: 使用双向链表,插入、删除效率高O(1)
    注意了,这个是高频面试题

3.HashMap 和 HashTable的区别

  1. HashMap 是线程不安全的,HashTable线程安全
  2. HashMap 效率高一点
  3. HashMap 可以有null 值,HashTable 有Null会产生NullPointerException异常
  4. HashTable 采用方法级别的悲观锁效率太低,基本淘汰,需线程安全使用ConcurrentHashMap

4.HashMap 和 ConcurrentHashMap 区别

  1. ConcurrentHashMap 把整个桶数组分割成很多个Segment,每个分段使用lock锁保护(1.8之后使用CAS算法)
  2. HashMap键值对允许有null,ConcurrentHashMap反之。

5.CAS算法 compare and swap

无锁算法,CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”

6.HashSet 检查重复

当你把对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他加入的对象的hashcode值作比较,如果没有相符的hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同hashcode值的对象,这时会调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,HashSet就不会让加入操作成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值