java13

1:登录注册案例(理解)

2:Set集合(理解)
	(1)Set集合的特点
		无序,唯一
	(2)HashSet集合(掌握)
		A:底层数据结构是哈希表(是一个元素为链表的数组)
		B:哈希表底层依赖两个方法:hashCode()和equals()
		  执行顺序:
			首先比较哈希值是否相同
				相同:继续执行equals()方法
					返回true:元素重复了,不添加
					返回false:直接把元素添加到集合
				不同:就直接把元素添加到集合
		C:如何保证元素唯一性的呢?
			由hashCode()和equals()保证的
		D:开发的时候,代码非常的简单,自动生成即可。
		E:HashSet存储字符串并遍历
		F:HashSet存储自定义对象并遍历(对象的成员变量值相同即为同一个元素)
	(3)TreeSet集合
		A:底层数据结构是红黑树(是一个自平衡的二叉树)
		B:保证元素的排序方式
			a:自然排序(元素具备比较性)
				让元素所属的类实现Comparable接口
			b:比较器排序(集合具备比较性)
				让集合构造方法接收Comparator的实现类对象
		C:把我们讲过的代码看一遍即可
	(4)案例:
		A:获取无重复的随机数
		B:键盘录入学生按照总分从高到底输出

3:Collection集合总结(掌握)
	Collection
		|--List	有序,可重复
			|--ArrayList
				底层数据结构是数组,查询快,增删慢。
				线程不安全,效率高
			|--Vector
				底层数据结构是数组,查询快,增删慢。
				线程安全,效率低
			|--LinkedList
				底层数据结构是链表,查询慢,增删快。
				线程不安全,效率高
		|--Set	无序,唯一
			|--HashSet
				底层数据结构是哈希表。
				如何保证元素唯一性的呢?
					依赖两个方法:hashCode()和equals()
					开发中自动生成这两个方法即可
				|--LinkedHashSet
					底层数据结构是链表和哈希表
					由链表保证元素有序
					由哈希表保证元素唯一
			|--TreeSet
				底层数据结构是红黑树。
				如何保证元素排序的呢?
					自然排序
					比较器排序
				如何保证元素唯一性的呢?
					根据比较的返回值是否是0来决定

4:针对Collection集合我们到底使用谁呢?(掌握)
	唯一吗?
		是:Set
			排序吗?
				是:TreeSet
				否:HashSet
		如果你知道是Set,但是不知道是哪个Set,就用HashSet。

		否:List
			要安全吗?
				是:Vector
				否:ArrayList或者LinkedList
					查询多:ArrayList
					增删多:LinkedList
		如果你知道是List,但是不知道是哪个List,就用ArrayList。

	如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。

	如果你知道用集合,就用ArrayList。

5:在集合中常见的数据结构(掌握)
	ArrayXxx:底层数据结构是数组,查询快,增删慢
	LinkedXxx:底层数据结构是链表,查询慢,增删快
	HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
	TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

  

时间: 2024-10-11 19:59:05

java13的相关文章

大家一起和snailren学java-(13)字符串

“好久没有写这个系列了.其实也有在看,不过觉得一些很基本的都写上来没意思.现在打算的是将整本书看完后,最后整合为一篇blog,筛选出一些平时没有注意到的或者更深入的理解” 在写程序中,字符串String的操作是非常多的.在平时用字符串就只用了一部分特性.这次我们来看看关于字符串主要有哪些操作方式.主要从以下几个方面讲解:String本身特性.String格式化输出.正则表达式.扫描输入类Scanner类. 一.String 我们在定义一个String对象的时候,比如String test = "

从头认识java-13.15 使用泛型时出现的问题(2)-实现参数化接口与重载

接着上一章节,我们这一章节讨论一下两个比较偏门的知识点:实现参数化接口与重载. 主要笔者觉得这两个知识点比较有意思而已. 1.实现参数化接口 下面是不能编译的代码: package com.ray.ch13; interface Generator<T> { } class MyGenerator implements Generator<MyGenerator> { } class MyGenerator2 extends MyGenerator implements Gener

从头认识java-13.5 利用泛型构建复杂模型

这一章节我们来展示一下如何利用泛型构建复杂模型? 1.元组列表 我们之前已经说过元组是一个复杂的模型,能够返回多对象. package com.ray.ch11; import java.util.ArrayList; public class Test { public ArrayList<Tuple<A, B, C>> test() { ArrayList<Tuple<A, B, C>> list = new ArrayList<Tuple<

从头认识java-13.2 利用元组的方式返回多类型对象

这一章节我们来讨论一下利用元组的方式返回多类型对象. 1.定义元组 @SuppressWarnings("hiding") class Tuple<A, B> { public final A a; public final B b; public Tuple(A a, B b) { this.a = a; this.b = b; } } 这里可能有人会问到安全的问题,我们做出一些解释: 大家注意我们的属性域都是使用了final,这样迫使创建新的对象,而不是对原对象进行修改

从头认识java-13.11 对比数组与泛型容器,观察类型擦除给泛型容器带来什么问题?

这一章节我们继续类型擦除的话题,我们将通过对比数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { public static void main(String[] args) { Fruit[] fruits = new Apple[5]; fruits[0] = new Apple(); fruits[1] = new Fuji(); fruits[2] = new Fruit(); } } cla

从头认识java-13.11 对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题?

这一章节我们继续类型擦除的话题,我们将通过对照数组与泛型容器,观察类型擦除给泛型容器带来什么问题? 1.数组 package com.ray.ch13; public class Test { public static void main(String[] args) { Fruit[] fruits = new Apple[5]; fruits[0] = new Apple(); fruits[1] = new Fuji(); fruits[2] = new Fruit(); } } cla

从头认识java-13.9 隐式和显示的创建类型实例

对于上一章节擦除引起的问题与解决的方法有读者提出过于简单.这里解释一下:由于笔者本身也遇不到对应的问题.仅仅是凭空想像一些有可能的问题,基于水平有限,因此上一章节写的比較简单,欢迎广大读者踊跃提意见,我会尽量改进. 回归到这一章节,这里我们将讨论隐式和显示的创建类型实例. 1.隐式建类型实例 我们上一章节提到以下有问题的代码: package com.ray.ch11; public class Test<T> { public void test(Object object){ // Sys

从头认识java-13.3 泛型接口的使用

这一章节我们来讨论一下泛型接口的使用. 我们以生成器为例子(generator),生成器是工厂方法的一种运用,主要用来创建对象,一般使用工厂方法都是需要输入参数以便取得不同的对象,但是生成器是生成一系列的对象. 代码: package com.ray.ch13; import java.util.Iterator; import java.util.Random; public class Test implements Generator<Father> { private Class<

从头认识java-13.12 超类通配符

这一章节我们来讨论一下超类通配符. 1.什么是超类通配符 在前一章节我们提到一种通配符,是使用<? extends XXX>来实现的,导致了后面的一系列问题,如今我们引入还有一种通配符--超类通配符.它是使用<? super XXX>来实现的. 样例: package com.ray.ch13; import java.util.ArrayList; public class Test { public static void main(String[] args) { Array