欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第十三章 集合框架的比较

程序员文章站 2022-07-08 20:24:32
...

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就不会让加入操作成功。

相关标签: 深入学习java基础