2021-08-02第二十天LinkedList特有功能HashSet

第二十天

LinkedList集合

它是一个线程不安全的类,执行效率高,链接式链表结构,查询慢,增删快.
它拥有一些特有功能:

public void addFirst(Object e):在列表开头插入元素.
public void addLast(Object e):在列表的末尾添加元素
public Object getFirst():获取列表的第一个元素
public Object getLast():获取列表的最后一个元素
public rObject removeFirst():删除列表第一个元素,并获取
public rObject removeLast():删除列表最后一个元素,并获取

LinkedList的应用场景:
addFist(场景),将数据添加到列表开头
记住用户浏览商品的足迹-------当用户访问某个网站时回通过cookie存储ID字符串.

Hashset集合

Set集合是无序的,这意味着他的存储和取出不一致,能够保证元素的唯一性.
HashSet底层数据结构是一个Hash表(桶结构),它也是一个线程不安全的类,不同步,执行效率高.
HashSet的add添加 依赖于HashMap的put方法,普通方法又依赖于putVal()又依赖于Hash()----->计算出每个元素的哈希码值hashCode()完成无符号右移16位然后位异或.
所存储的都是String类型:String类型本社已经重写了HashCode()和equals,如果hashCode()和equals()都相同,认为是同一个元素,只能存一个相同元素.

HashSet存储自定义类型

HashSet集合依赖于add方法,HashMap依赖于put方法,存储自定义了类型时要重写equals方法,否则不能保证元素唯一.对于自定义类,必须手动给出equals方法.

在一些需求中如果要求元素不重复就可以使用HashSet,它能保证元素唯一.如果要求元素可以重复呢么只能用List,如果类型是常用类String,Integer,Long都已经重写了hashCode和equals,但是自定义类都没有重写所以要手动重写hashCode和equals.

ArrayList的嵌套
package com.qf.test_03;

import java.lang.reflect.Array;
import java.util.ArrayList;

/**
 * ArrayList<ArrayList<Studet>>
 *     ArrayList<Studet>代表一个java基础班,同时三个班级,都是可以三个ArrayList<Studet>来表示
 *
 * ArrayList<ArrayList<Studet>> --->  三个ArrayList<Studet>       每一个ArrayList<Student>存储三个学生
 * 将大集合进行遍历!
 *
 *
 */
public class ArrayListIncludeArrayListTest {

    public static void main(String[] args) {
        //需要创建一个大的集合
        ArrayList<ArrayList<Student>>  bigArray = new ArrayList<>() ;

        //第一个子集合ArrayList<Student>
        ArrayList<Student> firArray = new ArrayList<>() ;
        Student s1 = new Student("高圆圆",42) ;
        Student s2 = new Student("文章",35) ;
        Student s3 = new Student("王宝强",30) ;
        firArray.add(s1) ;
        firArray.add(s2) ;
        firArray.add(s3) ;

        //将第一个子集合添加到大集合中
        bigArray.add(firArray) ;

        //第二个子集合ArrayList<Student>
        ArrayList<Student> secArray = new ArrayList<>() ;
        Student s4 = new Student("张三",42) ;
        Student s5 = new Student("王五",35) ;
        Student s6 = new Student("李四",30) ;
        secArray.add(s4) ;
        secArray.add(s5) ;
        secArray.add(s6) ;

        //将第二个子集合添加到大集合中
        bigArray.add(secArray) ;

        //第三个子集合ArrayList<Student>
        ArrayList<Student> thirArray = new ArrayList<>() ;
        Student s7 = new Student("盲僧",42) ;
        Student s8 = new Student("亚索",35) ;
        Student s9 = new Student("提莫",30) ;
        thirArray.add(s7) ;
        thirArray.add(s8) ;
        thirArray.add(s9) ;

        //将第三个集合添加到集合中
        bigArray.add(thirArray) ;

        //ArrayList<ArrayList<Student>>遍历大集合
        for(ArrayList<Student> array:bigArray){
            for(Student s: array){
                System.out.println(s.getName()+"\t"+s.getAge());
            }
        }
    }
}

TreeSet红黑树

TreeSet能否实现元素自然排序,却与存储的元素类型能否实现Comparable接口.

TreeSet依赖于TreeMap,红黑树是一个自发平衡的二叉树结构.
红黑树存储的第一个元素叫根节点root,后面存入的元素都需要跟根节点比较,如果比根节点小就放入左树,如果比根节点大就放入右树.

TreeSet

Map

Map是一个双链集合,Map<K,V>提供一个键值对单元.键值必须唯一.
Map集合可以多个值,但是键必须唯一.

Collection只能存储一种类型.
Map可以存储两种类型,键的类型,值的类型

Collection通过5种方式遍历.

Map通过两种方式遍历.
方式1:获取所有的K的集合(键的集合)通过键获取值.
方式2:获取所有的键值对对象Map.Entry<K,V>,通过键值对对象获取所有的键和值.

Map的基本功能

Map是一个接口,所以默认使用子实现类HashMap集合完成.
V put(K key,V value):添加键值对元素,
若Key是第一次添加,呢么返回的结果是null,如果重复添加,返回上一次的键对应的值(Value).
V remove(Object key):返回被删除的键的值(Value).
暴力删除 void clear()删除所有键值对.
boolean containsKey(Object Key)是否包含指定的键
boolean containsKey(Object Value)是否包含指定的值.

高级功能

Map的遍历功能
方式1

Set<K> keySet() 获取当前Map集合中的所有的键的集合+V get(Object key)通过键获取值

Set<K>  x   =  map.keySet();
for(K key : x){
	K value = map.get(key)
	System.out.println(key+"---"+value);
}

方式2

Set<Map,Entry<K,V>> entrySet();
Set<Map,Entry<K,V>> entry = map.entrySet();
for(Map.Entry<K,V> en : entry){
	K key = en.getKey();
	V value = en.getValue();
	System.out.println(key+"-----"+value);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值