集合 易错点 笔记

在这里插入图片描述

HashSet集合存储数据的结构(哈希表)

什么是哈希表呢?
在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一
个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率
较低。而JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转
换为红黑树,这样大大减少了查找时间。
简单的来说,哈希表是由数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下图所示。
在这里插入图片描述
在这里插入图片描述

Comparator比较器

public class CollectionsDemo3 { 
public static void main(String[] args) { 
ArrayList<String> list = new ArrayList<String>(); 
	list.add("cba"); 
	list.add("aba"); 
	list.add("sba"); 
	list.add("nba"); //排序方法 按照第一个单词的降序 
Collections.sort(list, new Comparator<String>() { 
	@Override 
public int compare(String o1, String o2) { 
	return o2.charAt(0) - o1.charAt(0);
 } 
} 
		System.out.println(list); 
	} 
}

public int compare(String o1, String o2) :比较其两个参数的顺序。
两个对象比较的结果有三种:大于,等于,小于。
如果要按照升序排序,
则o1 小于o2,返回(负数),相等返回0,01大于02返回(正数)
如果要按照降序排序
则o1 小于o2,返回(正数),相等返回0,01大于02返回(负数)

HashMap 与 Hashtable 的区别(重点)

在这里插入图片描述
Map 集合中每一个元素都是 Map.Entry 的实例,只有通过 Map.Entry 才能进行 key 和 value 的分离操作
在这里插入图片描述

Iterator

Iterator 属于迭代输出,基本的操作原理:是不断的判断是否有下一个元素,有的话,则直接输出。 此接口定义如下: public interface Iterator 要想使用此接口,则必须使用 Collection 接口,在 Collection 接口中规定了一个 iterator()方法,可以用于为 Iterator 接口进行实例化操作。

import java.util.*;//*的作用是 util下的所有包

public class Demo1 {
    public static void main(String[] args) {
        Map<Integer,String> map = new TreeMap<>();
        Map<Integer,String> map2 = new Hashtable<>();
        map.put(1,"帅1哥");
        map.put(2,"帅2哥");
        map.put(3,"帅3哥");
        map.put(4,"帅4哥");
        map.put(5,"帅5哥");
        map2.putAll(map);//将map的键值对赋值给map2
        Iterator<Integer> it1 = map2.keySet().iterator(); 
        while(it1.hasNext()){
            int i = it1.next();
            System.out.println(i+"->"+map.get(i));
       }
    }
}

总结

1、 类集就是一个动态的对象数组,可以向集合中加入任意多的内容。
2、 List 接口中是允许有重复元素的,Set 接口中是不允许有重复元素。
3、 所有的重复元素依靠 hashCode()和 equals 进行区分
4、 List 接口的常用子类:ArrayList、Vector
5、 Set 接口的常用子类:HashSet、TreeSet
6、 TreeSet 是可以排序,一个类的对象依靠 Comparable 接口排序
7、 Map 接口中允许存放一对内容,key  value
8、 Map 接口的子类:HashMap、Hashtable、TreeMap
9、 Map 使用 Iterator 输出的详细步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值