31.0/LinkedList/Set/ashSet/ TreeSet/Map/ HashMap/ TreeMap

2023-11-28 16:01

本文主要是介绍31.0/LinkedList/Set/ashSet/ TreeSet/Map/ HashMap/ TreeMap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

31.1Linkedlist

 31.2Set集合

31.3HashSet集合

31.4添加元素

31.5删除

31.6hashSet的遍历

31.7hashSet的源码

31.8TreeSet集合。


31.1Linkedlist

1.凡是查询源码 ,我们都是从类的构造方法入手:/*** Constructs an empty list.*/public LinkedList() {}该类的构造方法内是空的,没有任何的代码。 但是该类中有三个属性。   transient int size = 0; //索引transient Node<E> first; //第一个元素对象 transient Node<E> last; //表示最后一个元素对象。================ add的源码=====E:理解为Object类型==========================。public boolean add(E e) {linkLast(e);return true;}void linkLast(E e) {final Node<E> l = last;//上一个节点   数据  下一个节点final Node<E> newNode = new Node<>(l, e, null);last = newNode;if (l == null)first = newNode;elsel.next = newNode;size++;modCount++;}==================Node的源码 内部类=======================================   private static class Node<E> { //<E>泛型--objectE item; //数据Node<E> next; //下一个节点Node<E> prev; //上一个节点Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}}

1、==================== get(1)-----获取元素========================public E get(int index) {checkElementIndex(index); //检查index下标是否正确。return node(index).item;  //李四Node对象}========================node(index)=============================Node<E> node(int index) {//>> 位运算二进制运算 ----- size >> 1 一半的意思size/2if (index < (size >> 1)) { //前半部分Node<E> x = first; for (int i = 0; i < index; i++)x = x.next;return x;} else {  //后半部分Node<E> x = last;for (int i = size - 1; i > index; i--)x = x.prev;return x;}}

分析: LinkedList查询效率低。因为它要一个节点一个节点的往后找

 

 31.2Set集合

31.3HashSet集合

public class Test02 {public static void main(String[] args) {HashSet  hashSet= new HashSet();HashSet  hashSet1 = new HashSet(16);//初始容器的大小//loadFactor:--->0.7f 表示负载因子 当空间使用70%时 要求扩容HashSet hashSet2 = new HashSet(16,0.7f);}
}

 

31.4添加元素

 //添加操作hashSet.add("java01");hashSet.add("java02");hashSet.add("java04");hashSet.add("java03");hashSet.add("java02");HashSet set2=new HashSet();set2.add("刘德华");set2.add("张学友");set2.add("黎明");hashSet.addAll(set2); //把set2中的每个元素添加到hashset中System.out.println(hashSet); //元素不能重复 而且无序

31.5删除

     //删除hashSet.remove("黎明");
//        hashSet.clear();//清空容器集合System.out.println(hashSet);

31.6hashSet的遍历

(1)通过foreach遍历

 //遍历--- foreachfor(Object o: hashSet){System.out.println(o);}

31.7hashSet的源码

从构造函数说起:/*** Constructs a new, empty set; the backing <tt>HashMap</tt> instance has* default initial capacity (16) and load factor (0.75).*/public HashSet() {map = new HashMap<>();}在创建一个HashSet的对象时,底层创建的是HashMap。我们说hashset的底层原理时,我们就在后HashMap的原理就行。 讲HashMap时给大家说原理。

31.8TreeSet集合。

  1.  TreeSet中的方法和HashSet中的方法一模一样 只是他们的实现不一样。
  2. TreeSet 基于TreeMap 实现。
  3. TreeSet可以实现有序集合,但是有序性需要通过比较器实现。

 例子: 存储String类型。

TreeSet treeSet=new TreeSet();treeSet.add("java05");treeSet.add("java03");treeSet.add("java04");treeSet.add("java01");treeSet.add("java02");treeSet.add("java04");System.out.println(treeSet);

存储一个对象类型:

public class Test04 {public static void main(String[] args) {TreeSet treeSet=new TreeSet();treeSet.add(new Student("王俊凯",17));treeSet.add(new Student("赵晓普",16));treeSet.add(new Student("赵俊涛",16));treeSet.add(new Student("闫克起",15));System.out.println(treeSet);}
}

通过运行我们发现出现如下的错误:

 发现: TreeSet中的元素必须实现Comparable接口 方可放入TreeSet

解决办法有两个:

第一个: 让你的类实现Comparable接口

package com.ykq;import java.util.TreeSet;/*** @program: day03* @description:* @author: 闫克起2* @create: 2022-04-16 15:59**/
public class Test04 {public static void main(String[] args) {TreeSet treeSet=new TreeSet(); //TreeSet不允许重复元素treeSet.add(new Student("王俊凯",17));treeSet.add(new Student("赵晓普",16));treeSet.add(new Student("赵俊涛",16));treeSet.add(new Student("闫克起",15));System.out.println(treeSet);}
}
class Student implements Comparable{private String name;private Integer age;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}public Student(String name, Integer age) {this.name = name;this.age = age;}public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}//排序:---返回如果大于0 表示当前元素比o大  如果返回-1 当前添加的元素比o小  返回0表示相同元素。@Overridepublic int compareTo(Object o) {Student student= (Student) o;System.out.println(this+"===================>"+o);if(this.age>student.age){return 1;}if(this.age<student.age){return -1;}return 0;}
}

这篇关于31.0/LinkedList/Set/ashSet/ TreeSet/Map/ HashMap/ TreeMap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429943

相关文章

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Java遍历HashMap的6种常见方式

《Java遍历HashMap的6种常见方式》这篇文章主要给大家介绍了关于Java遍历HashMap的6种常见方式,方法包括使用keySet()、entrySet()、forEach()、迭代器以及分别... 目录1,使用 keySet() 遍历键,再通过键获取值2,使用 entrySet() 遍历键值对3,

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M