您的位置:首页 > 财经 > 金融 > 徐州公司建站模板_界面设计好看的网站_seo网址大全_网时代教育培训机构官网

徐州公司建站模板_界面设计好看的网站_seo网址大全_网时代教育培训机构官网

2024/11/18 12:42:18 来源:https://blog.csdn.net/xiaozhuzhu__/article/details/142708070  浏览:    关键词:徐州公司建站模板_界面设计好看的网站_seo网址大全_网时代教育培训机构官网
徐州公司建站模板_界面设计好看的网站_seo网址大全_网时代教育培训机构官网

以下学习笔记记录于:2024.09.25-2024.09.30

文章目录

  • 阶段二 JavaSE进阶
    • 第四章 集合框架
      • 4-2 List系列集合
        • 90 特点、特有方法
        • 91 遍历方式
        • 92 ArrayList集合的底层原理
        • 93 LinkedList集合的底层原理、特有方法
        • 94 LinkedList集合的应用场景:栈、队列
      • 4-3 Set系列集合
        • 95 整体特点
        • 96 HashSet集合的底层原理1(哈希表)
        • 97 HashSet集合的底层原理2(红黑树)
        • 98 HashSet集合去重复机制

阶段二 JavaSE进阶

第四章 集合框架

4-2 List系列集合

90 特点、特有方法

image-20240925191644478

ListTest1.java:

