每日一句:时间可真宝贵,不想去回忆,只想做好,明天又是美好的一天呢!
一:算法介绍+特点(栈、队列、数组、链表、Hash、树)
栈:先进后出。
队列:先进先出。
数组:查询快,增删慢。
链表:通过一个链子把多个结点(元素)连接起来,由数据和地址组成的一个元素,节点本身必须有一个地址值(就是下一个元素的地址值)。特点:查询慢,增删快。
hash:一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的信息压缩到某一固定长度的消息摘要的函数。
二:集合
1:为什么会引出集合这个概念,不是可以用数组来存储数据吗?
集合和数组的区别:数组不适应变化的需求,所有Java就提供了集合类供我们使用
数组:a.长度固定
b.可以存储基本类型,也可以存储引用类型
c.存储元素类型一致
集合:a.长度可变
b.只可以存储引用类型
c.可以存储多种类型
2:为什么集合中存在很多类型的集合类?
为了满足不同的需求,例如说:要求元素是重复的,唯一的,有序的,无序的。Java就提供了不同的集合类。
3:Java Api集合类图图解
如果想真正掌握这些类,可以在Java Api 查看这些集合类的状态,调用它的方法,熟能生巧。
4:List遍历的三种方法
a.for(普通for)
b.Iterator(迭代器)
c.foreach(增强for)
举个例子:
package com.study01;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
* 1: ArrayList集合案例(加入泛型,要求三种方式遍历)
A:存储字符串并遍历
B:存储自定义对象并遍历
Student(name,age)
*/
public class ArrayDemo1 {
public static void main(String[] args) {
//创建对象
Student s1 = new Student("小王",37);
Student s2 = new Student("小红",20);
Student s3 = new Student("小李",18);
//创建集合
List <Student> list = new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
//用iterator遍历
Iterator<Student> it = list.iterator();
while(it.hasNext()){
Student s=it.next();
System.out.println(s.getAge()+" "+s.getName());
}
System.out.println("-----------------");
//用for循环遍历
for(int i=0;i<list.size();i++){
Student ss=list.get(i);
System.out.println(ss.getAge()+" "+ss.getName());
}System.out.println("-----------------");
//用加强for循环遍历
for(Student sss:list){
System.out.println(sss.getAge()+" "+sss.getName());
}
}
}
5:泛型是什么?为什么会出现泛型?使用泛型的好处是什么?一般在哪里使用?
定义:是一种把明确数据类型的工作推迟到创建对象或者调用方法的时候才去明确类型的特殊类型。
好处:
a:把运行时期问题提前到了编译时期
b:避免了强制类型转换
c:优化程序设计,解决了黄色警告线问题
在哪里使用?
一般来说就是在集合中用的多。通过查询Javapi,如果类或者接口或者方法出现了<>说明这里就有泛型。
6:Set类中的HashSet类的讲解
特点:输出元素唯一,但是无序。
咋样保证元素的唯一性呢?
使用:如果你看到哈希结构的集合,就要考虑可能需要重写这两个方法。如果真要重写,自动生成即可。(shift+alt+s来重写其中的hashCode()和equals()方法)
7:写一个登录注册案例(用集合来存储)
创建一个com.edu.domain包,创建一个user类
这里写代码片
package com.edu.domain;
public class User {
private String userName;
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
}
创建一个com.edu.dao包,创建一个UserDao类
package com.edu.dao;
import com.edu.domain.User;
public interface UserDao {
//注册
public abstract void regist(User user);
//登录
public abstract boolean isLogin(String userName,String password);
}
创建一个创建一个com.edu.dao.impl包,创建一个UserDaoImpl类
package com.edu.dao.impl;
import java.util.ArrayList;
import java.util.List;
import com.edu.dao.UserDao;
import com.edu.domain.User;
public class UserDaoImpl implements UserDao{
//创建一个list集合对象
static List<User> list=new ArrayList<User>();
//注册
@Override
public void regist(User user) {
//调用List方法添加信息
list.add(user);
}
@Override
public boolean isLogin(String userName, String password) {
boolean flag=false;
//遍历这个集合
{
for(User user:list){
if(userName.equals(user.getUserName())&&password.equals(user.getPassword())){
flag=true;
}
}
}
return flag;
}
}
创建一个创建一个com.edu.testl包,创建一个test类
package com.edu.test;
import java.util.Scanner;
import com.edu.dao.impl.UserDaoImpl;
import com.edu.domain.User;
public class Test {
public static void main(String[] args) {
while(true){
System.out.println("欢迎来到登录注册页面:");
System.out.println("1:登录");
System.out.println("2:注册");
System.out.println("3:退出系统");
Scanner sc=new Scanner(System.in);
UserDaoImpl usl=new UserDaoImpl();
System.out.println("请输入您的选择:");
String choice=sc.nextLine();
switch(choice){
case "1":
System.out.println("欢迎来到注册页面");
System.out.println("请输入用户名:");
String userName=sc.nextLine();
System.out.println("请输入密码:");
String password=sc.nextLine();
User user=new User(userName,password);
usl.regist(user);
System.out.println("注册成功");
break;
case "2":
System.out.println("欢迎来到登录页面");
System.out.println("请输入用户名:");
String userName1=sc.nextLine();
System.out.println("请输入密码:");
String password1=sc.nextLine();
boolean flag=usl.isLogin(userName1, password1);
{
if(flag){
System.out.println("登录成功");
}else{
System.out.println("登陆失败");
}
break;
}
case "3":
default:
System.exit(0);
break;
}
}
}
}