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

相关文章

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

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

Golang中map缩容的实现

《Golang中map缩容的实现》本文主要介绍了Go语言中map的扩缩容机制,包括grow和hashGrow方法的处理,具有一定的参考价值,感兴趣的可以了解一下... 目录基本分析带来的隐患为什么不支持缩容基本分析在 Go 底层源码 src/runtime/map.go 中,扩缩容的处理方法是 grow

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允