Java 学习(19)--集合(collection)/ 学生管理系统

简介: 1.collection(1)集合的由来 我们学习的是面向对象语言, 而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。

1.collection

(1)集合的由来 

我们学习的是面向对象语言, 而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。

而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,数组和 StringBuffer是容器类型的变量 。但是, StringBuffer 的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。

而对象数组又不能适应变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,Java就提供了集合类供我们使用。

 

(2)集合和数组的区别 

A:长度区别  数组固定--集合可变

B:内容区别  数组可以是基本类型,也可以是引用类型--集合只能是引用类型

C:元素内容

数组只能存储同一种类型

集合可以存储不同类型 (其实集合一般存储的也是同一种类型 )

 

(3)集合的继承体系结构

由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,

但是它们都是要提供存储和遍历功能的,

我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。

 

Collection

|--List 有序 ,可重复

|--ArrayList

底层数据结构是数组,查询快,增删慢。线程不安全,效率高

|--Vector

底层数据结构是数组,查询快,增删慢。线程安全,效率低

|--LinkedList

底层数据结构是链表,查询慢,增删快。线程不安全,效率高

|--Set 无序 ,唯一

|--HashSet :唯一

底层数据结构是哈希表。  

如何保证元素唯一性的呢 ?

依赖两个方法: hashCode() 和 equals()  开发中自动生成这两个方法即可

|--LinkedHashSet :唯一且有序底层数据结构是链表和哈希表由链表保证元素有序

由哈希表保证元素唯一

|--TreeSet :排序和唯一

 

底层数据结构是红黑树。如何保证元素排序的呢 ?

自然排序

比较器排序

 

如何保证元素唯一性的呢 ?

根据比较的返回值是否是 0 来决定

 

(4) Collection 的功能概述  

1:添加功能

boolean add(Object obj): 添加一个元素

boolean addAll(Collection c) :添加一个集合的元素

2:删除功能

void clear() :移除所有元素

boolean remove(Object o): 移除一个元素

boolean removeAll(Collection c) :移除一个集合的元素 (是一个还是所有 ) 

3:判断功能

boolean contains(Object o) :判断集合中是否包含指定的元素

boolean containsAll(Collection c) :判断集合中是否包含指定的集合元素(是一个还是所有 )

boolean isEmpty() :判断集合是否为空

4:获取功能

Iterator<E> iterator() (重点 ) 5:长度功能

int size() :元素的个数

5:交集功能

boolean retainAll(Collection c):两个集合都有的元素 ?

6:把集合转换为数组Object[] toArray()

 

(5)迭代器

A:是集合的获取元素的方式。

B:是依赖于集合而存在的。 

 

(6)Collection 集合的案例 (遍历方式迭代器 )

集合的操作步骤:

A:创建集合对象

B:创建元素对象

C:把元素添加到集合

D:遍历集合

<strong><strong>Collection c =	newArrayList();    // 创建集合对象 </strong></strong>
c.add('hello');

c.add('world');

c.add('Java'); // 创建并添加元素



Iterator it = c.iterator(); //遍历集合

while (it.hasNext()) {

String s =(String) it.next();

System.out.println(s);

}

 

(7)针对 Collection 集合如何使用 

1.唯一吗

       是: Set

    2.排序吗 ?  是: TreeSet  否: HashSet

        3.如果你知道是 Set,但是不知道是哪个 Set,就用 HashSet。

 

       否: List

     2.要安全吗 ?

        是:// 线程安全

        List<String> list2 = Collections.synchronizedList(new ArrayList<String>());

        否: ArrayList 或者 LinkedList

            3.查询多: ArrayList  增删多: LinkedList

 

(8) 在集合中常见的数据结构

ArrayXxx:底层数据结构是数组,查询快,增删慢                  

LinkedXxx:底层数据结构是链表,查询慢,增删快                  

HashXxx:底层数据结构是哈希表。依赖两个方法: hashCode()和 equals() 

TreeXxx:底层数据结构是二叉树。

两种方式排序:自然排序和比较器排序

案例:学生信息管理系统

StudentTest.java

package com.neuedu.test;

import java.util.List;
import java.util.Scanner;

import com.neuedu.dao.StudentDao;
import com.neuedu.game.GuessGame;
import com.neuedu.model.Student;

/**
 * 
 */
public class StudentTest {

	public static void main(String[] args) {
		System.out.println("--------------欢迎进入学生管理系统--------------");
		while(true) {
			System.out.println("请选择功能:");
			System.out.println("1:注册");
			System.out.println("2:登录");
			System.out.println("3:退出");
			Scanner in = new Scanner(System.in);
			int select = in.nextInt();
			StudentDao dao = new StudentDao();
			switch (select) {
				case 1: //注册
					System.out.println("请输入用户名:");
					String username = in.next();
					String password = "";
					while(true) {
						System.out.println("请输入密码:");				
						password = in.next();
						System.out.println("请输入确认密码");
						String pwd = in.next();
						if(pwd.equals(password)) {
							break;					
						}
						System.out.println("两次输入的密码必须一致");
					}
					System.out.println("请输入学生姓名:");
					String name = in.next();
					System.out.println("请输入学号:");
					String stuNum = in.next();
					Student student = new Student(username, password, name, stuNum);
					
					dao.regist(student);
					System.out.println("注册成功");
					
					
					break;
				case 2:  //登录
					while(true) {
						System.out.println("请输入用户名");
						String um = in.next();
						System.out.println("请输入密码:");
						String pw = in.next();
						
						boolean loginflag = dao.login(um, pw);
						if(!loginflag) {
							System.out.println("用户名或密码错误,请重新登录!");
							continue;							
						}
						break;
					}
					System.out.println("登录成功");
					
					List<Student> students = dao.getAllStudent();
					System.out.println("学号\t姓名\t用户名\t密码");
					for(Student s : students) {
						System.out.println(s);
					}
					System.out.println("是否要玩猜拳游戏?(y/n)");
					String next = in.next();
					if("n".equals(next)) {
						System.out.println("程序退出");
						System.exit(0);
					}
					
					GuessGame gg = new GuessGame();
					gg.guess();
					
					System.exit(0);
					break;
				case 3:  //退出
					System.out.println("欢迎下次使用");
					System.exit(0);
					break;
		
				default:
					System.out.println("输入错误,退出");
					System.exit(0);
					break;
			}
		}
		
		

	}

}