package com.itheima.hello.d3_collection_list;import java.util.ArrayList;
import java.util.List;public class ListTest1 {public static void main(String[] args) {// 1.创建一个ArrayList集合(有序、可重复、有索引)List<String> list = new ArrayList<>();  // 一行经典代码(多态写法)list.add("蜘蛛精");list.add("至尊宝");list.add("至尊宝");list.add("牛夫人");System.out.println(list);// 2.public void add(int index, E element):在某个索引位置插入元素。list.add(2, "紫霞仙子");System.out.println(list);// 3.public E remove(int index):根据索引删除元素,返回被删除元素System.out.println(list.remove(2));System.out.println(list);// 4.public E get(int index):返回集合中指定位置的元素。System.out.println(list.get(3));// 5.public E set(int index, E element):修改索引位置处的元素,修改成功后,会返回原来的数据System.out.println(list.set(3, "牛魔王"));System.out.println(list);}
}

运行结果:

image-20240925192720613

91 遍历方式

image-20240925193051913

ListTest2.java:

package com.itheima.hello.d3_collection_list;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ListTest2 {public static void main(String[] args) {List<String> list = new ArrayList<>();  // 一行经典代码(多态写法)list.add("蜘蛛精");list.add("至尊宝");list.add("至尊宝");list.add("牛夫人");// 1、for循环【list.fori + 回车】for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}System.out.println("---------------");// 2、迭代器Iterator<String> it = list.iterator();while (it.hasNext()){System.out.println(it.next());}System.out.println("---------------");// 3、增强for循环(foreach遍历)【list.for + 回车】for (String s : list) {System.out.println(s);}System.out.println("---------------");// 4、JDK 1.8开始之后的Lambda表达式list.forEach(s -> System.out.println(s));}
}
92 ArrayList集合的底层原理

ArrayList集合和LinkedList集合底层采用的**数据结构(存储、组织数据的方式)**不同,应用场景不同

image-20240925194847510

image-20240925195211328

image-20240925195313515

93 LinkedList集合的底层原理、特有方法

image-20240926111232064

image-20240926111539327

image-20240926111631795

94 LinkedList集合的应用场景:栈、队列

LinkedList集合的应用场景之一:可以用来设计队列(先进先出,后进后出),只在首尾增删元素。

LinkedList集合的应用场景之一:可以用来设计栈(后进先出,先进后出),只在首部增删元素。——> 压/进栈push,弹/出栈pop

package com.itheima.hello.d3_collection_list;import java.util.LinkedList;public class ListTest3 {public static void main(String[] args) {// 1、创建一个队列LinkedList<String> queue = new LinkedList<>();  // 此处不要使用多态写法,因为针对首尾的操作只在LinkedList中有// 入队queue.addLast("第1位客人");queue.addLast("第2位客人");queue.addLast("第3位客人");queue.addLast("第4位客人");System.out.println(queue);// 出队System.out.println(queue.removeFirst());System.out.println(queue.removeFirst());System.out.println(queue);System.out.println("-------------------");// 1、创建一个栈LinkedList<String> stack = new LinkedList<>();  // 此处不要使用多态写法,因为针对首部的操作只在LinkedList中有// 进栈(push)stack.addFirst("第1颗子弹");stack.addFirst("第2颗子弹");stack.addFirst("第3颗子弹");stack.addFirst("第4颗子弹");
//        stack.push("第4颗子弹");System.out.println(stack);// 出栈(pop)System.out.println(stack.removeFirst());System.out.println(stack.removeFirst());
//        System.out.println(stack.pop());System.out.println(stack);}
}

运行结果:

image-20240926113659060

4-3 Set系列集合

95 整体特点

image-20240926132940286

SetTest1.java:

package com.itheima.hello.d4_collection_set;import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;public class SetTest1 {public static void main(String[] args) {// 1、创建一个Set集合的对象
//        Set<Integer> set = new HashSet<>(); // 创建了一个HashSet(无序 -> 这里的无序只会无序一次,之后都会固定、不重复、无索引)的集合对象。 一行经典代码。 输出[888, 777, 666, 555]
//        Set<Integer> set = new LinkedHashSet<>();   // (有序、不重复、无索引)   输出[666, 555, 888, 777]Set<Integer> set = new TreeSet<>();     // (排序 -> 默认升序、不重复、无索引) 输出[555, 666, 777, 888]set.add(666);set.add(666);set.add(555);set.add(888);set.add(888);set.add(777);set.add(777);System.out.println(set);}
}
96 HashSet集合的底层原理1(哈希表)

image-20240926133252512

SetTest2.java:

package com.itheima.hello.d4_collection_set;public class SetTest2 {public static void main(String[] args) {Student s1 = new Student("蜘蛛精", 25, 169.5);Student s2 = new Student("紫霞仙子", 18, 165.0);System.out.println(s1.hashCode());System.out.println(s1.hashCode());  // 同一对象的Hash值相同System.out.println(s2.hashCode());  // 不同对象的Hash值一般不相同(小概率相同)String str1 = new String("abc");String str2 = new String("acD");System.out.println(str1.hashCode());System.out.println(str2.hashCode());}
}

运行结果:

在这里插入图片描述

image-20240926215205612

image-20240926215107286

97 HashSet集合的底层原理2(红黑树)

1、如果数组快占满了,会出什么问题?怎么解决?

链表会过长,导致查询性能降低。解决方法:扩容,以“创建一个默认长度16的数组,默认加载因子为0.75”为例,若所存数据超过了16*0.75=12则会扩成原数组的两倍,再将这些数据按算法(哈希值对数组长度求余)重新存入新数组中。

2、若扩容后其链表长度过长又该怎么解决?

image-20240927145734242

在Java中对于平衡二叉树使用较多:

image-20240927150225865

image-20240927150317059

98 HashSet集合去重复机制

image-20240927150928872

  • 解决方式:重写hashCode()和equals()方法。

image-20240927160913588

Student.java:

package com.itheima.hello.d4_collection_set;import java.util.Objects;public class Student {private String name;private int age;private double height;public Student() {}public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}// 只要两个对象内容一样就返回true@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Double.compare(student.height, height) == 0 && Objects.equals(name, student.name);}// 只要两个对象内容一样,返回的哈希值就是一样的@Overridepublic int hashCode() {return Objects.hash(name, age, height);}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}
}

SetTest3.java:

package com.itheima.hello.d4_collection_set;import java.util.HashSet;
import java.util.Set;public class SetTest3 {public static void main(String[] args) {Set<Student> students = new HashSet<>();Student s1 = new Student("蜘蛛精", 25, 169.5);Student s2 = new Student("紫霞仙子", 18, 165.0);Student s3 = new Student("紫霞仙子", 18, 165.0);System.out.println(s2.hashCode());System.out.println(s3.hashCode());Student s4 = new Student("牛魔王", 230, 190.8);students.add(s1);students.add(s2);students.add(s3);students.add(s4);System.out.println(students);}
}

运行结果:

image-20241004215248207

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com