JAVA基础(第18天 Collection Collections)

Collection

List

  • ArrayList
  • LinkedList
  • Vector
  • Stack

Set

  • HashSet
  • LinkedHashSet
  • TreeSet

Map

  • HashMap
  • LinkedHashMap
  • TreeMap
  • ConcurrentHashMap
  • Hashtable
  • Properties

1.Collection 和 Collections 有什么区别?

  • Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如 List、Set 等。
  • Collections 是一个包装类,包含了很多静态方法,不能被实例化,就像一个工具类,比如提供的排序方法: Collections. sort(list)。

HashMap 和 Hashtable 有什么区别?
• 存储:HashMap 运行 key 和 value 允许为 null,而 Hashtable 不允许。
• 线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。
• 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建议使用。推荐在单线程环境下使用 HashMap 替代,如果需要多线程使用则用 ConcurrentHashMap 替代。


如何决定使用 HashMap 还是 TreeMap?
对于在 Map 中插入、删除、定位一个元素这类操作,HashMap 是最好的选择,因为相对而言 HashMap 的插入会更快;但如果你要对一个 key 集合进行有序的遍历,那 TreeMap 是更好的选择。


说一下 HashMap 的实现原理?
HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket 里。当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value。当 hash 冲突的个数比较少时,使用链表,否则使用红黑树。


说一下 HashSet 的实现原理?
HashSet 是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不允许重复的值。


Collections常用用法

package com.wdzl.demo02;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
 * Collections 和 Collection
 *	Collections工具类 ,操作Collection
 *  Collection集合接口
 * Arrays
 */
public class TestCollections {
	public static void main(String[] args) {
		//asList返回一个受指定数组支持的固定大小的列表.
		List<Integer> list = Arrays.asList(4,2,5,6,1,9);
		System.out.println(list);
		//排序
		Collections.sort(list);
		System.out.println("排序为:"+list);
		//洗牌
		//shuffle()使用默认随机源对指定列表进行置换。
		Collections.shuffle(list);
		System.out.println("打乱为随机数列:"+list);
		//逆序
		//reserve()反转指定列表中元素的顺序。
		Collections.reverse(list);
		System.out.println("逆序为:"+list);
		//二分查找
		Collections.sort(list);
		System.out.println("重新排序后:"+list);
		//binarySearch(list,a)使用二分搜索法搜索指定列表,以获得指定对象
		int index = Collections.binarySearch(list, 8);
		System.out.println("索引为:"+index);
		
		//fill(list,a)使用指定元素替换指定列表中的所有元素。
//		Collections.fill(list, 888);
		//copy(list1,list2)将所有元素从一个列表复制到另一个列表。
//		Collections.copy(dest, src);
		List<String> list1 = Collections.EMPTY_LIST;
		System.out.println("list1:"+list1);
		List<String> list2 = query();
		list2.isEmpty();
		System.out.println("list2:"+list1);
	}
	
	
	public static List<String> query(){
		//如果为空
		return Collections.EMPTY_LIST;
	}
}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值