Student.java

package com.neuedu.model;

public class Student {
	
	private String username;
	private String password;
	private String name;
	private String stuNum;
	
	
	
	public Student() {
		
	}

	public Student(String username, String password, String name, String stuNum) {
		
		this.username = username;
		this.password = password;
		this.name = name;
		this.stuNum = stuNum;
		
	}
	
	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 String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getStuNum() {
		return stuNum;
	}
	public void setStuNum(String stuNum) {
		this.stuNum = stuNum;
	}

	@Override
	public String toString() {
		return stuNum + "\t" + name  + "\t" + username + "\t" + password;
	}

	

}

StudentDao.java

package com.neuedu.dao;

import java.util.ArrayList;
import java.util.List;

import com.neuedu.model.Student;

public class StudentDao {
//	private Collection students = new ArrayList();
	private static final List<Student> students = new ArrayList<Student>();
	/*
	 * 
	 */
	public void regist(Student student) {
		
		students.add(student);
		
	
	}
	
	public boolean login(String username,String password) {
		for(int i = 0; i < students.size();i++) {
			Student student = students.get(i);
			if(username.equals(student.getUsername()) && password.equals(student.getPassword())) {
				return true;
			}						
		}
	
		return false;
	}
	
	public List<Student> getAllStudent(){
		return students;
	}
 
}

GuessGame.java

package com.neuedu.game;

import java.util.Scanner;

/**
 * 
 * @author kaven.wei
 * 猜拳
 * 定义:1:剪刀 2:石头 3:布
 *
 */
public class GuessGame {
	public static void main(String[] args) {
		for (int i = 0; i < 100; i++) {
			System.out.println((int)(Math.random()*3) + 1);
		}
	}
	
	public void guess() {
		Scanner in = new Scanner(System.in);
		System.out.println("---------------欢迎进入猜拳小游戏----------------");
		System.out.println("游戏规则如下");
		System.out.println("1:剪刀");
		System.out.println("2:石头");
		System.out.println("3:布");
		
		int com = (int)(Math.random()*3) + 1;
		System.out.println("请出拳:");
		int player = in.nextInt();
		
		if(player == com) {
			System.out.println("平局,加油");
			return;
		}
		
		switch (player) {
		case 1:
			if(com == 2) {
				System.out.println("你输了,加油");	
				
			}else {
				System.out.println("恭喜你,赢啦");
			}
			break;
		case 2:
			if(com == 3) {
				System.out.println("你输了,加油");			
			}
			else {
				System.out.println("恭喜你,赢啦");
			}
			break;
		case 3:
			if(com == 1) {
				System.out.println("你输了,加油");				
			}else {
				System.out.println("恭喜你,赢啦");
			}	
			break;	
		default:
			System.out.println("你输入的数据不合法");
			break;
		}
		
		System.out.println("电脑出的是:" + com);
		
		
		
		
	}

}

运行

目录
相关文章
|
4天前
|
JavaScript Java 测试技术
基于Java的同城蔬菜配送管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的同城蔬菜配送管理系统的设计与实现(源码+lw+部署文档+讲解等)
10 0
|
4天前
|
JavaScript Java 测试技术
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
20 0
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
4天前
|
JavaScript Java 测试技术
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
18 0
基于Java的高校毕业生就业管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
4天前
|
JavaScript Java 测试技术
基于Java的家纺用品销售管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的家纺用品销售管理系统的设计与实现(源码+lw+部署文档+讲解等)
15 0
|
4天前
|
JavaScript Java 测试技术
基于Java的教务管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的教务管理系统的设计与实现(源码+lw+部署文档+讲解等)
19 0
|
4天前
|
JavaScript Java 测试技术
基于Java的西安旅游管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的西安旅游管理系统的设计与实现(源码+lw+部署文档+讲解等)
16 0
|
4天前
|
JavaScript Java 测试技术
基于Java的驾考自主学习预约平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的驾考自主学习预约平台的设计与实现(源码+lw+部署文档+讲解等)
15 0
|
4天前
|
JavaScript Java 测试技术
基于Java的学生奖惩管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的学生奖惩管理系统的设计与实现(源码+lw+部署文档+讲解等)
4 0
|
4天前
|
JavaScript Java 测试技术
基于Java的校园兼职管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的校园兼职管理系统的设计与实现(源码+lw+部署文档+讲解等)
16 0
|
4天前
|
JavaScript Java 测试技术
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的实验室设备管理系统的设计与实现(源码+lw+部署文档+讲解等)
16 1