老师说今天大家上课状态不好,唉明天就是最后一天了,好舍不得这个老师。今天老师讲了算法结构。话不多说,直接上笔记。
数据结构~
数组 => 一组[类型相同]而且[存储空间连续]的数据
=> 一组数据
数组最大的特点:[存储空间连续]
ArrayList => 底层基于数组实现的 有序
不唯一的单值类型集合
链表 => LinkedList => 底层基于链表实现的
有序 不唯一的单值类型集合
双向循环链表
双向:每一个元素记录下一个元素的同时
还要记录自己的上一个元素是谁
循环:首尾相连
添加:形成双向循环链表 添加元素时要尊重4句话
1.新元素的下一个指向header
2.新元素的上一个指向header的上一个
3.新元素的下一个的上一个指向新元素本身
4.新元素的上一个的下一个指向新元素本身
(C)H(A) (H)A(B) (A)B(C) (B)C(H)
删除:要尊重两句话
加入要删除的元素是X 则
X的上一个的下一个 指向X的下一个
X的下一个的上一个 指向X的上一个
(C)H(A) (H)A(C) { (A)B(C) } (A)C(H)
B的上一个的下一个 指向B的下一个 finish
B的下一个的上一个 指向B的上一个
-------------------------------
(A)H(A) (H)A(H)
3 4 2 1
(B)H(A) (H)A(B) (A)B(H)
3 4 2 1
(C)H(A) (H)A(B) (A)B(C) (B)C(H)
3 4 2 1
=================================
栈 => LIFO => Last In First Out => 后进先出
1> 电梯
2> 弹夹
3> 丁一的故事~
push() 压栈 pop() 弹栈
Stack -> 使用数组模拟栈结构的实现~
同样有序不唯一的单值类型集合
=====================================
=> 先进先出
=========================================
哈希表 = 散列表 = Hashtable
哈希 => hash
散列:将一大组数据 分散排列成若干小组
26 13 37 77 86 95
[0]
[1] 77 37 13
[2] 86 26
[3] 95
38
%4 => &3
HashSet => 底层基于哈希表实现的无序 但是唯一的集合
======================
数组 => ArrayList
链表 => LinkedList
栈 => Stack
队列 => Queue
哈希表 => HashSet
二叉树 => TreeSet
James Gosling => Java之父 //下图.高司令
Joshua Bloch => Java之母 //下图.就是不老实
ArrayList & LinkedList 有什么区别
ArrayList底层基于数组实现
存储空间是连续的 查找遍历效率较高 但是添加删除元素效率较低
LinkedList 底层基于链表实现
底层存储空间并不连续 查找遍历效率较低 但是添加删除效率极高
单词判断是否正确的工具
import java.util.*;//用Sun公司提供给我们的哈希表实现
import java.io.*;//Input Output 读取文件内容
import javax.swing.*;//轻量级组件包
public class Gogo{
public static void main(String[] args)throws Exception{
HashSet<String> set = new HashSet<>(16384,10.0F);
/////////////////////////////////////////////
FileReader fr = new FileReader("EtoakWords.txt");//针头
BufferedReader br = new BufferedReader(fr);//针管
String str;
while((str = br.readLine())!=null){
set.add(str.toLowerCase());//添加到哈希表当中
}
br.close();
/////////////////////////////////////////////
while(true){
String word = JOptionPane.showInputDialog(null,"请输入您要检查的单词");
word = word.toLowerCase();
if(word == null || "88".equals(word) || "3166".equals(word)){
JOptionPane.showMessageDialog(null,"感谢您的使用 欢迎再次使用~");
break;
}
if(set.contains(word)){
JOptionPane.showMessageDialog(null,"恭喜您~ 拼写正确");
}else{
JOptionPane.showMessageDialog(null,"很抱歉~ 拼写错误");
}
}
}
}
TestHashSet//底层默认分成16组,必须底层分成2^n
import java.util.*;
public class TestHashSet{
public static void main(String[] args){
HashSet<Integer> set = new HashSet<>(8);
set.add(33);
set.add(33);
set.add(33);
set.add(33);
set.add(55);
set.add(77);
set.add(44);
System.out.println(set);
//[33, 44, 77, 55]
}
}
TestArrayList
import java.util.*;//util
public class TestArrayList{
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(14);
list.add(53);
list.add(26);
list.add(55);
System.out.println(list);
//[14, 53, 26, 55]
}
}
TestLinkedList
import java.util.*;
public class TestLinkedList{
public static void main(String[] args){
LinkedList<String> list = new LinkedList<String>();
list.add("Banana");
list.add("Orange");
list.add("Apple");
System.out.println(list);
//[Banana, Orange, Apple]
}
}
TestStack
import java.util.*;
public class TestStack{
public static void main(String[] args){
Stack<String> stk = new Stack<>();
stk.push("香蕉");
stk.push("橘子");
stk.push("西瓜");
System.out.println(stk.pop());
System.out.println(stk.pop());
System.out.println(stk.pop());
/*西瓜
橘子
香蕉*/
}
}
TestTreeSet1
import java.util.*;
public class TestTreeSet{
public static void main(String[] args){
TreeSet<String> set = new TreeSet<>();
set.add("Jay");
set.add("Andy");
set.add("Jacky");
set.add("Aaron");
set.add("Leon");
System.out.println(set);
//[Aaron, Andy, Jacky, Jay, Leon]
}
}
TestTreeSet2
import java.util.*;
public class TestTreeSet{
public static void main(String[] args){
TreeSet<Integer> set = new TreeSet<>();
set.add(11);
set.add(53);
set.add(49);
set.add(22);
set.add(86);
set.add(57);
System.out.println(set);
//[11, 22, 49, 53, 57, 86]
}
}
%x x必须是2^n 才满足 %x = &(x - 1)
Viva
i18n //中间有18个省略
Internationalization => 国际化
Java四大名著
Java编程语言(第三版)----James Gosling(Java之父)
Java编程思想(第4版)-----Bruce Eckel
JAVA 2核心技术 卷I:基础知识(原书第8版)----Cay Horstmann
JAVA 2核心技术 卷II:高级特性(原书第8版)----Cay Horstmann
Effective Java中文版--------Joshua Bloch